Skip to main content

Java Code to Get MAC Address From Target IP Address

MAC Address is a Unique identification of a Device. Computer, Mobile, Tablet, PC all have a Unique MAC Address. If you want to know about MAC Address here is some, MAC on Wiki. MAC Address is generally 48 bits long eg, 00:ff:a3:f0:76:ae
Here we are going to discuss about How to get that address by using supplied IP Address over the network.
Here is the Java Code
GetMACAddress.java

import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.Arrays;

import jpcap.*;
import jpcap.packet.*;

public class GetMACAddress{
    public static byte[] arp(InetAddress ip) throws java.io.IOException{
        //find network interface
        NetworkInterface[] devices=JpcapCaptor.getDeviceList();
        NetworkInterface device=null;

loop:    for(NetworkInterface d:devices){
            for(NetworkInterfaceAddress addr:d.addresses){
                if(!(addr.address instanceof Inet4Address)) continue;
                byte[] bip=ip.getAddress();
                byte[] subnet=addr.subnet.getAddress();
                byte[] bif=addr.address.getAddress();
                for(int i=0;i<4;i++){
                    bip[i]=(byte)(bip[i]&subnet[i]);
                    bif[i]=(byte)(bif[i]&subnet[i]);
                }
                if(Arrays.equals(bip,bif)){
                    device=d;
                    break loop;
                }
            }
        }
      
        if(device==null)
            throw new IllegalArgumentException(ip+" is not a local address");
      
        //open Jpcap
        JpcapCaptor captor=JpcapCaptor.openDevice(device,2000,false,3000);
        captor.setFilter("arp",true);
        JpcapSender sender=captor.getJpcapSenderInstance();
      
        InetAddress srcip=null;
        for(NetworkInterfaceAddress addr:device.addresses)
            if(addr.address instanceof Inet4Address){
                srcip=addr.address;
                break;
            }

        byte[] broadcast=new byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255};
        ARPPacket arp=new ARPPacket();
        arp.hardtype=ARPPacket.HARDTYPE_ETHER;
        arp.prototype=ARPPacket.PROTOTYPE_IP;
        arp.operation=ARPPacket.ARP_REQUEST;
        arp.hlen=6;
        arp.plen=4;
        arp.sender_hardaddr=device.mac_address;
        arp.sender_protoaddr=srcip.getAddress();
        arp.target_hardaddr=broadcast;
        arp.target_protoaddr=ip.getAddress();
      
        EthernetPacket ether=new EthernetPacket();
        ether.frametype=EthernetPacket.ETHERTYPE_ARP;
        ether.src_mac=device.mac_address;
        ether.dst_mac=broadcast;
        arp.datalink=ether;
      
        sender.sendPacket(arp);
      
        while(true){
            ARPPacket p=(ARPPacket)captor.getPacket();
            if(p==null){
                throw new IllegalArgumentException(ip+" is not a local address");
            }
            if(Arrays.equals(p.target_protoaddr,srcip.getAddress())){
                return p.sender_hardaddr;
            }
        }
    }
      
    public static void main(String[] args) throws Exception{
        if(args.length<1){
            System.out.println("Usage: java GetMACAddress <ip address>");
        }else{
            byte[] mac=GetMACAddress.arp(InetAddress.getByName(args[0]));
            for (byte b : mac)
                System.out.print(Integer.toHexString(b&0xff) + ":");
            System.out.println();
            System.exit(0);
        }
    }
}

To run this you need to get a library called WinPCap from winpcap.org for Windows or LibPCap for Linux. And more over you need to get a Java Library JPCap from Click Here .


If you have both these Library installed on your system then you can compile and run.
E:\>javac GetMACAddress.java


E:\>java GetMACAddress 192.168.174.94
0:21:97:8f:1b:a7:
E:\>


This is How you can get a MAC address from any machines from your Network/LAN.


Comments

  1. Thanks for sharing an informative blog keep rocking bring more details.I like the helpful info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite sure I will learn much new stuff right here! Good luck for the next!
    mobile application development training online
    mobile app development course
    mobile application development course
    learn mobile application development
    mobile app development training
    app development training
    mobile application development training
    mobile app development course online
    online mobile application development

    ReplyDelete
  2. thanks for your information really good and very nice web design company in velachery

    ReplyDelete

Post a Comment