入力引数に応じて任意のパケットサイズの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を" 注意してください。