2017-08-04 87 views
1

我試圖模擬兩個主機之間的scapy TCP通信。Scapy - 持續RandIP

我的問題是,我無法保存scapy爲我生成的隨機IP地址。

此代碼

src_IP = RandIP() 

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

給了我這個

234.200.98.20 
147.3.56.17 
135.102.142.49 

所以每次等的輸出我訪問src_IP它有一個新的價值。

有沒有辦法從scapy保存一個隨機IP?所以我可以在我的函數開始時生成2個IP,並將它們用作TCP通信的源和目標。
我可以自己生成IP,但我認爲必須有一個更優雅的解決方案。

順便說一句。非包將被髮送,它們將被寫入PCAP文件。因此,我必須創造溝通的雙方。

回答

1

接受的答案是一個黑客;它是正確的(就像「它的工作原理和所要求的一樣」),但這不是在Scapy中做到這一點的正確方法。

您正在查找的方法是._fix()。它將與任何易失性值類型一起使用。

src_IP = RandIP()._fix() 

如果您還需要例如隨機的源端口,你可以這樣做:

src_port = RandShort()._fix() 
+0

我從來沒有聽說過_fix(),但因爲我的蟒蛇知識是有限的,我可能剛剛忽視它,還是僅僅是一個scapy功能? 它的工作原理! 感謝那 但我留下的一個小問題是,我的IDE(PyCharm)通知我,「訪問受保護的成員_fix()類」 這只是PyCharm或「真正的問題「一個 – NIoSaT

+1

這是特定於Scapy易失性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