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")
我在 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")