我使用以下代码获取mac地址:(在主要部分)
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements())
{
NetworkInterface nif = interfaces.nextElement();
byte[] lBytes = nif.getHardwareAddress();
StringBuffer lStringBuffer = new StringBuffer();
if (lBytes != null)
{
for (byte b : lBytes)
{
lStringBuffer.append(String.format("%1$02X ", new Byte(b)));
}
}
System.out.println(lStringBuffer);
}
我已添加以下标题:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.*;
如果我运行代码,我得到的输出很长(大多数是空白的)
我还得到了一个包含6个地址的列表
我通过ip config
检查了以太网的mac地址,它在列表中;
我想知道哪一个是以太网的mac,即使我在不同的PC上运行它,我也想知道,如何检查他们是否欺骗了mac地址......
通过Spoofed我的意思是,如果有人在安装Windows后,在注册表或软件中更改mac地址。 我在其中一篇关于堆栈溢出的其他问题的帖子中读到了它,一个人评论说他编写的代码即使有人欺骗了mac也会工作,因此代码不好。所以我想它可以在java中完成。我会问那里,但我不能。 我的意思是,如果PC或笔记本电脑没有无线,它应该采用以太网mac地址。
答案 0 :(得分:3)
在某种意义上,关闭的网络接口的MAC地址也不存在。在设备初始化时,请考虑将MAC地址 作为命令行参数提供给接口。无论如何,这就是为什么Java难以在非活动网络接口上报告MAC地址的原因之一。
实际上,您可以使用Runtime.exec(...)
或类似命令运行ifconfig
命令,然后解析输出以提取MAC地址。但是,我不知道这是否会一直有效。
我认为你想要做的事情没有多大意义(由于上述原因),但是如果你要尝试这个,首先需要确认运行ifconfig
告诉你MAC地址对于未连接和/或未通电的WiFi网络接口。手册页为here。确认后,请阅读Runtime.exec(...)
和ProcessBuilder
的javadoc。如果您需要更基本的教程,请尝试以下方法:http://alvinalexander.com/java/java-exec-processbuilder-process-1
我想知道哪一个是以太网的mac,即使我在不同的PC上运行它
您无法根据MAC地址可靠地区分以太网和WiFi网络。
我还想知道如何检查他们是否欺骗了mac地址
通过欺骗,我假设您想知道NIC的MAC地址是否已从其(硬件)默认值更改。你不能用Java来说明这一点。实际上,我怀疑你甚至可以原生地说出来。
坦率地说,如果你尝试用(纯)Java做到这一点,那么你是否会去任何地方是值得怀疑的。标准Java API根本不支持这种事情。