2017-08-04 62 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