根据我的输入参数,我不想发送任意数据包大小的UDP数据包,所以每当我的"数据"是不足以填满我想要的有用数据包有效负载" fill"剩下的是空数据。
因此,如果我发送123
但我希望数据包大小为100字节,则该方法将使用访问数据填充数据包,我不想迭代并添加空格来填充它手动输出。
任何提示?
答案 0 :(得分:1)
尝试这种方式:
>>> from scapy.all import *
WARNING: No route found for IPv6 destination :: (no default route?)
>>> p = IP(dst="62.21.20.21")/UDP()
>>> p = p/Raw('a'*(100-len(p)))
>>> send(p)
.
Sent 1 packets.
>>>
# tcpdump -ni cplane0 udp -e -v -X
tcpdump: listening on cplane0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:15:31.904204 54:ab:3a:56:59:1e > fa:16:3e:e1:9e:14, ethertype IPv4 (0x0800), length 114: (tos 0x0, ttl 62, id 1, offset 0, flags [none], proto UDP (17), length 100)
44.60.11.3.53 > 62.21.20.21.53: 24929 updateM+ [b2&3=0x6161] [24929a] [24929q] [24929n] [24929au][|domain]
0x0000: 4500 0064 0001 0000 3e11 f31f 2c3c 0b03 E..d....>...,<..
0x0010: 3e15 1415 0035 0035 0050 c3c9 6161 6161 >....5.5.P..aaaa
0x0020: 6161 6161 6161 6161 6161 6161 6161 6161 aaaaaaaaaaaaaaaa
0x0030: 6161 6161 6161 6161 6161 6161 6161 6161 aaaaaaaaaaaaaaaa
0x0040: 6161 6161 6161 6161 6161 6161 6161 6161 aaaaaaaaaaaaaaaa
0x0050: 6161 6161 6161 6161 6161 6161 6161 6161 aaaaaaaaaaaaaaaa
0x0060: 6161 6161 aaaa
请注意tcpdump输出中的“proto UDP(17),长度100”。
答案 1 :(得分:0)
您可以创建填充bytearray()
,并将其添加(或附加)到您的有效负载中:
payload = b'123'
padding_length = 100 - len(payload)
padding_byte = b' '
return bytearray(padding_byte * padding_length) + payload
答案 2 :(得分:0)
我不是网络专家,但您可能需要查看struct.pack()
这将零填充一个字符长度,应该快速:
from struct import pack
result = pack('!100s', 'input_value')
如果您的数据在您的域中很重要,这也可以让您记住数据的结尾。在这种情况下,数据显示为空填充。
希望有所帮助!