scapy получает ожидание 2 пакетов

Я пытаюсь выполнить http QoS с помощью scapy. Для сканера мне нужно получить время соединения, время между моим GET, началом отправленных данных (ACK с сервера) и, наконец, конец данных.

Я написал, что:

    port=RandNum(1024,65535)
    HOST=a[0][0][1][DNS].an.rdata
    syn = IP(dst=HOST) / TCP(sport=port, dport=80, flags='S', seq=42)
    syn_ack = sr(syn, verbose=0)
    t1 = (syn_ack[0][0][1].time - syn_ack[0][0][0].sent_time)*1000

    getStr = "GET / HTTP/1.1\n\n"
    filt = "tcp and host {ip}".format(ip=HOST)
    request = IP(dst=HOST) / TCP(sport=syn_ack[0][0][1][TCP].dport, dport=80, flags='A', seq=syn_ack[0][0][1][TCP].ack, ack=syn_ack[0][0][1][TCP].seq + 1) / getStr
    reply = sr(request, verbose=0)
    http_fin = sniff(filter=filt, count=1)
    t2 = (reply[0][0][1].time  - reply[0][0][0].sent_time)*1000
    t3 = (http_fin[0].time - reply[0][0][1].time)*1000

    fin_ack = IP(dst=HOST) / TCP(flags="FA", ack=http_fin[0][TCP].seq+1, seq=http_fin[0][TCP].ack, sport=http_fin[0][TCP].dport, dport=http_fin[0][TCP].sport)
    send(fin_ack, verbose=0)

В wirehark я вижу после моего GET пакет ACK (пойманный «reply = sr (request, verbose = 0)») и после HTTP-пакета (например, HTTP /1.0 200 OK), который должен быть концом ответа.

Моя проблема в том, что иногда этот HTTP-пакет приходит ДО того, как была интерпретирована строка sniff (http_fin = sniff(filter="tcp and host 88.191.132.65", count=1), поэтому эта команда ничего не ждет.

Я думаю, может быть, я смогу поймать 2 пакета с помощью команды sr, но я не уверен. Кто-нибудь видит другой путь?


person user1789326    schedule 21.11.2012    source источник


Ответы (1)


вы можете указать multi=1 при вызове sr() для получения нескольких "ответов" на один и тот же отправленный пакет. но похоже, что вам также нужно указать timeout=.

person abc def    schedule 10.06.2013