I need to calculate delta between SYN and SYN-ACK or ACK packet for each http.uri request.
Why is my code not working for it?
Why is my code not working for it?
Code:
#!/usr/bin/env python import dpkt def ip_decode(p): return ".".join(["%d" % ord(x) for x in str(p)]) def tcp_flags(flags): ret = '' if flags & dpkt.tcp.TH_FIN: ret = ret + 'F' if flags & dpkt.tcp.TH_SYN: ret = ret + 'S' if flags & dpkt.tcp.TH_RST: ret = ret + 'R' if flags & dpkt.tcp.TH_PUSH: ret = ret + 'P' if flags & dpkt.tcp.TH_ACK: ret = ret + 'A' if flags & dpkt.tcp.TH_URG: ret = ret + 'U' if flags & dpkt.tcp.TH_ECE: ret = ret + 'E' if flags & dpkt.tcp.TH_CWR: ret = ret + 'C' return ret f = open('mycapture.cap') pcap = dpkt.pcap.Reader(f) for ts, buf in pcap: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data tcp = ip.data timestamp = 0 timestamp2 = 0 timestampresult = 0 if tcp.dport == 80 and len(tcp.data) > 0: try : http = dpkt.http.Request(tcp.data) http_compare = http.uri if tcp_flags(tcp.flags) == 'S': timestamp = ts for ts, buf in pcap: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data tcp = ip.data if tcp.dport == 80 and len(tcp.data) > 0: try: http = dpkt.http.Request(tcp.data) if http_compare == http.uri and tcp_flags(tcp.flags) == 'A': timestamp2 = ts except dpkt.dpkt.NeedData: continue except dpkt.dpkt.UnpackError: continue else: continue except dpkt.dpkt.NeedData: continue except dpkt.dpkt.UnpackError: continue else: continue timestampresult = timestamp2 - timestamp print "http://" + "%s" % ip_decode( ip.dst ) + http.uri, timestampresult f.close()
Comment