2017-08-04 6 views
1

私はscapyで2つのホスト間のTCP通信をシミュレートしようとしています。Scapy - persistent RandIP

私の問題は、scapyが生成するランダムなIPアドレスを保存できないことです。

このコード

src_IP = RandIP() 

print(src_IP) 
print(src_IP) 
print(src_IP) 

は、だから私はsrc_IPにアクセスするたびに、それが新たな価値を持っている私は、この

234.200.98.20 
147.3.56.17 
135.102.142.49 

のような出力を提供します。

scapyからランダムIPを保存する方法はありますか?だから、私は2つのIPを生成することができたのは私の機能の冒頭と私のTCP通信のソースと宛先としてそれらを使用します。
私は自分でIPを生成することができましたが、より洗練されたソリューションが必要だと思いました。

BTW。パケットのうちのどれも送信されない場合、それらはPCAPファイルに書き込まれます。そのため私はコミュニケーションの両面を作らなければなりません。

答えて

1

です。それは正しいです(「うまくいって尋ねたことをやってください」)が、それはScapyで正しい方法ではありません。

お探しの方法は._fix()です。それは任意の揮発性の値の型で動作します。

src_IP = RandIP()._fix() 

あなたはまた、例えば、ランダムな送信元ポートが必要な場合は、あなたができる:

src_port = RandShort()._fix() 
+0

、私は)(_fixについて聞いたことはありませんが、私のPythonの知識が限られているので、私はちょうどそれを見落としている場合がありますまたはそれはscapyの唯一の機能ですか? これは機能します! ありがとうございました 私が残した1つの小さな問題は、私のIDE(PyCharm)が私に "クラスの保護されたメンバ_fix()へのアクセス"を通知していることです これはPyCharmまたは "real "one – NIoSaT

+1

これは、Scapy volatile value APIに固有のものです。 '_'で始まるメソッドはプライベートと見なされますが、あなたはそれにアクセスできます。メソッド名を '.fix()'に変更する必要があるかもしれません。それについて考える必要があります。 – Pierre

1

回答が見つかりました。
RandIP()は、オブジェクトのインスタンスを作成し、このオブジェクトがアクセスされるたびに、印刷するか、パケットなどを送信するたびに、新しいIPを生成します。

だから私のソリューションは、文字列

src_IP = str(RandIP()) 

print(src_IP) 
print(src_IP) 
print(src_IP) 

にキャストすることで、出力は受け入れ答えがハックされ意図したのと同様

232.119.133.38 
232.119.133.38 
232.119.133.38