簡體   English   中英

scapy等待2包

[英]scapy receive waiting for 2 packets

我正在嘗試使用scapy執行http QoS。 對於掃描儀,我需要獲取連接時間,我的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)

在wireshark中,我可以在我的GET之后看到一個ACK數據包(由“reply = sr(request,verbose = 0)”捕獲)和HTTP數據包(如HTTP /1.0 200 OK)后必須是響應結束。

我的問題是,有時,這個HTTP數據包在解釋嗅探行之前(http_fin = sniff(filter =“tcp and host 88.191.132.65”,count = 1),所以這些命令等待什么。

我想也許我可以用sr命令捕獲2個數據包,但我不確定。 有人看到另一種方式?

你可以在調用sr()時指定multi=1來接收相同發送數據包的多個“答案”。 但看起來你需要指定一個timeout=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM