2016-06-16 16 views
0

私は現在、データパケットを送信するためにscapyを使用しています。私は奇妙な問題に遭遇しました。私のようなパケットを作成する場合:scapyパケットをstringに変換すると、E?

pack = IP(dst="127.0.0.1", id=local_ID)/UDP()/chunk 

をして、文字列にそのパケットを変換sendPackの結果が間違っている

sendPack = str(pack) 

(私はソケット経由で送信することができます)。

E 
2 
3 
... 

すべて他には、次のとおりです。私はそれが次生成print("SEND_PACK: "+sendPack) とき

は例えば、私のテストファイルで、私は、1から8000までは、そのような

1 
2 
3 
... 

として注文番号を持っていますE

Eがどこから来ているのかわかりません。 その意味は。

それは私がpackは正しいデータが含まれており、それは関係なく、テストファイルの最初の行が何であるかの、出力の最初の行は常にE

のおかげであることを確認したという点にも注目です!

答えて

0

まず、UDPデータグラムの内容ではなく、パケットを印刷しています。 IPv4パケットの最初の2つのフィールドは、バージョンとIHLです。この値は、Scapyではデフォルトで4(IPバージョン4の場合)と5(32ビットの5ワード)です。これは16進数の1バイトにASCII文字で "E"を入れると45になります。これは、常にあなたの文字列の最初のバイトとしてEを見ている理由です。

パケットの内容を確認したい場合は、Scapyのshow()機能:sendPack.show()を使用する必要があります。

第二に、あなたがソケットについて自分自身を悩ませずにパケットを送信するために、機能をScapyのsend()を使用することができます。興味のある方へsend(sendPack)

+0

大丈夫?私は、各パケットの負荷とIDにのみ関心があります。 – Swoldier

0

を、私は、次の手順を実行して、問題を修正:

としては、上記に指摘し、 Eは私がパケットを印刷した結果であり、内容ではありませんでした。私が望んでいた内容にアクセスするためには、私は次のことをしなければならなかった:

sendPack = pack[UDP].load  #Get the packet's load at the UDP layer 
id = pack[IP].ID    #Get the ID at the IP layer 

Scapyのドキュメントはまばらであるので、私は、私は、各パケットの個々のフィールドをこのようにアクセスすることができることを認識していませんでした。

は、ここでデータグラムのコンテンツだけを取得する方法があるので、where I found this fix

関連する問題