根據我的輸入參數,我不想發送一個任意數據包大小的UDP數據包,因此,只要我的「數據」不足以填滿想要的數據包有效載荷,我想只用空數據「填充」其餘數據。「填充」有效載荷的最簡單方法?
因此,如果我發送123
但我希望數據包的大小爲100字節,該方法將填充訪問數據的數據包,我不想迭代和添加空格手動填寫它。
任何提示?
根據我的輸入參數,我不想發送一個任意數據包大小的UDP數據包,因此,只要我的「數據」不足以填滿想要的數據包有效載荷,我想只用空數據「填充」其餘數據。「填充」有效載荷的最簡單方法?
因此,如果我發送123
但我希望數據包的大小爲100字節,該方法將填充訪問數據的數據包,我不想迭代和添加空格手動填寫它。
任何提示?
您可以創建一個填充bytearray()
,只是前面加上(或追加)到您的有效載荷:
payload = b'123'
padding_length = 100 - len(payload)
padding_byte = b' '
return bytearray(padding_byte * padding_length) + payload
我不是一個網絡專家,但你可能想看看struct.pack()
這將零填充字符的長度,應極快:
from struct import pack
result = pack('!100s', 'input_value')
這也可以讓你介意你的數據如果的字節序在你的域名中很重要。在這種情況下,數據顯示爲空填充。
希望有幫助!
試試這個方法:
>>> 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的輸出 「原UDP(17),長度100」。