现在我们的项目现在加入了身份验证,通过收集客户端的电脑的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系统吧
分享到:
相关推荐
我们可以使用 Java 的 Runtime.getRuntime().exec() 方法来执行 ipconfig 命令,并将结果解析出来获取网卡物理地址。下面是一个示例代码: ```java public final static String getMacAddress() throws IOException ...
本文将深入解析在Java/JSP环境中获取客户端网卡MAC地址的三种常见方法,旨在为开发者提供全面而深入的理解。 ### 方法一:通过Java NIO(非阻塞I/O)库 Java NIO库提供了访问底层网络接口的能力,从而可以获取包括...
在Java编程中,获取本地IP地址...综上所述,Java获取多网卡本地IP涉及到了Java网络编程的基本概念,包括`InetAddress`类的使用,以及如何处理多网络接口的情况。了解和掌握这些知识对开发涉及网络通信的应用至关重要。
以上代码首先获取当前的`FacesContext`实例,然后从中得到`HttpServletRequest`对象,并调用其`getRemoteAddr()`方法获取客户端的IP地址。 需要注意的是,`getRemoteAddr()`方法返回的是客户端的IP地址,如果客户端...
得到机器的MAC,硬盘序列序列号和IP地址 public static void main(String[] args) ...{ String osName = System.getProperty("os.name"); StringBuffer systemPathBuff = new StringBuffer(""); if (osName.index...
在这个场景中,我们将探讨如何使用PHP和Java这两种编程语言在Windows和Linux操作系统上获取MAC地址。 首先,我们来看PHP如何获取MAC地址。在PHP中,没有内置的函数直接提供获取MAC地址的功能,但我们可以利用`exec`...
//Java获得CPU序列号和网卡Mac地址 /* 利用Runtime call操作系统的命令,具体的命令取决于不同的操作系统,注意不要调用Runtime.getRuntime().exec(String)接口,要用Runtime.getRuntime().exec(String[])这个接口,...
PowerBuilder是一种流行的.NET和Java应用程序开发工具,尤其适合于创建数据库驱动的应用程序。在这个场景中,开发者可能需要获取本地或远程设备的网络信息,以便进行网络通信或者设备定位。 1. **获取IP地址**: ...
在Android系统中,可以使用`WifiManager`类来获取网络列表,调用`getScanResults()`方法就能得到一个包含所有扫描到的网络的列表。而在iOS中,可以使用`CaptiveNetwork`框架的`scanForNetworksWithSSID:`方法来完成...
配置默认Java版本,可以使用`update-alternatives --config java`命令。 ##### 9.2 给APT设置代理 给APT设置代理,可以在`/etc/apt/apt.conf.d/99proxy`文件中配置。 ##### 9.3 修改系统登录信息 修改系统登录信息...
用户需要检查电脑是否安装了 Java,如果没有安装,需要先安装 Java。 Java 是 VNC 客户端运行所必需的。 5. 使用 VNC 远程管理 用户需要使用 VNC 远程管理,连接到 VPS 主机,以便进行远程管理。 6. 安装 WIN ...
随着监控技术的发展和用户需求的提升,Android智能系统因其开源、强大的扩展性和易用性,在平板电脑和智能手机中得到了广泛应用。 首先,文章指出通信电源Android监控软件利用Android系统的平板电脑或手机,通过Wi-...
DHCP获取IP成功,当DHCP获取成功后,将在LCD屏幕上显示DHCP得到的IP地址,如果DHCP获取失败,那么将 使用静态IP(固定为:192.168.1.30),然后开启Web Server服务,并进入主循环,等待按键输入选择需要 测试的...
**9.4 使用eclipse等其他自带java编译器的软件,换回sun的编译器方法** - 使用 `update-alternatives` 命令更改默认的Java编译器。 #### 十、中文支持 **10.1 切换输入法引擎** - 使用 `ibus-setup` 命令设置...
- **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年版本的...
- **主题支持**: 解锁了UxTheme.dll文件,使得用户可以直接使用第三方主题资源,增强了系统的美观度。 - **游戏性能提升**: 采用稳定的DirectX9.0c2010.06版,更好地支持大型3D游戏运行。 - **网络性能优化**: 修改...