-5

我正在使用以下代码获取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 个地址的列表,我通过 检查以太网的 MAC 地址ip config,它在列表中;

我想知道其中哪一个是以太网的mac,即使我在不​​同的PC上运行它,我也想知道,如何检查他们是否欺骗了mac地址......

欺骗我的意思是,如果有人在安装 Windows 后,更改注册表或软件中的 mac 地址。我在关于堆栈溢出的其他一些问题的帖子中读到它,有人评论说,即使有人欺骗了 mac,他编写的代码也可以工作,因此代码不好。所以我想它可以在java中完成。我会在那里问,但我不能。我的意思是,如果 PC 或笔记本电脑没有无线功能,它应该采用以太网 MAC 地址。

4

1 回答 1

3

从某种意义上说,关闭的网络接口的MAC地址是不存在的。考虑到 MAC 地址可以在设备初始化时作为命令行参数提供给接口。无论如何,这是 Java 难以在非活动网络接口上报告 MAC 地址的原因之一。

在实践中,您可能能够使用Runtime.exec(...)或类似的ifconfig命令来运行,然后解析输出以提取 MAC 地址。但是,我不知道这是否会一直有效。


我认为您尝试做的事情没有多大意义(出于上述原因),但如果您要尝试此操作,您首先需要确认运行ifconfig告诉您 WiFi 网络接口的 MAC 地址不是已连接和/或未通电。手册页在这里Runtime.exec(...)确认后,请阅读和的 javadocs ProcessBuilder。如果你需要更基础的教程,试试这个:http ://alvinalexander.com/java/java-exec-processbuilder-process-1


我想知道其中哪一个是以太网的 mac,即使我在不​​同的 PC 上运行它

您无法根据 MA​​C 地址可靠地区分以太网和 WiFi 网络。

我也想知道如何检查他们是否欺骗了mac地址

通过欺骗,我假设您想知道 NIC 的 MAC 地址是否已从其(硬件)默认值更改。你无法从 Java 中看出这一点。确实,我怀疑您甚至可以在本地说出这一点。

坦率地说,如果您尝试在(纯)Java 中执行此操作,您是否会得到任何结果是值得怀疑的。标准的 Java API 根本不支持这种东西。

于 2013-09-24T11:22:49.923 回答