2015-08-21 35 views
0

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

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() 

但它不起作用。任何人有更好的主意?

+1

你用'的意思做的,但它不”工作好吗?它与你期望的有什么不同?你必须更具体。 – That1Guy

+0

看起来不像我的嗅探器......根据定义,嗅探器会读取* others *的数据包。首先没有指向它的数据包。 – Bakuriu

回答

1

你的时间处理不好,而是使用此:

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

您的代码不起作用,因为:

“当前”永远不可能等于自己+ 10。

还要注意的是选定了time.time()返回的浮点值e.g:1440185304.78

这是非常准确的,准确的时刻,你应该永远不要假设你能找到确切的浮动+10回来。

使用更大/更小的语句是在这种情况下更好,因为当你的循环运行无论是在它,例如精确值可能已经过去了:

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