2016-10-10 43 views
-1

根據我的輸入參數,我不想發送一個任意數據包大小的UDP數據包,因此,只要我的「數據」不足以填滿想要的數據包有效載荷,我想只用空數據「填充」其餘數據。「填充」有效載荷的最簡單方法?

因此,如果我發送123但我希望數據包的大小爲100字節,該方法將填充訪問數據的數據包,我不想迭代和添加空格手動填寫它。

任何提示?

回答

0

您可以創建一個填充bytearray(),只是前面加上(或追加)到您的有效載荷:

payload = b'123' 
padding_length = 100 - len(payload) 
padding_byte = b' ' 
return bytearray(padding_byte * padding_length) + payload 
0

我不是一個網絡專家,但你可能想看看struct.pack()

這將零填充字符的長度,應極快:

from struct import pack 

result = pack('!100s', 'input_value') 

這也可以讓你介意你的數據如果的字節序在你的域名中很重要。在這種情況下,數據顯示爲空填充。

希望有幫助!

0

試試這個方法:

>>> 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」。

相關問題