Thursday, February 23, 2012

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

import java.util.Arrays;

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

public class GetMACAddress{
    public static byte[] arp(InetAddress ip) throws{
        //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++){
                    break loop;
            throw new IllegalArgumentException(ip+" is not a local address");
        //open Jpcap
        JpcapCaptor captor=JpcapCaptor.openDevice(device,2000,false,3000);
        JpcapSender sender=captor.getJpcapSenderInstance();
        InetAddress srcip=null;
        for(NetworkInterfaceAddress addr:device.addresses)
            if(addr.address instanceof Inet4Address){

        byte[] broadcast=new byte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255};
        ARPPacket arp=new ARPPacket();
        EthernetPacket ether=new EthernetPacket();
            ARPPacket p=(ARPPacket)captor.getPacket();
                throw new IllegalArgumentException(ip+" is not a local address");
                return p.sender_hardaddr;
    public static void main(String[] args) throws Exception{
            System.out.println("Usage: java GetMACAddress <ip address>");
            byte[] mac=GetMACAddress.arp(InetAddress.getByName(args[0]));
            for (byte b : mac)
                System.out.print(Integer.toHexString(b&0xff) + ":");

To run this you need to get a library called WinPCap from 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:\>java GetMACAddress

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