Scapy - 持久的 RandIP

Scapy - persistent RandIP

我正在尝试使用 scapy 模拟两个主机之间的 TCP 通信。

我的问题是,我无法保存 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 文件。因此,我必须创建通信的双方。

我找到了答案。
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

接受的答案是 hack;它是正确的(如 "it works and do what was asked"),但在 Scapy 中这不是正确的方法。

您要找的方法是._fix()。它适用于任何可变值类型。

src_IP = RandIP()._fix()

如果您还需要一个随机源端口,您可以这样做:

src_port = RandShort()._fix()