<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JAVA獲得網卡MAC地址

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

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

    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());
          }

          
    // 下面是其它的操作系統的代碼,省略了!
          
    //   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獲得網卡MAC地址  回復  更多評論   

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

    # re: JAVA獲得網卡MAC地址  回復  更多評論   

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

    # re: JAVA獲得網卡MAC地址  回復  更多評論   

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

    # re: JAVA獲得網卡MAC地址  回復  更多評論   

    2009-06-20 14:18 by wyk
    不錯
    主站蜘蛛池模板: 亚洲国产精品无码成人片久久 | 免费人成在线观看播放a| 一个人看的www在线免费视频| 久9这里精品免费视频| 成人av免费电影| 亚洲精品无码永久在线观看你懂的 | 9久久免费国产精品特黄| 精品国产无限资源免费观看| 免费jlzzjlzz在线播放视频| 久久亚洲精品中文字幕| 小说专区亚洲春色校园| 伊人久久免费视频| 亚洲免费日韩无码系列| 亚洲伊人精品综合在合线| 一个人看www免费高清字幕| 国产1024精品视频专区免费| 国产亚洲av人片在线观看| 在线亚洲午夜片AV大片| 女同免费毛片在线播放| 国产男女性潮高清免费网站| 亚洲一区中文字幕久久| 无码日韩人妻AV一区免费l| 青青青国产在线观看免费网站| 国产av无码专区亚洲av果冻传媒| 2020天堂在线亚洲精品专区| 大地资源在线资源免费观看| 国产在线98福利播放视频免费| 亚洲人成电影在线观看青青| 两个人看的www免费| 国产伦一区二区三区免费| 亚洲午夜国产精品无卡| 永久免费av无码入口国语片| 免费A级毛片无码A| 亚洲狠狠成人综合网| 亚洲激情在线视频| 免费国产黄网站在线看| 国产h视频在线观看免费| 亚洲欧洲在线观看| 黄桃AV无码免费一区二区三区| 久久亚洲国产成人影院| 精品免费tv久久久久久久|