我正在尝试使用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个数据包,但我不确定。有人看到另一种方式吗?
答案 0 :(得分:1)
您可以在调用multi=1
时指定sr()
以接收相同发送的数据包的多个“答案”。但看起来你也需要指定一个timeout=
。