使用scapy指定数据包长度
我想用 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
这样就可以了。你只需要根据需要调整负载的长度就行。