def packetHandler(self, hdr, data): e = Ethernet(data) eoff = e.get_header_size() print "===============================================================" print "Eth:\n\thdrsize:%s\n\tsourceaddr:%s\n\tdestaddr:%s\n\tethtype:%s" % (eoff, num_from_barray(e.get_ether_shost()), num_from_barray(e.get_ether_dhost()), e.get_ether_type()) if e.get_ether_type() == IP.ethertype: ipdata = data[eoff:] i = IP(ipdata) ioff = i.get_header_size() print "\tproto:IP\n\t\tipversion:%s\n\t\thdrsize:%s\n\t\ttos:%s\n\t\tipsize:%s\n\t\tid:%s\n\t\tdf:%s\n\t\tmf:%s\n\t\toffset:%s\n\t\tttl:%s\n\t\tproto:%s\n\t\tsum:%s\n\t\tsrc:%s\n\t\tdst:%s" % (i.get_ip_v(), i.get_header_size(), i.get_ip_tos(), i.get_ip_len(), i.get_ip_id(), i.get_ip_df(), i.get_ip_mf(), i.get_ip_off(), i.get_ip_ttl(), i.get_ip_p(), i.get_ip_sum(), num_from_barray(i.get_ip_src().split('.')), num_from_barray(i.get_ip_dst().split('.'))) if i.get_ip_p() == UDP.protocol: udpdata = ipdata[ioff:] u = UDP(udpdata) print "\t\tproto:UDP\n\t\t\tsrcport:%s\n\t\t\tdstport:%s\n\t\t\tsize:%s\n\t\t\tcksum:%s" % (u.get_uh_sport(), u.get_uh_dport(), u.get_uh_ulen(), u.get_uh_sum()) elif i.get_ip_p() == TCP.protocol: tcpdata = ipdata[ioff:] t = TCP(tcpdata) print "\t\tproto:TCP\n\t\t\tsrcport:%s\n\t\t\tdstport:%s\n\t\t\tseq:%s\n\t\t\tack:%s\n\t\t\tflags:%s\n\t\t\twinsize:%s\n\t\t\tcksum:%s\n\t\t\turg:%s\n\t\t\topts:%s" % (t.get_th_sport(), t.get_th_dport(), t.get_th_seq(), t.get_th_ack(), t.get_th_flags(), t.get_th_win(), t.get_th_sum(), t.get_URG(), '0')#t.get_options() elif i.get_ip_p() == ICMP.protocol: icmpdata = ipdata[ioff:] ic = ICMP(icmpdata) print "\t\tproto:ICMP\n\t\t\ttype:%s\n\t\t\tcode:%s\n\t\t\tcksum:%s\n\t\t\tid:%s\n\t\t\tseq:%s\n\t\t\tgwaddr:%s\n\t\t\tmask:%s" % (ic.get_icmp_type(), ic.get_icmp_code(), ic.get_icmp_cksum(), ic.get_icmp_id(), ic.get_icmp_seq(), ic.get_icmp_gwaddr(), ic.get_icmp_mask()) else: print "\t\tunknown child protocol" elif e.get_ether_type() == ARP.ethertype: adata = data[eoff:] a = ARP(adata) print "\tproto:ARP\n\t\thrd:%s\n\t\tpro:%s\n\t\thlen:%s\n\t\tplen:%s\n\t\top:%s\n\t\tsha:%s\n\t\tspa:%s\n\t\ttha:%s\n\t\ttpa:%s" % (a.get_ar_hrd(), a.get_ar_pro(), a.get_ar_hln(), a.get_ar_pln(), a.get_ar_op(), num_from_barray(a.get_ar_sha()), num_from_barray(a.get_ar_spa()), num_from_barray(a.get_ar_tha()), num_from_barray(a.get_ar_tpa())) else: print "\tunknown child protocol" print "==============================================================="
ip.contains(tcp) tcp.swapSourceAndDestination() return ip, tcp while True: data, addr = server.recvfrom(4096) #print(addr, data) ip = IP(data) ip_len = ip.get_size() tcp = TCP(data[ip_len:]) if tcp.get_th_dport() == 1234: print('state', state) #buf = tcp.get_packet() #print([hex(n)[2:] for n in buf]) print(tcp, tcp.get_th_seq(), tcp.get_th_ack()) if state == 0: ip, tcp = reply(ip, tcp) tcp.set_th_ack(tcp.get_th_seq() + 1) tcp.set_th_seq(0) #print('###', tcp.get_th_seq()) tcp.set_ACK() tcp.calculate_checksum() buf = ip.get_packet() print(tcp, tcp.get_th_seq(), tcp.get_th_ack()) server.sendto(buf, ('127.0.0.1', 0)) state = 1 elif state == 1: if tcp.get_SYN() or not tcp.get_ACK(): break print('connected...')