Получить интерфейс и IP-адрес, используемый для подключения к определенному хосту (ip)

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

Я хочу узнать мой локальный интерфейс и IP-адрес, используемый для достижения определенного хоста. Например, если к моему устройству подключено 3 адаптера, и все три подключены к разным сетям, я хотел бы знать, какой из трех (в частности, его IP-адрес) используется для доступа к my.local.intranet (в этом случай, это был бы туннельный интерфейс vpn). Я подозреваю, что это работа для ifconfig или traceroute, но я не смог найти правильные ключи.

Я использую OSX 10.7 (Дарвин)

РЕДАКТИРОВАТЬ: Для легкого доступа, это то, что я в конечном итоге написал, чтобы сделать трюк:

ifconfig `route get <host> | grep "interface: " | sed "s/[^:]*: \(.*\)/\1/"` | grep "inet " | sed "s/.*inet \([0-9.]*\) .*/\1/"

Любые улучшения / оптимизации приветствуются.

4 ответа

Решение

Вы можете попробовать "route" напечатать свою таблицу маршрутизации, которая покажет вам сети назначения и шлюзы для ваших различных интерфейсов.

Если IP-адреса не помогают вам легко определить интерфейс, запустите "traceroute" после выполнения маршрута, посмотрите на первый прыжок и сравните его со связанными шлюзами из "route" и вуаля - это ваш интерфейс.

#route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
145.67.4.0      switch47        255.255.255.0     U     0      0      eth0
192.168.1.0     localrouter     255.255.255.0     U     0      0      eth1

#traceroute <destination>
1    switch47.ba.foo.com   (145.67.4.1)    0.5 ms  .....
2    xxxxx.xxx.xxxx        (xxx.xxx.xxx.xxx)   0.Xms. ...

Маршрут -n получить www.yahoo.com

Я бегу ОС х 10.6.8

Ты можешь использовать ip route get найти и вывести маршрут, который будет использоваться для указанного пункта назначения. Вывод должен включать интерфейс и адрес источника.

% ip route get 8.8.8.8
8.8.8.8 via 172.16.4.1 dev eth1  src 172.16.4.36

Я не уверен, что это правильно, но netstat может это сделать. Показывает локальный адрес установленных соединений.

# netstat -nt
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
...
tcp        0      0 192.168.1.61:44114      64.34.119.101:80        ESTABLISHED
tcp        0      0 192.168.1.61:36036      107.21.205.201:80       ESTABLISHED
Другие вопросы по тегам