如何find导致arp请求的进程?

当我在网关中运行tcpdump时,我得到了很多来自网关本身的arp请求。 我不知道为什么发生这种情况。 我怎样才能find导致这些ARP请求的过程?

$ tcpdump -n arp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 16:51:03.662114 ARP, Request who-has 211.123.123.251 tell 211.123.123.242, length 28 16:51:03.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28 16:51:04.002111 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28 16:51:04.518111 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28 16:51:04.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28 16:51:05.002110 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28 16:51:05.518110 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28 16:51:06.002112 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28 16:51:06.210111 ARP, Request who-has 211.123.123.252 tell 211.123.123.242, length 28 16:51:06.518114 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28 16:51:07.114111 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28 16:51:07.210111 ARP, Request who-has 211.123.123.252 tell 211.123.123.242, length 28 16:51:07.314112 ARP, Request who-has 211.123.123.249 tell 211.123.123.242, length 28 

以下是门configuration:

 $ ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 6c:f0:49:a8:05:4c brd ff:ff:ff:ff:ff:ff inet 211.123.123.242/28 brd 211.123.123.255 scope global eth0 inet6 fe80::6ef0:49ff:fea8:54c/64 scope link valid_lft forever preferred_lft forever 

在该子网中,只有211.123.123.242(网关IP)可用,其他ips(如211.123.123.246)不可用。

更新:

我可以看到这些不可用的ips的stream量,我认为这是这些arps的原因。 虽然我无法弄清楚为什么这些交通发生。 也许是在isp提供商错误的configuration。

 $ tcpdump host 211.103.252.245 23:50:11.414705 IP 59.34.131.5.7099 > 211.123.123.245.17701: Flags [S.], seq 3745049197, ack 1625918577, win 8760, options [mss 1460], length 0 23:50:12.991258 IP 75.126.1.222.80 > 211.123.123.245.1078: Flags [S.], seq 651817046, ack 152032452, win 17473, length 0 

当您运行DHCP服务器时,此行为非常常见。 服务器探测租约范围内的地址,以查看哪些是空闲的。 还有其他networking监控解决scheme使用ARP来跟踪networking上正在使用的地址。

据我所知,Unix系统中没有系统能够看到哪个程序启动了一个arp请求。 你可以用strace / ktrace / dtrace来查找系统调用。

最后我不会太担心。 大量的ARP数据包可能会导致问题,但只有当它达到1000pps的范围。 每秒几包是没有什么可担心的。

路由器上的ARP请求是预期的行为。 ARP请求被使用,所以路由器知道networking中的特定路由的下一跳地址。 其基本工作是将IP地址映射到MAC地址。

从你上面提供的样本来看,它看起来不像是过度ARP欺骗。

如果ARP数据包来源于Linux机器,可以使用–pid-owner XXX选项产生大量的iptables规则(如果创build数据包的进程的pid为XXX,则匹配;您将不得不覆盖大量的pid号码),并希望实际发送数据包的过程不是短暂的其他事情。

或者,可以使用(less得多)–uid-owner XXX选项来查找发送数据包的进程所有者的uid。

相切地说,如果211.123.123.242是你的网关,并且从这个networking寻找与各种IP对应的MAC地址,那么它可能有一些数据包要从networking外部传送。 谁和为什么试图与不存在的地址进行通信实际上可能比search网关盒上ARP请求的发起者更有趣。

ARP请求正常。 这个协议是用来知道哪些机器与MAC是。 然后在ARP IP被build立。 ARP作为ARP模块内核构build。 检查这个和这个