2016-10-10 11 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を" 注意してください。

関連する問題