2015-05-10 4 views
1

У меня простой веб-сервер установлен с scapy, он ждет ответов, как так:Отправить новый пакет, не дожидаясь предыдущего пакета ответа

connreq = sniff(filter=connfilter, prn=handshake) 

В функции рукопожатие рукопожатие проводят , но у меня возникают определенные проблемы, вот где:

answer = sr1(ip/synack, timeout = 4) 

SYNACK, посылают и ответ ждет, если ответ не будет получен в течение 4 секунд, а затем рукопожатие будет прекращено. Однако по какой-то причине мое рукопожатие будет выполнять только один раз, если у меня есть несколько клиентов, потому что scapy ждет ответа предыдущего клиента.

Мне не нужна функция scapy sniff, я хочу, чтобы она обрабатывала пакет в любом случае, даже если предыдущий пакет еще не обработан.

Я знаком с нарезкой функции, но как применить это к scapy? (или функции sniff?)

+0

ли вы имеете в виду вы не хотите функцию нюхать ожидания на стороне веб-сервера? –

+0

@ m170897017 да, я хочу, чтобы он обрабатывал несколько клиентов одновременно и не ожидал, что последний клиент будет «закончен», –

ответ

1

1. Вы можете попробовать timeout параметр в sniff функция. Я вспомнил, что есть такой параметр.

connreq = sniff(filter=connfilter, prn=handshake, timeout=4) 

2. Если метод 1 не работает, вам придется использовать многозадачность справиться с этим.

В стороне сервера,

import threading 
def your_sniff_function(): 
    connreq = sniff(filter=connfilter, prn=handshake) 
    # save sniff result to local file here 

t = threading.Thread(target=your_sniff_function, args=[]) 
t.start() 
t.join(timeout=4) # use timeout here to force termination 
# you can start as many subthreads as you want here 
Смежные вопросы