Networking 在OSX上的TAP接口上过滤以太网数据包(ICMP,Bonjour)
我正在编写一个以第2层接口(TAP)为端点的小型隧道应用程序。在OSX上测试这一点的过程中,我注意到我在隧道上获得了各种各样的流量,这是我没有预料到的,无论是在单个OSX机器上运行隧道时,还是在OSX和Linux机器之间进行隧道传输时。我想过滤掉这些流量,我想知道最好的方法是什么 隧道如下所示(请注意,两个端点可以位于同一台计算机上): 值得注意的流量是目标端口5353和ICMP/IGMP上的Bonjour数据包。在TAP接口上启用多播。我想堵住这种交通。我的想法是:Networking 在OSX上的TAP接口上过滤以太网数据包(ICMP,Bonjour),networking,multicast,packet,ethernet,tun,Networking,Multicast,Packet,Ethernet,Tun,我正在编写一个以第2层接口(TAP)为端点的小型隧道应用程序。在OSX上测试这一点的过程中,我注意到我在隧道上获得了各种各样的流量,这是我没有预料到的,无论是在单个OSX机器上运行隧道时,还是在OSX和Linux机器之间进行隧道传输时。我想过滤掉这些流量,我想知道最好的方法是什么 隧道如下所示(请注意,两个端点可以位于同一台计算机上): 值得注意的流量是目标端口5353和ICMP/IGMP上的Bonjour数据包。在TAP接口上启用多播。我想堵住这种交通。我的想法是: 在接口上关闭多播(在OSX
ebtables
$ ifconfig tap0 -multicast
ifconfig: -multicast: bad value
编辑:在仔细研究之后,似乎UNIX和BSD ifconfig有不同的选项。在OSX/BSD中,是否有其他方法阻止给定接口上的多播/ICMP通信
这是ifconfig输出 OSX(带OSXtentap):
一种可能性是在OSX中使用内置的ipfw防火墙。从终端上,我们可以只允许名为tap1的虚拟网络接口上的tcp通信:
sudo ipfw add 9000 allow tcp from any to any via tap1 # allow tcp
sudo ipfw add 9001 deny ip from any to any via tap1 # block all other incoming and outboung traffic
如果不需要,我们也可以删除规则:
sudo ipfw del 9000 9001
或者,可以只解析以太网帧并将其从ascii转换为十六进制或十进制,然后决定如何处理它。您可以很容易地通过以下方式检测TCP/UDP数据包(TCP协议=6,UDP协议=17)
对于arp数据包,这将不起作用-数据包结构有点不同。一种可能性是在OSX中使用内置的ipfw防火墙。从终端上,我们可以只允许名为tap1的虚拟网络接口上的tcp通信:
sudo ipfw add 9000 allow tcp from any to any via tap1 # allow tcp
sudo ipfw add 9001 deny ip from any to any via tap1 # block all other incoming and outboung traffic
如果不需要,我们也可以删除规则:
sudo ipfw del 9000 9001
或者,可以只解析以太网帧并将其从ascii转换为十六进制或十进制,然后决定如何处理它。您可以很容易地通过以下方式检测TCP/UDP数据包(TCP协议=6,UDP协议=17)
对于arp数据包,这将不起作用-数据包结构有点不同
sudo ipfw del 9000 9001
from binascii import hexlify
...
# given some ethernet frame string data
protocol = int(hexlify(frame[23:24]), 16)
src_port = int(hexlify(frame[34:36]), 16)
dst_port = int(hexlify(frame[36:38]), 16)