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 つのパケットをキャッチできると思いますが、よくわかりません。別の方法を見た人はいますか?