- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何识别 NetworkInterface
对象是否属于物理 NIC,而不是 NIC 的软件/仿真。
我知道有像 NetworkInterface#isVirtual
和 NetworkInterface#getParent
这样的方法,理论上可以判断这是否是物理接口(interface)。
但显然这并没有给我正确的答案,因为当我使用这些方法时,我得到了低于o/p的结果,并且127.0.0.1
是一个环回软件接口(interface)。
我错过了什么吗?
代码:
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netIf : Collections.list(nets)) {
System.out.printf("Display name: %s\n", netIf.getDisplayName());
System.out.printf("Name: %s\n", netIf.getName());
System.out.printf("Up? %s\n", netIf.isUp());
System.out.printf("Loopback? %s\n", netIf.isLoopback());
System.out.printf("PointToPoint? %s\n", netIf.isPointToPoint());
System.out.printf("Supports multicast? %s\n", netIf.supportsMulticast());
System.out.printf("Virtual? %s\n", netIf.isVirtual());
System.out.printf("Hardware address: %s\n", Arrays.toString(netIf.getHardwareAddress()));
System.out.printf("MTU: %s\n", netIf.getMTU());
System.out.printf("Parent: %s\n", netIf.getParent());
System.out.println("InetAddress:");
Enumeration<InetAddress> inetAddresses = netIf.getInetAddresses();
int count = 1;
for(InetAddress inetAddress : Collections.list(inetAddresses)){
System.out.println("\tInetAddress #" + count);
printInetAddressInfo(inetAddress, "\t\t");
count++;
}
System.out.println("SubInterfaces:");
displaySubInterfaces(netIf);
netIf = null;
System.out.printf("\n");
}
结果:
Display name: Software Loopback Interface 1
Name: lo
Up? true
Loopback? true
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1
Parent: null
InetAddress:
InetAddress #1
inetAddress: /127.0.0.1
InetAddress #2
inetAddress: /0:0:0:0:0:0:0:1
SubInterfaces:
最佳答案
Am I missing something?
我认为问题在于您错误地解释了 isVirtual
。 javadoc 说:
public boolean isVirtual()
Returns whether this interface is a virtual interface (also called subinterface). Virtual interfaces are, on some systems, interfaces created as a child of a physical interface and given different settings (like address or MTU). Usually the name of the interface will the name of the parent followed by a colon (:) and a number identifying the child since there can be several virtual interfaces attached to a single physical interface.
正如您所看到的,javadoc 使用“虚拟接口(interface)”来表示与“子接口(interface)”相同的事物;即与 NIC 关联的第二个 IP 地址。这与任何非物理接口(interface)不同。
127.0.0.1
实际上是软件环回设备的主IP地址。这显然是一个非物理设备,但它不是某些其他主接口(interface)(无论是物理还是虚拟)的子接口(interface)。
这有点令人困惑,但“虚拟”这个词在许多与 IT 相关的环境中都是有弹性的。
根据记录,这种“子接口(interface)==虚拟接口(interface)”命名法也不是标准的。 Cisco 使用“虚拟接口(interface)”来表示“环回接口(interface)、空接口(interface)、子接口(interface)或隧道接口(interface)”;例如http://www.cisco.com/c/en/us/td/docs/ios/12_4/interface/configuration/guide/inb_virt.html#wp1027188
关于java - 如何判断NetworkInterface对象是否属于物理网卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41321150/
我使用 XMLEncode 将一些网络数据存储在 xml 文件中,因为它确实很方便。不幸的是,一些类(如 NetworkInterface)无法通过 XMLEncoder 序列化(这个词正确吗?)为
NetworkInterface.GetAllNetworkInterfaces方法返回的是系统上所有接口(interface)的列表,但是它返回了很多看似垃圾的接口(interface)太像了 xx
我已经使用这个 API 来选择设备的 mac 地址, NetworkInterface.getHardwareAddress() 但这是针对 API 级别 9 及更高版本的,我应该使用什么来选择 AP
我拿起我的一些旧代码进行重建,曾经在我的平板电脑和手机上使用的方法之一不再有效。我正在尝试使用我在此处选择的例程来获取我的 IP 地址。 当程序执行到第 4 行(以“for (Enumeration.
我想获取当前设备的可用网络,所以我首先获取网络接口(interface)列表: NetworkInterface.getNetworkInterfaces(); 然后,迭代每一个: NetworkIn
我想使用 Wifi 和 LAN 连接在设备上运行一系列测试。我有两张网卡,一张是WiFi,一张是有线。该设备具有可通过两个网络接口(interface)访问的单个 IP 地址。有没有办法保证我的机器使
我有一个在 OpenShift (Kubernetes) 中运行的软件,其中许可证基于 MAC 地址。重新启动应用程序时,容器的MAC地址发生变化,我必须申请新的许可证文件。 由于 k8s pod 中
我想使用 Wifi 和 LAN 连接在设备上运行一系列测试。我有两张网卡,一张是WiFi,一张是有线。该设备具有可通过两个网络接口(interface)访问的单个 IP 地址。有没有办法保证我的机器使
什么情况下返回值为true? 谢谢大家! public class Test1 { public static void main(String[] args) { try {
我正在使用以下代码来检测我的电脑上网络接口(interface)卡的名称。我正在使用 USB 调制解调器。 public class DetectNIC { public string Ret
我有一个 .NET 应用程序需要从网站访问资源。访问这些资源可能需要用户更改其代理设置。 我想知道如何以一种有助于决定是否为用户提供更改其代理设置的能力的方式从应用程序检测网络的存在(即潜在的互联网连
该特定字段返回什么?我想要每秒接收的字节数。我应该依赖这个吗? 最佳答案 我认为你可以这样使用它: long beginValue = NetworkInterface.GetIPv4Statisti
我在 Spring 的代码是: group = SysUtil.isLinux()?new EpollEventLoopGroup():new NioEventLoopGroup(); 这里的代码块,
我的 android API 有问题:如果我查看 android API 文档,类 NetworkInterface 的方法 isUP() 存在,但是当我尝试在代码中使用它时,我无法编译我的应用程序。
在我们的部分代码中,我试图将 mac 地址与我们的许可证文件绑定(bind),但我面临一个问题,即我用于计算机器所有 mac 地址的代码没有返回所有物理 mac 地址。这是获取所有mac地址的代码 p
我正在尝试编译一个简单的 Qt5.2 程序,它使用 libnm-qt5 和 libmm-qt5 来管理连接,但是当我试图用这段代码列出它们时: #include #include #include
我要测试一个将 java.net.NetworkInterface 列表作为参数的方法,因此我应该模拟最终的抽象类或实例化它。对做这些有什么想法吗? 方法是这样的: public void handl
我的机器上有三个接口(interface)(eth0,Loopback,wlan0),我想使用 Java-API 来获取 mac 地址。 我使用这个代码。 Enumeration nets = Net
我遇到了 this tracker issue 中报告的问题早在 2011 年,并希望开发一个合适的解决方法。我想向用户显示所有 Android 设备的网络接口(interface),并按它们的类型以
我有一个 Azure 网站,对 NetworkInterface.GetIsNetworkAvailable() 的调用始终返回 false。还有其他人遇到过这种行为吗? 最佳答案 正如 MSFT J
我是一名优秀的程序员,十分优秀!