最简单的方式来填充"有效载荷?

时间:2016-10-10 17:38:23

标签: python sockets udp scapy

根据我的输入参数,我不想发送任意数据包大小的UDP数据包,所以每当我的"数据"是不足以填满我想要的有用数据包有效负载" fill"剩下的是空数据。

因此,如果我发送123但我希望数据包大小为100字节,则该方法将使用访问数据填充数据包,我不想迭代并添加空格来填充它手动输出。

任何提示?

3 个答案:

答案 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')

如果您的数据在您的域中很重要,这也可以让您记住数据的结尾。在这种情况下,数据显示为空填充。

希望有所帮助!