我目前正在使用 Python 和 scapy 测试一个场景。
当我发送源 mac 为 80:CA:0E:BD:60:3B 和目标 mac 为 82:DA:0E:BD:60:3A 的数据包时,数据包将发送到指定的接口。
如果我随后交换源 MAC 和目标 MAC,则不再发送数据包。
如果我随后恢复 MAC,则原始数据包也将不再发送。
有趣的是,如果我等待几分钟,交换的 mac 数据包就会被允许通过。
我的Python代码如下:
from scapy.all import *
# this packet is sent
sendp(Ether(src="80:CA:0E:BD:60:3B", dst="82:DA:0E:BD:60:3A")/IP(dst="192.168.0.71",src="192.168.0.75")/UDP(sport=2152,dport=2152), iface="enp0s9")
# this packet does not get sent, until after a few mins
sendp(Ether(dst="80:CA:0E:BD:60:3B", src="82:DA:0E:BD:60:3A")/IP(dst="192.168.0.71",src="192.168.0.75")/UDP(sport=2152,dport=2152), iface="enp0s9")
Linux 是否跟踪源 MAC 地址和目标 MAC 地址来决定是否实际发送数据包?
似乎发生的情况是 Linux 没有发送交换的数据包,因为它根据之前发送的数据包发现该数据包是发给自己的。