Назад | Перейти на главную страницу

Получить интерфейс и 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/"

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

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

Я использую os x 10.6.8

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

Если IP-адреса не помогают вам легко определить интерфейс, запустите «traceroute», после запуска route, посмотрите на первый переход и сравните его с соответствующими шлюзами из «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. ...

Ты можешь использовать 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