Linux仅使用原始套接字使用接口

我为我的embedded式系统开发了一个OpenWrt Linux发行版。 该设备有3个networking接口:eth0,eth1和wlan0。

其中一个networking接口(eth0)只能用于原始套接字编程。 我可以用参数AF_PACKETSOCK_RAWETH_P_ALL创build一个套接字。 套接字接收所有的networkingstream量,我可以发送数据包,一切正常。

但我的问题是,操作系统也使用接口发送reciving(例如ARP和ICMP请求/响应)。

有没有任何选项,只有我的程序,而不是由操作系统本身使用该接口?

这是不可能实现与香草核心。 但是,这可能会接近:

首先,忽略该接口上的所有arp请求:

 echo 8 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 

然后,禁用IPv6:

 echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6 

最后,过滤所有来自该接口的IPv4数据包

 iptables -I INPUT -i eth0 -j DROP 

并且不要在该接口上设置IP地址或路由。 这当然不是完美的,某些数据包仍然会被内核处理,但我不认为有更好的解决方案。