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

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

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

    好好生活,努力工作,天天向上!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks
         現在我們的項目現在加入了身份驗證,通過收集客戶端的電腦的CPU編號、硬盤編號和網卡編號然后生成一個機器碼,然后使用這個機器碼作為身份標識,驗證客戶端的合法性,我們的項目是RCP架構,所以使用了SWT Extension這樣的一個插件(國人開發,而且是BlogJava的會員),這樣比較方便,獲取CPU編號、硬盤編號倒是沒有什么問題,獲取網卡信息的時候有些電腦居然采集不到信息,采集方式是這樣的:
     int[] macs = Extension.GetMACAddress(0);
     
    if(macs == null || macs.length ==0) {
        macs 
    = Extension.GetMACAddress(1);
     }
     
    if(macs == null || macs.length ==0) {
        macs 
    = Extension.GetMACAddress(2);
     }
     
    if(macs == null || macs.length ==0) {
        macs 
    = Extension.GetMACAddress(3);
     }
     StringBuffer stringBuffer 
    = new StringBuffer();
     
    for (int i = 0; i < macs.length; i++) {
          stringBuffer.append(getHexString(macs[i], 
    2)
          
    if (i != macs.length - 1)
            stringBuffer.append(
    "-");
     }
     System.out.println(stringBuffer.toString.toUpperCase()););

       注意通過Extension.GetMACAddress()方法得到的網卡地址是一個十進制的數組,需要將他轉換成十六進制的,這樣才能和操作系統現在的信息一致。

       這種采集方式不是萬能,估計和操作環境有關系,我們這個項目的按照客戶端大概在4000臺電腦左右,大部分安裝的Windows 2000操作系統、Java運行環境是jre 6.0,通過分析發現有些電腦是雙網卡,我見得最多的一個電腦居然配置了9塊網卡(包括虛擬的和禁用掉的),在這種情況下SWT Extension 是無法正常工作了,網絡上也提供了其他的辦法比如使用
              String command = "cmd.exe /c ipconfig /all";
              Process p 
    = Runtime.getRuntime().exec(command);
              BufferedReader br 
    = new BufferedReader(new InputStreamReader(p.getInputStream()));
              String line;
              
    while ((line = br.readLine()) != null) {
                System.out.println(
    "line:"+line);
                
    if (line.indexOf("Physical Address"> 0) {
                  
    int index = line.indexOf(":");
                  index 
    += 2;
                  address 
    = line.substring(index);
                  
    break;
                }
              }
              br.close();

    根據返回的輸入流從里面解析信息,通過使用發現這種方式也不太管用!。這里重點介紹第三種方式:通過JDK 6.0中的方法來獲取:
     private static String getMac() {
        
    try {
          Enumeration
    <NetworkInterface> el = NetworkInterface.getNetworkInterfaces();
          
    while (el.hasMoreElements()) {
            
    byte[] mac = el.nextElement().getHardwareAddress();
            
    if (mac == null)
              
    continue;

            StringBuilder builder 
    = new StringBuilder();
            
    for (byte b : mac) {
              builder.append(hexByte(b));
              builder.append(
    "-");
            }
            builder.deleteCharAt(builder.length() 
    - 1);
            
    return builder.toString();

          }
        }
        
    catch (Exception exception) {
          exception.printStackTrace();
        }
        
    return null;
      }
    這是JDK 6.0的新特性,可以支持多網卡配置,你只需要判斷一下就行
    我的做法是將這三種方法同時使用:如果第一種方式獲取不到,換成第二種,第二種方法也無效的話,我就使用第三種,如果第三種方式仍然無效的話,只能建議客戶重裝系統了:你還是升級到XP系統吧
    posted on 2009-11-01 13:14 VWPOLO 閱讀(4643) 評論(5)  編輯  收藏 所屬分類: Java 技術

    Feedback

    # re: 三種使用Java獲得獲得電腦網卡方法 2009-11-01 22:13 哈哈的日子
    相當不錯啊,沒想到 JDK 6 還有這個新特性。謝謝  回復  更多評論
      

    # re: 三種使用Java獲得獲得電腦網卡方法 2009-11-02 09:28 javest
    哥們,我比較關心你們是怎么得到CPU編號、硬盤編號的,哈,如果可以的話,就介紹一下,是不是調用DLL取CPU編號、硬盤編號的.???  回復  更多評論
      

    # re: 三種使用Java獲得獲得電腦網卡方法 2009-11-02 16:05 咖啡妝
    @javest
    java應該給封裝好了 至于底層有可能是通過jni讀取  回復  更多評論
      

    # re: 三種使用Java獲得獲得電腦網卡方法 2009-11-02 21:12 VWPOLO
    @javest
    可以參考我的另外一篇文章: http://www.tkk7.com/vwpolo/archive/2009/06/03/279746.html  回復  更多評論
      

    # re: 三種使用Java獲得獲得電腦網卡方法 2009-11-02 21:13 VWPOLO
    Java獲取這些系統信息大部分是通過JNI調用DLL  回復  更多評論
      

    主站蜘蛛池模板: 青草草在线视频永久免费| a高清免费毛片久久| 久久精品国产亚洲av麻豆蜜芽| 亚洲AV无码日韩AV无码导航| 黑人大战亚洲人精品一区| 亚洲色欲久久久久综合网| 久久亚洲2019中文字幕| 亚洲午夜精品第一区二区8050| 亚洲国产成人爱av在线播放| 免费一看一级毛片人| 免费在线观看黄网站| 亚洲视频在线一区二区| 亚洲一区无码中文字幕| 亚洲爆乳无码专区| 精品亚洲麻豆1区2区3区| 亚洲婷婷天堂在线综合| 自拍日韩亚洲一区在线| 自拍偷自拍亚洲精品偷一| 日韩a毛片免费观看| 久久久WWW免费人成精品| 人人揉揉香蕉大免费不卡| 四虎在线免费视频| 国产99视频精品免费观看7| 四虎成人免费网站在线| jizzjizz亚洲| 亚洲国产精品无码av| 亚洲第一区视频在线观看| 中文字幕在线日亚洲9| 美女黄频a美女大全免费皮| 成人免费一区二区三区| 无码精品一区二区三区免费视频| **毛片免费观看久久精品| 在线A级毛片无码免费真人| 免费在线观看黄色毛片| 亚洲成色在线综合网站| 亚洲一级特黄特黄的大片| 在线观看国产一区亚洲bd| 两个人看的www免费| 黄色免费网站网址| 亚洲AV网站在线观看| 亚洲视频在线免费观看|