<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

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

    前陣子看到一篇文件,JAVA得到網(wǎng)卡物理地址(windows和Linux) ,當(dāng)時(shí)覺(jué)得挺好,后來(lái)正好項(xiàng)目里有需要,就用了它,但好像有點(diǎn)問(wèn)題.因?yàn)樗遣捎霉潭ㄗ址阉?if (line.indexOf("Physical Address"!= -1)獲得MAC 地址的,后來(lái)在應(yīng)用時(shí)出了問(wèn)題,因?yàn)闆](méi)有"Physical Address"這一項(xiàng).后來(lái)在外網(wǎng)在查查了一下,后來(lái)發(fā)現(xiàn)老外有寫一個(gè)這樣的類,可能那樣的方式更加可靠一點(diǎn).算是做個(gè)標(biāo)記.

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

      }

    }


    評(píng)論

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

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

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

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

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

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

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

    2009-06-20 14:18 by wyk
    不錯(cuò)
    主站蜘蛛池模板: 大桥未久亚洲无av码在线| 国产精品免费视频观看拍拍| 成人毛片免费在线观看| 亚洲av无码偷拍在线观看| 亚洲色婷婷六月亚洲婷婷6月| 最近2018中文字幕免费视频| 九九精品国产亚洲AV日韩| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲av无码专区在线观看素人| 免费在线视频你懂的| 一级做α爱过程免费视频| 亚洲jjzzjjzz在线播放| 亚洲A丁香五香天堂网| 亚洲精品tv久久久久| 免费精品国偷自产在线在线 | 国产亚洲AV夜间福利香蕉149 | 亚欧国产一级在线免费| 亚洲一区二区三区免费| 九九热久久免费视频| 亚洲精品久久无码av片俺去也| 亚洲中文字幕无码日韩| 日本亚洲欧洲免费天堂午夜看片女人员 | 在线播放亚洲精品| 亚洲国产美女视频| 亚洲成在人线av| 一区二区三区亚洲| 亚洲裸男gv网站| 亚洲色精品88色婷婷七月丁香| 久久国产亚洲观看| 国产亚洲AV夜间福利香蕉149| 亚洲爆乳无码专区| 亚洲午夜国产精品无卡| 亚洲AV乱码久久精品蜜桃| 亚洲永久中文字幕在线| 亚洲免费视频在线观看| 国产亚洲精品观看91在线| 亚洲国产成人爱av在线播放| 久久精品国产69国产精品亚洲| 亚洲成人在线免费观看| 亚洲AV无码国产精品永久一区| 国产精品永久免费|