java获取电脑的物理地址

package com.zhengyee.limw;

/*
* 物理地址 (网卡物理地址)
网卡物理地址存储器中存储单元对应实际地址称物理地址,与逻辑地址相对应。
网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),
它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。


网络中的地址分为物理地址和逻辑地址两类,与网络层的IP地址传输层的端口号以及应用层的用户名相比较
,局域网的MAC层地址是由硬件来处理的,叫做物理地址或硬件地址。IP地址传输层的端口号以及应用层
的用户名是逻辑地址由软件来处理。MAC地址又叫物理地址。. 大多数局域网通过为网卡分配一个硬件地
址来标识一个联网的计算机或其他设备.所谓物理地址是指固化在网卡EPROM中的地址,

* * * * * * * 这个地址应该保证在全网是唯一的。

IEEE注册委员会为每一个生产厂商分配物理地址的前三字节,即公司标识。后面三字节由厂商自行分配
,一个厂商获得一个前三字节的地址可以生产的网卡数量是16777216块。而一块网卡对应一个物理地址
。也就是说对应物理地址的前三字节就可以知道他的生产厂商。 例如固化在网卡中的地址为002514895423
,那么这块网卡插到主机A中,主机A的物理地址就是002514895423,不管主机A是连接在局域网1上还是在局
域网2上,也不管这台计算机移到什么位置,主机A的物理地址就是002514895423。它是不变的,而且不会和
世界上任何一台计算机相同。当主机A发送一帧时,网卡执行发送程序时,直接将这个地址作为源地址写入该帧。当主机A
接收一帧时,直接将这个地址与接收帧目的地址比较,以决定是否接收。
物理地址一般记作00-25-14-89-54-23(主机A的地址是002514895423)
* 物理地址是48位,别和ipv6搞错了
*
* 物理地址的查看方式,可以通过打开cmd    输入  ipconfig  /all
* 查看
*/
public class LOCALMAC {
    /**
     * @param args
     * @throws UnknownHostException
     * @throws SocketException
     */
    public static void main(String[] args) throws UnknownHostException, SocketException {
        // TODO Auto-generated method stub
         
        //得到IP,输出PC-201309011313/122.206.73.83
        InetAddress ia = InetAddress.getLocalHost();
        System.out.println(ia);
        getLocalMac(ia);
    }
    private static void getLocalMac(InetAddress ia) throws SocketException {
        // TODO Auto-generated method stub
        //获取网卡,获取地址
        byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
        System.out.println("mac数组长度:"+mac.length);
        StringBuffer sb = new StringBuffer("");
        for(int i=0; i<mac.length; i++) {
            if(i!=0) {
                sb.append("-");
            }
            //字节转换为整数
            int temp = mac[i]&0xff;
            String str = Integer.toHexString(temp);
            System.out.println("每8位:"+str);
            if(str.length()==1) {
                sb.append("0"+str);
            }else {
                sb.append(str);
            }
        }
        System.out.println("本机MAC地址:"+sb.toString().toUpperCase());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36973850/article/details/80227348