Получение IP-адреса интерфейса, который имеет маршрут к данному хосту - PullRequest
3 голосов
/ 15 марта 2012

Я пишу простую библиотеку очередей сообщений, которая в основном позволит вам настроить службу обмена сообщениями между двумя серверами по TCP или UDP. Я хочу покончить с понятием клиент / сервер, поскольку два сервера будут делать одно и то же (отправлять и получать сообщения), поэтому не имеет значения, какой именно.

Я подумал, что сделаю это, используя IP-адреса двух серверов, чтобы решить, какой из них должен связывать сокет сервера, а какой - как клиент (возможно, выбрав тот, у которого наименьший неравный октет будет сервер, при условии, что это не та же машина).

Для этого мне нужно знать локальный IP-адрес [ов] интерфейса [ов], который имеет маршрут к другому компьютеру. Есть ли простой способ получить эту информацию?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012
$ ip route get 2a00:1450:4016:800::1011
2a00:1450:4016:800::1011 from :: via 2a01:4f8:100:63e0::1
    dev eth0  src 2a01:4f8:100:6fab:cdef::1  metric 0 

iproute внутренне использует сообщение netlink RTM_GETROUTE для получения информации, как и вы.Затем src указывает адрес, который будет использоваться для связи с этим хостом, если вы будете использовать автоматическое связывание (т.е. не вызывать bind (2) перед соединением или вызывать связывание с подстановочным знаком для поля адреса).

1 голос
/ 15 марта 2012

вероятно, выбрав сервер с наименьшим неравным октетом в качестве сервера, предполагая, что это не тот же компьютер

Довольно специальное решение.Я хотел бы иметь многоадресную рассылку работающего сервера, и только что начавшийся поиск этих многоадресных рассылок начинался бы как сервер, если он их не нашел, и рекламировал себя через многоадресную рассылку и т. Д. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...