<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
    不錯
    主站蜘蛛池模板: 亚洲精品日韩专区silk| 亚洲国产精品自在在线观看| 亚洲精品色播一区二区| 天天摸夜夜摸成人免费视频 | 日韩亚洲变态另类中文| 少妇亚洲免费精品| 精品国产日韩亚洲一区| 中文字幕在线观看免费| 久久精品国产精品亚洲色婷婷| a级在线免费观看| 亚洲综合自拍成人| 一二三四视频在线观看中文版免费 | 丁香婷婷亚洲六月综合色| 中文字幕无码成人免费视频| 自拍日韩亚洲一区在线| 国产精品另类激情久久久免费| 青草青草视频2免费观看| 国产亚洲成归v人片在线观看| 两个人看的www免费| 久久精品国产亚洲AV麻豆网站 | vvvv99日韩精品亚洲| 国产免费久久精品99久久| 久热综合在线亚洲精品| 美女视频黄免费亚洲| 久久亚洲精品高潮综合色a片| 亚洲国产成人久久综合区| 可以免费观看的毛片| 亚洲偷自精品三十六区| 亚洲AV日韩精品一区二区三区 | 视频免费在线观看| 亚洲一区二区三区免费在线观看| 全免费A级毛片免费看网站| 久久高潮一级毛片免费| 亚洲理论片在线中文字幕| 免费大香伊蕉在人线国产 | 国产精品成人免费一区二区| 日本在线观看免费高清| 亚洲欧洲在线播放| 亚洲精品国精品久久99热| 免费看片在线观看| 久久精品成人免费观看97|