Python 2.7 简单数据包嗅探器

Python 2.7 simple packet sniffer

我在 Python 中编写了简单的数据包嗅探器。我需要不停地接收数据包并每 10 秒发送一个数据包。我试过这个:

current = time.time()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("xx.xx.xx.xx",xxxx))

time.sleep(0.5)

while True:
    msg = str(s.recv(4096))
    time.sleep(0.010)
    print msg
    if current==current+10:
        s.send("<myPacket/>")
    current = time.time()

但效果不佳。谁有更好的主意?

你的时间处理不好,改用这个:

While True:
    ...
    time.sleep(10)

您的代码无效,因为:

'current'永远不能等于自身+10。

另请注意,time.time() returns 是一个浮点值,例如:1440185304.78

这对那个确切的时刻非常准确,你永远不应该假设你能找到那个精确的浮点数+10。

在这种情况下使用 larger/smaller 语句更好,因为当您的循环是 运行 时可能已经传递了确切的值,无论其中包含什么,例如:

t = time.time()
while True:
    while time.time() < t + 10:
        time.sleep(0.1)
    t = time.time()
    print ("hi")