当前位置:编程学习 > JAVA >>

JAVA获取本地,远程macAddress

获取本地macAddress
Java代码 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 
 
 
public class LocalMacAddr 

    public String getMACAddr() 
    { 
        String mac = ""; 
        try 
        { 
            Process process = Runtime.getRuntime().exec("ipconfig /all"); 
            InputStreamReader ir = new InputStreamReader(process.getInputStream()); 
            LineNumberReader input = new LineNumberReader(ir); 
            String line = null; 
            while ((line = input.readLine()) != null) 
            { 
                if (line.indexOf("Physical Address") > 0) 
                { 
                    mac = line.substring(line.indexOf("-") - 2); 
                } 
            } 
        } 
        catch (Exception e) 
        { 
            e.printStackTrace(); 
        } 
        return mac; 
    } 
     
    public static void main(String[] args) 
    { 
        LocalMacAddr ma = new LocalMacAddr(); 
        System.out.println(ma.getMACAddr()); 
    } 
 

 
获取远程macAddress
Java代码 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
 
public class RemoteMacAddr 

    private String sRemoteAddr; 
    private int iRemotePort = 137; 
    private byte[] buffer = new byte[1024]; 
    private DatagramSocket ds = null; 
 
    public RemoteMacAddr(String strAddr) throws Exception 
    { 
        this.sRemoteAddr = strAddr; 
        this.ds = new DatagramSocket(); 
    } 
 
    private DatagramPacket send(byte[] b) throws IOException 
    { 
        DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getByName(sRemoteAddr), iRemotePort); 
        ds.send(dp); 
        return dp; 
    } 
 
    private DatagramPacket receive() throws Exception 
    { 
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length); 
        ds.receive(dp); 
        return dp; 
    } 
 
    // 询问包结构: 
    // Transaction ID 两字节(16位) 0x00 0x00 
    // Flags 两字节(16位) 0x00 0x10 
    // Questions 两字节(16位) 0x00 0x01 
    // AnswerRRs 两字节(16位) 0x00 0x00 
    // AuthorityRRs 两字节(16位) 0x00 0x00 
    // AdditionalRRs 两字节(16位) 0x00 0x00 
    // Name:array [1..34] 0x20 0x43 0x4B 0x41(30个) 0x00 ; 
    // Type:NBSTAT 两字节 0x00 0x21 
    // Class:INET 两字节(16位)0x00 0x01 
    private byte[] GetQueryCmd() throws Exception 
    { 
        byte[] t_ns = new byte[50]; 
        t_ns[0] = 0x00; 
        t_ns[1] = 0x00; 
        t_ns[2] = 0x00; 
        t_ns[3] = 0x10; 
        t_ns[4] = 0x00; 
        t_ns[5] = 0x01; 
        t_ns[6] = 0x00; 
        t_ns[7] = 0x00; 
        t_ns[8] = 0x00; 
        t_ns[9] = 0x00; 
        t_ns[10] = 0x00; 
        t_ns[11] = 0x00; 
        t_ns[12] = 0x20; 
        t_ns[13] = 0x43; 
        t_ns[14] = 0x4B; 
        for (int i = 15; i < 45; i++) 
        { 
            t_ns[i] = 0x41; 
        } 
        t_ns[45] = 0x00; 
        t_ns[46] = 0x00; 
        t_ns[47] = 0x21; 
        t_ns[48] = 0x00; 
        t_ns[49] = 0x01; 
        return t_ns; 
    } 
 
    // 表1 “UDP-NetBIOS-NS”应答包的结构及主要字段一览表 
    // 序号 字段名 长度 
    // 1 Transaction ID 两字节(16位) 
    // 2 Flags 两字节(16位) 
    // 3 Questions 两字节(16位) 
    // 4 AnswerRRs 两字节(16位) 
    // 5 AuthorityRRs 两字节(16位) 
    // 6 AdditionalRRs 两字节(16位) 
    // 7 Name<Workstation/Redirector> 34字节(272位) 
    // 8 Type:NBSTAT 两字节(16位) 
 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,