我需要获取运行程序的系统的mac地址。但我无法做到这一点。
我正在编写以下代码:
public class App{
public static void main(String[] args){
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
System.out.println("Current IP address : " + ip.getHostAddress());
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e){
e.printStackTrace();
}
}
}
我得到以下结果:
Current IP address : 14.96.192.202
Current MAC address :
我没有得到MAC地址,它为空。
我从这里看到了这个例子
如果您考虑了多个接口和一些空MAC地址(我在装有VMWare的Windows 7上运行Java
7(因此我有一些虚拟网络适配器)),那么这段代码似乎可以正常工作:
public static void main(String[] args) {
try {
InetAddress ip = InetAddress.getLocalHost();
System.out.println("Current IP address : " + ip.getHostAddress());
Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
while(networks.hasMoreElements()) {
NetworkInterface network = networks.nextElement();
byte[] mac = network.getHardwareAddress();
if(mac != null) {
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e){
e.printStackTrace();
}
}
这是运行它时在计算机上看到的内容(经过消毒的版本):
Current IP address : {I'm not telling :)}
Current MAC address :
Current MAC address : {actual hardware interface}
Current MAC address : 00-00-00-00-00-00-00-E0
Current MAC address : 00-00-00-00-00-00-00-E0
Current MAC address : 00-00-00-00-00-00-00-E0
Current MAC address : 00-00-00-00-00-00-00-E0
Current MAC address : 00-00-00-00-00-00-00-E0
Current MAC address : 00-50-56-C0-00-01
Current MAC address : 00-50-56-C0-00-08
这是运行的输出 ipconfig /all
C:\>ipconfig /all
Windows IP Configuration (minus any actual interface because I don't like sharing that kind of information :)
Ethernet adapter Local Area Connection 2:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Gbridge Virtual Private Network Adapter
Physical Address. . . . . . . . . : 02-50-F2-CE-82-01
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Ethernet adapter VMware Network Adapter VMnet1:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
Physical Address. . . . . . . . . : 00-50-56-C0-00-01
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::9c27:3d03:da2c:f14d%19(Preferred)
Autoconfiguration IPv4 Address. . : {Hidden}(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 268456022
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-13-DB-D9-CB-B8-AC-6F-AF-9D-F2
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS over Tcpip. . . . . . . . : Enabled
Ethernet adapter VMware Network Adapter VMnet8:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
Physical Address. . . . . . . . . : 00-50-56-C0-00-08
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::cdbb:434:7fd9:2574%20(Preferred)
IPv4 Address. . . . . . . . . . . : 192.168.42.1(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 285233238
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-13-DB-D9-CB-B8-AC-6F-AF-9D-F2
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS over Tcpip. . . . . . . . : Enabled
Tunnel adapter 6TO4 Adapter:
Description . . . . . . . . . . . : Microsoft 6to4 Adapter
Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : 2002:204c:1bc6::204c:1bc6(Preferred)
Default Gateway . . . . . . . . . :
NetBIOS over Tcpip. . . . . . . . : Disabled
Tunnel adapter isatap.{3E45CB42-BC1E-4F89-9C16-25166C0EABA1}:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft ISATAP Adapter
Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Tunnel adapter isatap.{77F1FADC-02BA-44AF-9FDF-97E23F8B5FE7}:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft ISATAP Adapter #3
Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Tunnel adapter isatap.{608257AC-C0F3-43A5-8595-898533C95D90}:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5
Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
从这种混乱中获得“仅一个价值”的挑战来自InetAddress.getLocalHost().getHostAddress()
与网络接口本身之间的关系。考虑一下初始程序的这个稍微扩展的版本(使用这个非常酷的IterableEnumeration实用程序类):
public static void main(String[] args) throws UnknownHostException, SocketException {
System.out.println("Current IP address : " + InetAddress.getLocalHost().getHostAddress());
for(NetworkInterface network : IterableEnumeration.make(NetworkInterface.getNetworkInterfaces())) {
byte[] mac = network.getHardwareAddress();
if(mac != null) {
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
//Bound InetAddress for interface
for(InetAddress address : IterableEnumeration.make(network.getInetAddresses())) {
System.out.println("\tBound to:"+address.getHostAddress());
}
}
}
}
如果在计算机上运行此命令,将会看到当前IP地址与一个适配器相关,但是硬件接口的MAC地址会将其自身视为另一个IP地址。也许您可以过滤出虚拟地址,或者只是找到一种利用所有可用地址的方法。
问题内容: 我可以用 获取mac地址,但是如果我在离线计算机上使用此代码,它将无法正常工作。 那么,如何获得Mac地址? 问题答案: 在Java 6+中,你可以使用。 请记住,计算机不能有网卡,尤其是嵌入式或虚拟的网卡。它也可以有多个。你可以使用来获取所有网卡的列表。
本文向大家介绍java实现获取用户的MAC地址,包括了java实现获取用户的MAC地址的使用技巧和注意事项,需要的朋友参考一下 方法一:将本机地址与局域网内其他机器区分开来 我们再来看下方法二: 方法三,更精简一些 最后要放大招了,小伙伴们看仔细哦 首先要说的是:本方法可以支持外网机器的mac地址获取。 以前弄了一个只能访问局域网。 有防火墙就访问不了, 但是这个不用担心了。 测试了百度的ip,
问题内容: 我知道您可以使用Java 6来做到这一点。但是我要部署的环境仅限于Java 5。 有谁知道如何在Java 5或更早版本中执行此操作?非常感谢。 问题答案: Java 5中的标准方法是启动一个本机进程来运行ipconfig或ifconfig解析OutputStream以获得您的答案。 例如:
问题内容: 我需要一种跨平台的方法来在运行时确定计算机的MAC地址。对于Windows,可以使用“ wmi”模块,在Linux下,我能找到的唯一方法是运行ifconfig并在其输出中运行正则表达式。我不喜欢使用只能在一个OS上运行的程序包,而且更不用说容易出错的语法解析另一个程序的输出。 有谁知道跨平台方法(Windows和Linux)方法来获取MAC地址?如果没有,还有谁比我上面列出的方法更优雅
问题内容: 当前,提到的用于获取MAC地址的所有解决方案始终使用eth0。但是,如果接口不是以eth0开头,该怎么办呢?同样在OS X上,接口名称也不同。 eth0接口也可能存在但未使用。即不活跃,它没有一个IP。 因此,有没有一种方法可以获取第一个可用接口Active的MAC地址(即,它具有一个inet地址,我什至不希望有人拥有inet6)。 例如 注意:我更改了输出值。 因此,在这种情况下,我