Как определить, на каком интерфейсе будет установлено TCP-соединение?

У меня есть сервер с несколькими сетевыми интерфейсами. Какой самый простой способ определить, через какой интерфейс будет исходить TCP-соединение? Результаты "netstat -rn" греки для меня, поэтому, если ваш ответ "посмотрите на локальную таблицу маршрутизации", пожалуйста, будьте подробны и ясны.

10
задан 13 March 2013 в 19:25

2 ответа

Для меня я вижу, какой интерфейс у меня есть, используя netstat -rn или route -n

cyrex@cyrex:~$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.48.0.1      0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.48.0.0      0.0.0.0         255.255.224.0   U         0 0          0 eth0

Или netstat -r

cyrex@cyrex:~$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192-48-0-1.dyn. 0.0.0.0         UG        0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
192.48.0.0      *               255.255.224.0   U         0 0          0 eth0

В обоих случаях я могу см. название интерфейса в конце, в данном случае это eth0

Информация, предоставленная этими командами, следующая (Источник найден здесь ): [ 1116]

Destination - Сеть назначения или хост назначения.

Шлюз - Адрес шлюза или *, если он не установлен.

Genmask - Маска сети для сети назначения.

 255.255.255.255 for the host destination.
 0.0.0.0 for the default route.  

Флаги - Возможные флаги включают в себя:

 U (route is up)  
 H (target is a host)  
 G (using gateway)  
 R (reinstate route for dynamic routing)  
 D (dynamically installed by daemon or redirect)  
 M (modified from routing daemon or redirect)  
 A (installed by addrconf)  
 C (cache entry)  
 ! (reject route)  

MSS - Максимальный размер сегмента по умолчанию для соединений TCP по этому маршруту. [ 1121]

Окно - Размер окна по умолчанию для TCP-соединений по этому маршруту.

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

Iface - Интерфейс, на который будут отправляться пакеты для этого маршрута.

Другие поля могут быть:

Метрика - Расстояние до цели (обычно учитывается в прыжках). Он не используется последними ядрами, но может понадобиться демонам маршрутизации.

Ссылка - Количество ссылок на этот маршрут. (Не используется в ядре Linux.)

Use - Количество поисков для маршрута. В зависимости от использования -F и -C это могут быть либо ошибки кэша маршрутов (-F), либо попадания (-C).

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

Arp (только для кэширования) - актуален ли аппаратный адрес для кэшированного маршрута.

1131 Теперь к вопросу. Самый простой способ, который я могу вспомнить прямо сейчас (как всегда, есть несколько способов сделать одно и то же), это использовать iptraf. Просто установите его:

sudo apt-get install iptraf

и запустите его с привилегиями root: sudo iptraf

В меню iptraf выберите IP Traffic Monitor [ 1149] и затем выберите Все интерфейсы . Это должно показать вам все TCP-соединения и с каким интерфейсом они связаны. Он основан на терминале, что хорошо для целей мониторинга.

0
ответ дан 13 March 2013 в 19:25

Вы можете запросить таблицы маршрутизации ядра с помощью команды ip. Его подкоманда route get точно скажет вам, как ядро ​​направит пакет на адрес назначения:

 $ ip route get to 10.0.2.2
 10.0.2.2 dev eth0  src 10.0.2.15

, тогда как

$ ip route get to 192.168.3.5
192.168.3.5 via 10.0.2.2 dev eth0  src 10.0.2.15

и

$ ip route get to 127.0.1.1
local 127.0.1.1 dev lo  src 127.0.0.1
0
ответ дан 13 March 2013 в 19:25

Другие вопросы по тегам:

Похожие вопросы: