检测到某个IP地址的流量经过哪个接口

检测到某个IP地址的流量经过哪个接口

我正在制作一个脚本,我需要检测IP的流量通过哪个接口。这是因为在架构中,IP 地址仅用于四个 NIC 之一,但也可以是这四个中的任何一个。

我所做的手动方式是运行 tcpdump:如果我看到数据包,那么这就是接口;如果没有,则取消 tcpdump,并在另一个接口上再执行一次 tcpdump。

我正在运行 FreeBSD。

答案1

称呼route get

route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'

答案2

netstat -tau显示程序使用的本地地址和端口。每个接口都有自己的地址,除了绑定等情况......这是您需要的信息吗?

如果是这样,则很容易在脚本中使用它grep并输出。cut

例如: netstat -taunpe | grep firefox | awk '{print $4}' | cut -d ':' -f 1 检索“firefox”已建立的连接所使用的本地地址。

答案3

我不确定 *BSD,但在 Linux 上,它route -n会告诉您(除了其他事情)标志(您可能想要搜索标记为默认路由的行)和设备名称:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.100.63.254   0.0.0.0         UG    0      0        0 eth0
10.100.0.0      0.0.0.0         255.255.192.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0

或者:

$ ip route
default via 10.100.63.254 dev eth0 
10.100.0.0/18 dev eth0  proto kernel  scope link  src 10.100.12.38 
127.0.0.0/8 dev lo  scope link 
169.254.0.0/16 dev eth0  scope link

相关内容