我正在尝试嗅探我的 wifi 以获取收到的数据包。当我收到一个 ftp 数据包时,我会反转源和目标(Mac 地址、IP 地址和端口),然后再次将它们发回。
但是,当我检查wireshark时,我发现发送的修改后的数据包有一个错误“[Malformed Packet] [ETHERNET FRAME CHECK SEQUENCE INCORRECT]”,尽管我在发回数据包之前删除了校验和。下面是我定义的用于修改接收到的数据包 src/dst 的函数:
def modify_packet(pkt):
source_mac_address = pkt[Ether].src
destination_mac_address = pkt[Ether].dst
destination_address = pkt[IP].dst
source_address = pkt[IP].src
destination_port = pkt[TCP].dport
source_port = pkt[TCP].sport
pkt[Ether].dst = source_mac_address
pkt[Ether].src = destination_mac_address
pkt[IP].dst = source_address
pkt[IP].src = destination_address
pkt[TCP].dport = source_port
pkt[TCP].sport = destination_port
del pkt[IP].chksum
del pkt[TCP].chksum
send(pkt)
return
Scapy 尚未实现以太网校验和,因为它们是不可预测的:如wireshark 的文档所述
大多数以太网接口也不向 Wireshark 或其他应用程序提供 FCS,或者它们的驱动程序没有配置这样做;因此,Wireshark 通常只会获得绿色字段,尽管在某些平台上,某些接口会在传入数据包上提供 FCS。
但是,如果您知道数据包具有校验和,则它可能作为Padding
您正在处理的 Scapy 数据包末尾的层存在。如果是这种情况,您可能可以毫无问题地将其删除。
你可以尝试类似的东西
if Padding in pkt:
pkt[Padding].underlayer.remove_payload()
要删除它。
另一个注意事项:在处理第 2 层数据包时需要使用sendp()
而不是send()
(在这种情况下:以太网帧)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句