2015-08-21 2 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() возвращает значение с плавающей точкой: например 1440185304.78

который является очень точным в тот самый момент, вы никогда не должны считать, вы можете обнаружить, что точно поплавок +10 назад.

Использование большего/меньшего утверждение лучше в этом случае, так как точное значение может быть принят в то время как ваш цикл работает все, что в нем, например:

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

 Смежные вопросы

  • Нет связанных вопросов^_^