`

取得mac

阅读更多

/**
     * Tested to work with results from ARP command under Solaris, Linux, MS-Windows
     * Note it does not always return a Mac address, even if the host exists. This represents more of
     * a best 'effort' solution.
     */

    private String getMacAddress ( String host ) throws UnknownHostException, IOException, InterruptedException
    {
        String macAddress = null;
        InetAddress hostAddress = InetAddress.getByName( host );
       
        String resultLine = callArpTool ( hostAddress.getHostAddress() );
       
        if ( resultLine == null )
        {
            return null;
        }
        if ( resultLine.indexOf("\n") > -1 )
        {
            String[] lines = resultLine.split("\n");
            resultLine = lines[lines.length -1];
        }
        if ( resultLine.indexOf("--") > -1 || resultLine.indexOf("unknown host") > -1 )
        {
            return null;
        }
               
        int idx = -1;
        if ( resultLine.indexOf( '-' ) > -1 )
        {
            idx = resultLine.indexOf( '-' ) - 2;
        }
        else if ( resultLine.indexOf( ':' ) > -1 )
        {
            idx = resultLine.indexOf( ':' ) - 2;
        }       
         
        int endIdx = resultLine.length()-1;
        if ( resultLine.indexOf(' ',idx+1) > -1 )
        {
            endIdx = resultLine.indexOf(' ',idx+1);
        }
        macAddress = resultLine.substring(idx,endIdx);
       
        return macAddress;
    }
   
    private String callArpTool ( String ipAddress ) throws IOException, InterruptedException
    {
        String result = null;
        /* samples:
        //solaris
        result = "motako (10.1.12.79) at 0:e:a6:b5:70:80";
        result = "arp: motakox: unknown host";
        //linux
        result = "Address                  HWtype  HWaddress           Flags Mask            Iface\n"+
                 "whyme.xxxxxxxxxxxxxxx.c  ether   00:11:D8:DF:2B:9C   C                     eth2";
        result = "batoo.yyyyyy.org (70.55.60.9) -- no entry";
        //windows
        result = " 56 3:  10.1.12.203           00-11-d8-df-2b-9c     dynamic";
        result = " 2 12:Interface: 10.1.12.134 --- 0x50003";
        */

        
        if ( System.getProperty("os.name").toLowerCase().startsWith("windows") )
        {
            return callArpToolWindows( ipAddress );
        }
 
        return callArpToolDefault( ipAddress );
    }
   
    private String callArpToolWindows ( String ipAddress ) throws IOException, InterruptedException
    {
        String[] cmdArray = null;
       
        cmdArray = new String[] { "ping", ipAddress };
       
        Runtime.getRuntime().exec( cmdArray ).waitFor();
       
        cmdArray = new String[] { "arp", "-a" };
       
        StringBuilder stdOut = new StringBuilder();
        Process proc = Runtime.getRuntime().exec( cmdArray );
        new ProcessOutputHandler(stdOut,proc.getInputStream(),2001);
       
        proc.waitFor();
       
        String[] parts = stdOut.toString().split("\n");
        for ( String part : parts )
        {           
            if ( part.indexOf(ipAddress) > -1 )
            {
                return part;
            }
        }
        return null;
     }
   
    private String callArpToolDefault ( String ipAddress ) throws IOException, InterruptedException
    {
        String[] cmdArray = null;
       
        cmdArray = new String[] { "ping", ipAddress };
       
        Runtime.getRuntime().exec( cmdArray ).waitFor();
       
        cmdArray = new String[] { "arp", ipAddress };
       
        StringBuilder stdOut = new StringBuilder();
        Process proc = Runtime.getRuntime().exec( cmdArray );
        new ProcessOutputHandler(stdOut,proc.getInputStream(),2001);
       
        proc.waitFor();
       
        return stdOut.toString();
     }

分享到:
评论
1 楼 radovi 2009-05-08  
你哪里下载的 说一下 谢谢

相关推荐

    取得MAC+IP

    linux取得eth0 MAC和IP windows装有虚拟机时会取得虚拟机网卡,有点瑕疵

    DELPHI获取网卡MAC地址.pdf

    label2.caption := format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x', [mymac[0], mymac[1], mymac[2], mymac[3], mymac[4], mymac[5]]); end; ``` 方法二:使用GetAdaptersInfo函数 GetAdaptersInfo函数是Windows...

    Delphi—获取本机“IP地址”和“MAC地址”,并显示在“文本框”里

    在Delphi编程环境中,开发一个能够获取本机IP地址和MAC地址,并将结果显示在文本框的应用程序是一项常见的任务。这个程序的关键在于使用Indy控件库,特别是其中的IdIPWatch组件。首先,我们需要了解一些关于Delphi、...

    获取mac地址的几种方法

    // 取得 MAC for (int i = 0; i ; ++i) { if (GetAdapterInfo(adapterList.lana[i], macOUT)) return true; } return false; } ``` 这段代码首先通过调用`Netbios`函数来重置网卡,然后通过查询网卡状态来...

    获取CPU和MAC地址代码,以及SQL数据库代码

    在IT领域,获取计算机硬件信息,如CPU编号和MAC地址,以及操作数据库是常见的任务。以下将详细讲解这些知识点,并提供相关的编程实现。 1. **CPU编号获取**: CPU编号,通常指的是CPU的序列号或标识符,可用于区分...

    MACbook 系统重装

    方法是这样的,启动 MACBook,放入 MAC 的原版光盘,不管是不是原机的盘,只要能在 MACBook 上启动的就可以。通电后按下 Option 键,苹果的主板引导会停留在选择多启动的界面,如果放光盘比较晚,那么就直接重启仍然...

    华通取得苹果MacBook Air PCB订单.pdf

    华通公司是另一家取得苹果MacBook Air PCB订单的台湾PCB厂。MacBook Air以其超薄设计和较高的价格被市场关注。PCB设计需要特别薄的板材,以满足其轻薄的机身设计。苹果的高要求和高标准对PCB厂商来说既是挑战也是...

    取得本机mac地址和IP地址

    在IT领域,获取计算机的MAC(Media Access Control)地址和IP(Internet Protocol)地址是常见的需求,这主要用于网络通信和设备识别。以下是对标题和描述中所述知识点的详细解释: 1. **MAC地址**:MAC地址是物理...

    取得本机所有网卡(网络连接)的MAC地址.rar

    在IT领域,获取本机所有网卡(网络连接)的MAC地址是一项常见的需求,尤其是在系统管理和网络编程中。本文将详细讲解如何通过VB(Visual Basic)实现这一功能,并结合提供的"ModGetPhysicalAddress.bas"模块文件进行...

    取得网卡MAC的VB源程序

    在VB(Visual Basic)编程环境中,获取计算机网络接口卡(NIC,即网卡)的物理地址,也就是MAC地址,是一项常见的需求。MAC地址是每个网卡在全球范围内唯一的硬件标识符,通常由六组两位十六进制数字组成,用冒号或...

    取得物理网卡的MAC地址

    利用GetAdapterInfo获得网卡类型,区分各种无线网卡和以太网卡,利用注册表信息来区分物理网卡和虚拟网卡

    ARP攻击代码实例

    在以后的通信中,A在和B通信时,会首先察看arp高速缓存中有没有B的IP和MAC的映射关系,如果有,就直接取得MAC地址,如果没有就再发一次ARP请求的广播,B再应答即重复上面动作。 <br> 好了在了解了上面基本arp通信...

    取得CPU序列号,网卡Mac地址,硬盘序列号,注册码示例源程序

    根据作者的经验,在好些服务器上无法取得硬盘序列号。特别是在那些使用了并列存储技术或做了镜象的硬盘。网卡也容易更换,因此作者建议使用CPU序列号。 在同一个压缩包里,还有一个注册码例子程序,演示如何用注册码...

    MAC系统恢复方法

    请不要使用WINDOWS的分区软件对您装有的MAC系统的硬盘进行分区,或是查看分区。(请不要在本台电脑上面使用WINDOWS的分区软件) 3.如果您是双硬盘双系统,请您在(安装WINDOWS,对windDOWS的硬盘进行分区,修复...

    web端不限制浏览器获取客户端MAC+IP地址进行权限安全校验

    web端项目通过浏览器访问的项目获取客户端mac地址及ip地址,进行登录权限校验; web端通过浏览器访问的项目增加权限; 本次项目由于对数据安全性要求较为严格,所以增加了用户在登录时对于客户端电脑的ip地址和mac...

    (二)学习TCP, IP, Ethernet 协作的原理

    用ARP协议来取得MAC地址 - **4.1.1. Ethernet协议格式**:Ethernet帧包含源MAC地址、目的MAC地址以及类型字段等信息。 - **4.1.2. ARP协议格式**:ARP请求和应答包含硬件类型、协议类型、硬件地址长度、协议地址...

    Delphi获取本机IP、名称、网卡MAC等信息..rar

    在Delphi编程环境中,获取本机的IP地址、计算机名称以及网络适配器的MAC(物理)地址是常见的系统信息获取需求。这些信息对于网络通信、设备定位和系统管理至关重要。下面将详细介绍如何使用Delphi来实现这些功能。 ...

Global site tag (gtag.js) - Google Analytics