def EthDecoder1(hdr,data): eth = EthDecoder().decode(data) sdsReq = eth.child() str1 = sdsReq.__str__() print len(str1) print str1 print "1 "+str1[5:9]+" 2 "+str1[10:14] ver = str1[5:7] typ = str1[7:9] rlen = str1[10:14] tid1 = (str1[15:17], str1[17:19], str1[20:22], str1[22:24]) tid = tuple(int('0x'+i, 16) for i in tid1) sid1 = str1[25:29]+str1[30:34]+str1[35:39]+ str1[40:44]+str1[65:69] #sid in hex sid4 = tuple(re.findall('..', sid1)) sid2 = tuple(chr(int('0x'+i, 16)) for i in sid4) #hex->char sid3 = ''.join(sid2) #stringified sid = tuple(int('0x'+i, 16) for i in sid4) #hex->dec print ver, typ, rlen, tid, sid1, sid4, sid role = int(str1[70:74],16) print eth.get_ether_shost() ep = smp_ep() ep.serviceID = sid3 ep.r = role res = directory_smp(ep) print res ethAddr = res[0] port = res[1] ttl = res[2] sdsResp1 = SDSResponse() sdsResp1.set_tid(tid) sdsResp1.set_sid(sid) sdsResp1.set_role(role) sdsResp1.set_ethAddress(ethAddr) sdsResp1.set_ttl(ttl) sdsResp1.set_port(port) ethResp = ImpactPacket.Ethernet() ethResp.set_ether_type(eth.get_ether_type()) ethResp.set_ether_shost(eth.get_ether_dhost()) ethResp.set_ether_dhost(eth.get_ether_shost()) ethResp.contains(sdsResp1) s1 = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(ETH_SDS_TYPE)) s1.bind(("eth0",0)) s1.send(ethResp.get_packet())