我有一台带有多个以太网接口的服务器。有什么最简单的方法可以知道传出的 TCP 连接将通过哪个接口发出?“netstat -rn”的结果对我来说毫无意义,因此如果您的答案是“查看本地路由表”,请提供详细而清晰的信息。
答案1
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
该命令给出的信息如下(来源这里):
目的地- 目标网络或目标主机。
网关- 网关地址,*
如果未设置。
基因掩码- 目标网络的网络掩码。
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)
卫星发射系统- 此路由上的 TCP 连接的默认最大段大小。
窗户- 此路由上的 TCP 连接的默认窗口大小。
伊尔特- 初始 RTT (往返时间)。内核使用它来猜测最佳 TCP 协议参数,而无需等待(可能很慢的)答案。
我面对- 此路由的数据包将发送到的接口。
其他字段可以是:
公制- 到目标的距离(通常以跳数计算)。最近的内核不再使用它,但路由守护进程可能需要它。
参考- 对此路由的引用数。(Linux 内核中未使用。)
使用- 路由查找次数。根据 -F 和 -C 的使用情况,这可能是路由缓存未命中 (-F) 或命中 (-C)。
赫赫(仅限缓存)- 引用缓存路由的硬件标头缓存的 ARP 条目和缓存路由的数量。如果缓存路由的接口不需要硬件地址(例如 lo),则该值为 -1。
阿普(仅限缓存)——缓存路由的硬件地址是否是最新的。
现在回到手头的问题。我现在能记得的最简单的方法(一如既往,做同样的事情有几种方法)是使用iptraf
。只需安装它:
sudo apt-get install iptraf
并以 root 权限运行它:sudo iptraf
iptraf
在选择菜单中IP 流量监控然后选择所有接口。这将向您显示所有 TCP 连接以及它们与哪个接口相关。它基于终端,适合于监控目的。
答案2
你可以使用以下命令查询内核路由表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