<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 310, comments - 6939, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    JAVA獲得網(wǎng)卡MAC地址

    Posted on 2007-10-12 14:07 詩特林 閱讀(3066) 評論(4)  編輯  收藏 所屬分類: Java

    前陣子看到一篇文件,JAVA得到網(wǎng)卡物理地址(windows和Linux) ,當時覺得挺好,后來正好項目里有需要,就用了它,但好像有點問題.因為它是采用固定字符串搜索(if (line.indexOf("Physical Address"!= -1)獲得MAC 地址的,后來在應(yīng)用時出了問題,因為沒有"Physical Address"這一項.后來在外網(wǎng)在查查了一下,后來發(fā)現(xiàn)老外有寫一個這樣的類,可能那樣的方式更加可靠一點.算是做個標記.

    package sterning.queue;
    import java.net.InetAddress;
    import java.io.InputStream;
    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.text.ParseException;
    import java.util.StringTokenizer;


    public final class NetworkUtils {

      
    private final static int MACADDR_LENGTH = 17;
      
    private final static String WIN_OSNAME = "Windows";
      
    private final static String WIN_MACADDR_REG_EXP =
       
    "^[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}$";
      
    private final static String WIN_MACADDR_EXEC = "ipconfig /all";


      
    public final static String getMacAddress() throws IOException {
        String os 
    = System.getProperty("os.name");
        
    try {
          
    if (os.startsWith(WIN_OSNAME)) {
             
    return winMacAddress(winIpConfigCommand());
          }

          
    // 下面是其它的操作系統(tǒng)的代碼,省略了!
          
    //   LINUX -->    else if (os.startsWith("Linux")) { 
          
    //                
          
    //                Process p = Runtime.getRuntime().exec("ifconfig");
          
    //   MAC OSX -->  else if(os.startsWith("Mac OS X")) { 
          
    //                
          
    //                Process p = Runtime.getRuntime().exec("ifconfig");
          else {
             
    throw new IOException("OS not supported : " + os);
          }

        }

        
    catch(ParseException e) {
          e.printStackTrace();
          
    throw new IOException(e.getMessage());
        }

      }


      
    private final static String winMacAddress(String ipConfigOutput) 
            
    throws ParseException {
        String localHost 
    = null;
        
    try {
          localHost 
    = InetAddress.getLocalHost().getHostAddress();
        }

        
    catch(java.net.UnknownHostException ex) {
          ex.printStackTrace();
          
    throw new ParseException(ex.getMessage(), 0);
        }


        StringTokenizer tokenizer 
    = new StringTokenizer(ipConfigOutput, "\n");
        String lastMacAddress 
    = null;

        
    while(tokenizer.hasMoreTokens()) {
          String line 
    = tokenizer.nextToken().trim();

          
    // see if line contains IP address
          if (line.endsWith(localHost) && lastMacAddress != null{
             
    return lastMacAddress;
          }


          
    // see if line contains MAC address
          int macAddressPosition = line.indexOf(":");
          
    if(macAddressPosition <= 0continue;

          String macAddressCandidate 
    = line.substring(macAddressPosition + 1).trim();
          
    if (winIsMacAddress(macAddressCandidate)) {
             lastMacAddress 
    = macAddressCandidate;
             
    continue;
          }

        }


        ParseException ex 
    = new ParseException
           (
    "cannot read MAC address from [" + ipConfigOutput + "]"0);
        ex.printStackTrace();
        
    throw ex;
      }



      
    private final static boolean winIsMacAddress(String macAddressCandidate) {
        
    if (macAddressCandidate.length() != MACADDR_LENGTH)    return false;
        
    if (!macAddressCandidate.matches(WIN_MACADDR_REG_EXP)) return false;
        
    return true;
      }



      
    private final static String winIpConfigCommand() throws IOException {
        Process p 
    = Runtime.getRuntime().exec(WIN_MACADDR_EXEC);
        InputStream stdoutStream 
    = new BufferedInputStream(p.getInputStream());

        StringBuffer buffer
    = new StringBuffer();
        
    for (;;) {
           
    int c = stdoutStream.read();
           
    if (c == -1break;
              buffer.append((
    char)c);
        }

        String outputText 
    = buffer.toString();
        stdoutStream.close();
        
    return outputText;
      }



      
    public final static void main(String[] args) {
        
    try {
          System.out.println(
    "MAC ADDRESS");
          System.out.println(
    "  OS          : " 
             
    + System.getProperty("os.name"));
          System.out.println(
    "  IP/Localhost: " 
             
    + InetAddress.getLocalHost().getHostAddress());
          System.out.println(
    "  MAC Address : " 
             
    + getMacAddress());
        }

        
    catch(Throwable t) {
          t.printStackTrace();
        }

      }

    }


    評論

    # re: JAVA獲得網(wǎng)卡MAC地址  回復(fù)  更多評論   

    2007-10-12 23:10 by apple0668
    不錯,學(xué)習了!實際中,如果要做一個投票系統(tǒng),通過記錄pc上的網(wǎng)卡地址來防止重復(fù)刷票,鑒于操作系統(tǒng)不一樣,上面程序可以做到自動識別操作系統(tǒng)。

    # re: JAVA獲得網(wǎng)卡MAC地址  回復(fù)  更多評論   

    2008-07-11 09:26 by Zzz
    不錯不錯,我現(xiàn)在希望能找到如何用程序修改網(wǎng)卡的mac地址,并在5分鐘后又再次自動恢復(fù)

    # re: JAVA獲得網(wǎng)卡MAC地址  回復(fù)  更多評論   

    2008-12-22 15:43 by 塞外野叟
    只能得到本地localhost的嗎,怎么得到客戶端的mac地址。

    # re: JAVA獲得網(wǎng)卡MAC地址  回復(fù)  更多評論   

    2009-06-20 14:18 by wyk
    不錯
    主站蜘蛛池模板: 3344免费播放观看视频| 美女黄色毛片免费看| 免费91麻豆精品国产自产在线观看 | 亚洲aⅴ天堂av天堂无码麻豆| 最近免费2019中文字幕大全| 亚洲国产成人久久综合一| 国产又黄又爽又大的免费视频 | 免费高清小黄站在线观看| 亚洲日本在线电影| 免费看片免费播放| 美女尿口扒开图片免费| 亚洲精品99久久久久中文字幕| 免费在线观看亚洲| 国产精品亚洲αv天堂无码| 精精国产www视频在线观看免费| 国产亚洲色婷婷久久99精品91| av午夜福利一片免费看久久| 中文亚洲AV片在线观看不卡 | 亚洲人成77777在线观看网| 免费在线观看的网站| 国产精品亚洲AV三区| 亚洲精品无码日韩国产不卡?V | 久久亚洲国产精品成人AV秋霞| 亚洲一级毛片免费看| 亚洲欧美日韩自偷自拍| 亚洲不卡无码av中文字幕| 在线观看免费黄色网址| 亚洲黄色在线视频| 国产精品久免费的黄网站| 日韩成人毛片高清视频免费看| 亚洲午夜无码久久久久| 亚洲精品视频在线观看免费| 亚洲夂夂婷婷色拍WW47| 亚洲片一区二区三区| 青青草无码免费一二三区| 亚洲欧美成aⅴ人在线观看| 亚洲精品高清在线| 亚洲一区二区三区免费在线观看| 亚洲AV成人无码久久WWW| 4338×亚洲全国最大色成网站| 69av免费观看|