#!/usr/bin/python import libnetc import string tgt_eth='\x00\x00\x00\x00\x00\x00' broadcast_eth='\xff\xff\xff\xff\xff\xff' src_ip='\xc0\xa8\x01\x02' tgt_ip='\xc0\xa8\x01\x01' #payload='arp packets can carry data? who knew!' payload=None def dumphex(s): bytes = map(lambda x: '%.2x ' % x, map(ord, s)) if len(s)>16: for i in range((len(s)+16)/16*16, 15, -16): bytes.insert(i,'\n') print string.join(bytes, '') if __name__=="__main__": ifc = libnetc.new_interface() libnetc.interface_open_link(ifc,libnetc.select_device(None)) src_eth = libnetc.interface_get_hwaddr(ifc) print 'source ethernet address:' dumphex (src_eth) arp_pkt = libnetc.build_arp(libnetc.ARPHRD_ETHER, libnetc.ETHERTYPE_IP, libnetc.ETHER_ADDR_LEN, 4, libnetc.ARPOP_REQUEST, src_eth, src_ip, tgt_eth, tgt_ip) pkt = libnetc.build_ethernet(broadcast_eth,src_eth, libnetc.ETHERTYPE_ARP) + arp_pkt print 'arp request with ethernet header:' dumphex(pkt) libnetc.interface_write(ifc,pkt)