2012-11-21 39 views
0

我试图用scapy执行http QoS。对于扫描仪,我需要获取连接时间,GET之间的时间,数据发送的开始时间(服务器的ACK)以及数据的结束时间。scapy接收等待2个数据包

我已经写:

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包(由钓到 “回复= SR(请求,冗长= 0)”)和一个HTTP分组之后(如HTTP/1.0 200 OK),它必须是响应的结束。 (http_fin = sniff(filter =“tcp and host 88.191.132.65”,count = 1),所以这些命令在等待什么也没有。

我想也许我能赶上2包用SR命令,但我不知道。任何人看到另一种方式?

回答

1

调用sr()时收到多个“答案”的相同发送的数据包,您可以指定multi=1。但看起来你还需要指定一个timeout=以及