使用scapy指定数据包长度

4 投票
3 回答
20796 浏览
提问于 2025-04-17 14:30

我想用 scapy 发送一个特定大小的包(100字节),但似乎无法实现。

我现在是这样开始的。

sr(IP(dst="192.168.1.1")/TCP(dport=443))

查看文档和帮助后,我不确定是否可以使用 PacketLenField 来指定包的长度。我可以用 NMAP 和 NSE 来做到这一点,但我想在 NMAP 之外实现。

对此有什么想法吗?

谢谢!

3 个回答

1

你可以使用 scapy 库里的 inet.Padding() 方法:

packet = IP(dst="192.168.1.1")/TCP(dport=443)

if len(packet)<100:
    #"\x00" is a single zero byte
    myString = "\x00"*(100 - len(packet))
    packet = packet/inet.Padding(myString)
2

Scapy的Raw()函数用来填充数据包的负载部分。如果你知道头部的大小,那么只需要用随机数据填充剩下的字节就可以了。

你可以使用RandString()来生成随机的填充数据。下面这个命令会发送一个长度为100的数据包(并监听响应):

sr(IP(dst="192.168.1.1")/TCP(dport=443)/Raw(RandString(size=72))

5

你只需要在制作数据包的时候,按照需要添加相应数量的字节作为字符串,比如:

payload = 'ZZZZZZZZZZZZZZZZZZZZZ'
pkt = Ether() / IP() / TCP() / payload

这样就可以了。你只需要根据需要调整负载的长度就行。

撰写回答