2017-09-30 17 views
0

私はwiresharkでいくつかのパッケージを取得しました。私はPythonで書かれた独自のソフトウェアでそれらを再送します。私はソケットプログラミングを使用していますが、私はPythonには新しいので、おそらくこれは愚かな質問です。Pythonでtcp/ipパケットをクローニングする

私のソフトウェアは、必要に応じて3ウェイハンドシェイクを行い、自分の情報を含むパケットを送信します。しかし、問題は、それが送信する正しい情報ではないということです。

これは私が何をすべきかです:

MESSAGE = 0x13EC 
s.send(MESSAGE) 

私は、パケットが16進値13ECを含むようにしたいが、それは「0x13EC」のように、今、それを文字列として送信されます。このように置いたら...

MESSAGE = '13EC' 

...ゼロを送るだけです。

誰かが私が間違っていることを教えていただけますか?事前に

おかげで、

バーテル

ところで、私のpython 3.6.2を使用しています。

答えて

1

MESSAGE = 0x13ECと書くと、基本的に5100という値を持つ整数が作成されます。しかし、ソケットは(私の知る限り)整数を送信することはできません。

代わりに、\x13\xECという形のバイトデータを送信します。

MESSAGE = b'\x13\xEC' 
s.send(MESSAGE) 

をそして、それはそれを行う必要があります。
はこれを行うには、単に行うことができます。
また、structを使用してデータをパックすることもできます。

from struct import pack 
VALUE = 0x13EC# 5100 
MESSAGE = pack('H', VALUE) # 5100 -> b'\x13\xEC' 
s.send(MESSAGE) # b'\x13\xEC' 
+0

大変ありがとうございました。しかし、私はそれに多くのデータを入れて、ビットがシフトされているか、または予想外の他の方法で今、ちょうど1つのorther問題があります。あなたはそれに入れることができるデータの量には限界がありますか? –

+0

@gamma_spec 'it'は' pack() 'を意味しますか?もしそうなら、複数の 'pack( 'H'、5100)+ pack( 'Q'、5)'を組み合わせる必要があります。 – Torxed

関連する問題