我正在用 scapy 在 Python 中构建一个 arp 欺骗程序,并且我有这个函数来发送欺骗的 arp 数据包:
def arp_spoof (dest_ip, dest_mac, source_ip):
scapy.sendp(scapy.Ether(dst=dest_mac)/ scapy.ARP(op="is-at", psrc=source_ip, hwdst=dest_mac, pdst=dest_ip)/scapy.Padding(load="X"*18), verbose=False)
而且效果非常好。
我使用的是 sendp() 方法,该方法在第二层发送数据包,因此在 Ether 部分中我添加了目标 MAC 地址,然后在 ARP 部分中我添加了执行 ARP 攻击的所有详细信息。
然后我在互联网上发现,在处理网络数据包时添加填充是一个很好的做法。 但我不太明白这是什么意思。 我在网上搜索了一下,发现数据包必须是64位,如果小于则在填充处添加零。 但在这种情况下,我不确定我在做什么(我是否将 X 添加到数据包中?):
scapy.Padding(load="X"*18)
有人可以解释一下什么是 Network Padding 以及上面的代码行是什么意思吗? 谢谢你
网络填充: 网络填充是指向数据包添加额外数据以确保其符合某些大小要求或约束的技术。这可能很重要,原因如下:
对齐:出于效率原因,许多协议或硬件要求数据与某些边界(例如 4 字节或 8 字节边界)对齐。
最小长度要求:某些协议对数据包有最小长度要求。可以使用填充来满足这些要求。
安全和隐私:填充可用于掩盖数据的实际长度,使攻击者更难根据数据包大小推断信息。
协议特定需求:某些协议可能需要填充以确保数据结构正确对齐或确保数据包满足特定协议标准。
Scapy 填充: Scapy 是一个强大的 Python 库,用于网络数据包操作和分析。它允许您在较低级别创建、修改和发送网络数据包。
在Scapy中,Padding类用于向数据包添加填充。填充对于操纵数据包大小或确保对齐特别有用。
代码:scapy.Padding(load="X"*18) 以下是这段代码的功能细分:
scapy.Padding:此类用于向数据包添加填充。填充会向数据包的有效负载添加额外的字节。
load="X"*18:指定填充的内容。这里,“X”*18 创建一个由 18 个“X”字符组成的字符串。然后将该字符串用作填充的有效负载。
目的:通过创建一个带有 load="X"*18 的 Padding 对象,您可以有效地添加 18 个字节的填充,每个字节都是 ASCII 字符“X”。