如何确定TCP连接将在哪个接口上断开?


10

我有一台具有多个以太网接口的服务器。告诉输出TCP连接将通过哪个接口的最简单方法是什么?“ netstat -rn”的结果对我来说是希腊的,因此,如果您的回答是“查看本地路由表”,请进行详细说明。

Answers:


13

对我来说,我可以使用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

该命令给出的信息如下(在此处找到源):

目标 -目标网络或目标主机。

网关 -网关地址,*如果没有设置。

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连接的默认最大段大小。

窗口 -此路由上TCP连接的默认窗口大小。

irtt-初始RTT(往返时间)。内核使用它来猜测最佳的TCP协议参数,而无需等待(可能很慢)答案。

Iface-此路由的数据包将发送到的接口。

其他字段可以是:

公制 -到目标的距离(通常以跃点计)。最近的内核没有使用它,但是路由守护程序可能需要它。

参考 -此路线的参考数量。(在Linux内核中未使用。)

用途 -路由查找计数。根据-F和-C的使用,这将是路由高速缓存未命中(-F)或命中(-C)。

HH(仅高速缓存)-ARP条目和高速缓存路由的数量,这些条目引用高速缓存路由的硬件标头高速缓存。如果缓存的路由的接口(例如lo)不需要硬件地址,则该值为-1。

Arp(仅缓存)-缓存路由的硬件地址是否为最新。

现在到手头的问题。我现在记得的最简单的方法(和往常一样,有几种方法可以做相同的事情)是使用iptraf。只需安装:

sudo apt-get install iptraf

并以root特权运行它: sudo iptraf

在“ iptraf选择IP流量监视器 ”菜单中,然后选择“ 所有接口”。那应该向您显示所有TCP连接以及它们与哪个接口相关。它基于终端,非常适合监视。


路易斯的回答很好。您也可以使用命令route

1
给出路由表信息后,正确的答案应该是说正确的答案,而不是说去看看它去哪里,而是可以看到给定地址的流量去哪里。
psusi 2013年

8

您可以使用以下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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.