网络填充(Network Padding)是什么?Scapy中ARP欺骗代码填充解析
网络填充(Padding)的作用
以太网帧有最小长度硬性要求:从目的MAC到帧校验序列(FCS)的总长度必须至少是64字节(你之前看到的“64比特”是错误信息,应该是字节)。如果你的上层数据包(比如ARP)加上以太网头部后总长度不够64字节,设备(交换机、网卡)会把这个帧认定为无效的“runt帧”直接丢弃,根本不会传给接收方处理。
填充的核心目的就是凑够这个最小长度,填充内容没有强制规定——用0、用字符或者任意字节都行,接收方会自动忽略超出协议规定长度的填充数据。
你代码里
scapy.Padding(load="X"*18)的含义 先算清楚长度:
- 以太网头部(
scapy.Ether):固定14字节(6字节目的MAC + 6字节源MAC + 2字节协议类型) - ARP数据包(
scapy.ARP):固定28字节(ARP协议的标准长度) - 两者加起来是14+28=42字节,离以太网帧要求的最小有效长度(60字节,不含4字节FCS)还差18字节,所以需要补18字节的填充。
scapy.Padding(load="X"*18)就是在ARP数据包后面追加18个ASCII字符X的字节数据,让整个以太网帧的有效部分(Ether+ARP+Padding)刚好达到60字节,加上网卡自动添加的4字节FCS后,总长度就是64字节,完全符合以太网的要求。
你用X填充完全没问题,接收方解析ARP包时只会处理前28字节的ARP内容,后面的填充数据会被直接忽略,不影响ARP欺骗的功能。
内容的提问来源于stack exchange,提问作者il.giaco
相关产品推荐
相关产品推荐

