`
vwpolo
  • 浏览: 194722 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

三种使用Java获得获得电脑网卡方法

阅读更多

   现在我们的项目现在加入了身份验证,通过收集客户端的电脑的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系统吧

0
0
分享到:
评论

相关推荐

    JAVA得到网卡物理地址(windows和Linux)

    我们可以使用 Java 的 Runtime.getRuntime().exec() 方法来执行 ipconfig 命令,并将结果解析出来获取网卡物理地址。下面是一个示例代码: ```java public final static String getMacAddress() throws IOException ...

    Java/JSP获得客户端网卡MAC地址的三种方法解析

    本文将深入解析在Java/JSP环境中获取客户端网卡MAC地址的三种常见方法,旨在为开发者提供全面而深入的理解。 ### 方法一:通过Java NIO(非阻塞I/O)库 Java NIO库提供了访问底层网络接口的能力,从而可以获取包括...

    Java怎么获取多网卡本地ip

    在Java编程中,获取本地IP地址...综上所述,Java获取多网卡本地IP涉及到了Java网络编程的基本概念,包括`InetAddress`类的使用,以及如何处理多网络接口的情况。了解和掌握这些知识对开发涉及网络通信的应用至关重要。

    java 获取客户端ip mac地址

    以上代码首先获取当前的`FacesContext`实例,然后从中得到`HttpServletRequest`对象,并调用其`getRemoteAddr()`方法获取客户端的IP地址。 需要注意的是,`getRemoteAddr()`方法返回的是客户端的IP地址,如果客户端...

    java得到机器的MAC,硬盘序列序列号和IP地址

    得到机器的MAC,硬盘序列序列号和IP地址 public static void main(String[] args) ...{ String osName = System.getProperty("os.name"); StringBuffer systemPathBuff = new StringBuffer(""); if (osName.index...

    php与java获得电脑mac地址

    在这个场景中,我们将探讨如何使用PHP和Java这两种编程语言在Windows和Linux操作系统上获取MAC地址。 首先,我们来看PHP如何获取MAC地址。在PHP中,没有内置的函数直接提供获取MAC地址的功能,但我们可以利用`exec`...

    使用JAVA获取客户端MAC地址.doc

    //Java获得CPU序列号和网卡Mac地址 /* 利用Runtime call操作系统的命令,具体的命令取决于不同的操作系统,注意不要调用Runtime.getRuntime().exec(String)接口,要用Runtime.getRuntime().exec(String[])这个接口,...

    pb获取ip地址/mac地址

    PowerBuilder是一种流行的.NET和Java应用程序开发工具,尤其适合于创建数据库驱动的应用程序。在这个场景中,开发者可能需要获取本地或远程设备的网络信息,以便进行网络通信或者设备定位。 1. **获取IP地址**: ...

    获取WIFI无线网络列表

    在Android系统中,可以使用`WifiManager`类来获取网络列表,调用`getScanResults()`方法就能得到一个包含所有扫描到的网络的列表。而在iOS中,可以使用`CaptiveNetwork`框架的`scanForNetworksWithSSID:`方法来完成...

    ubuntu skills ubuntu命令技巧(pdf格式)

    配置默认Java版本,可以使用`update-alternatives --config java`命令。 ##### 9.2 给APT设置代理 给APT设置代理,可以在`/etc/apt/apt.conf.d/99proxy`文件中配置。 ##### 9.3 修改系统登录信息 修改系统登录信息...

    SugarHosts Windows VPS主机安装系统图文.docx

    用户需要检查电脑是否安装了 Java,如果没有安装,需要先安装 Java。 Java 是 VNC 客户端运行所必需的。 5. 使用 VNC 远程管理 用户需要使用 VNC 远程管理,连接到 VPS 主机,以便进行远程管理。 6. 安装 WIN ...

    基于Android手机的通信电源监控软件设计.pdf

    随着监控技术的发展和用户需求的提升,Android智能系统因其开源、强大的扩展性和易用性,在平板电脑和智能手机中得到了广泛应用。 首先,文章指出通信电源Android监控软件利用Android系统的平板电脑或手机,通过Wi-...

    stm32嵌入式课程设计网络通信实验

    DHCP获取IP成功,当DHCP获取成功后,将在LCD屏幕上显示DHCP得到的IP地址,如果DHCP获取失败,那么将 使用静态IP(固定为:192.168.1.30),然后开启Web Server服务,并进入主循环,等待按键输入选择需要 测试的...

    Ubuntu命令技巧.pdf

    **9.4 使用eclipse等其他自带java编译器的软件,换回sun的编译器方法** - 使用 `update-alternatives` 命令更改默认的Java编译器。 #### 十、中文支持 **10.1 切换输入法引擎** - 使用 `ibus-setup` 命令设置...

    android开发笔记

    - **Android**: 是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。Android是由Google公司和开放手机联盟领导及开发的。 - **iPhone**: 是苹果公司...

    路由器配置

    1. **配置笔记本电脑的IP地址:** 将笔记本电脑的网卡IP地址设置为169.254.xx.xx(xx为任意数字,但应避免与AP的IP地址冲突),子网掩码设置为255.255.0.0。 2. **登录AP:** 在浏览器的地址栏中输入AP的IP地址...

    驱动选择程序2009

    驱动选择程序2009是针对计算机硬件设备的软件工具,它主要负责识别、匹配并安装适合电脑硬件的驱动程序。驱动程序是操作系统与硬件设备之间的桥梁,使得操作系统能够有效地控制和利用硬件设备的功能。2009年版本的...

    window重装系统

    - **主题支持**: 解锁了UxTheme.dll文件,使得用户可以直接使用第三方主题资源,增强了系统的美观度。 - **游戏性能提升**: 采用稳定的DirectX9.0c2010.06版,更好地支持大型3D游戏运行。 - **网络性能优化**: 修改...

Global site tag (gtag.js) - Google Analytics