#!/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)



syntax highlighted by Code2HTML, v. 0.9.1