Search code examples
javaethernetraw-ethernet

Java library for Raw Ethernet


I'm looking for a Java library that will give me access to raw Ethernet frames, both for reading and sending them. My end goal is to create a BACnet Ethernet network scanner.

Please, Note, I'm not looking for TCP\IP.

Anyone know of a good library for doing this?


Solution

  • Maybe Jpcap can help. Notice that there's a Sourceforge project with the same name, but it doesn't seem to be the same project.

    Here's some sample code (from the library's tutorial) that uses Jpcap to send a TCP packet and an Ethernet frame:

    Edit: The sample code does create a TCPPacket, but you may create a regular Packet instead.

    //open a network interface to send a packet to
    JpcapSender sender=JpcapSender.openDevice(devices[index]);
    
    //create a TCP packet with specified port numbers, flags, and other parameters
    TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10);
    
    //specify IPv4 header parameters
    p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP,
      InetAddress.getByName("www.microsoft.com"),InetAddress.getByName("www.google.com"));
    
    //set the data field of the packet
    p.data=("data").getBytes();
    
    //create an Ethernet packet (frame)
    EthernetPacket ether=new EthernetPacket();
    //set frame type as IP
    ether.frametype=EthernetPacket.ETHERTYPE_IP;
    //set source and destination MAC addresses
    ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5};
    ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10};
    
    //set the datalink frame of the packet p as ether
    p.datalink=ether;
    
    //send the packet p
    sender.sendPacket(p);
    
    sender.close();