我想在Mac和Windows上检测网络是wifi还是以太网。
NetworkInterface.getNetworkInterfaces()
此代码可以获取网络接口的名称,但我不知道网络是wifi还是以太网。请帮助我。...
答案 0 :(得分:0)
在应用程序代码中,您可能不知道,也不需要知道。在Java应用程序运行的级别上,网络之间没有区别,您所拥有的只是一个TCP / IP堆栈,并且您无法基于该网络来确定正在使用哪种网络。
您必须用本机代码编写一些与低级操作系统功能交互的东西(不要问我什么或方式,显然取决于操作系统)来获取该信息。
答案 1 :(得分:0)
(如果我理解您的问题),您可以尝试尝试查看其他Local Address
中的Network Interfaces
。如果wlan
有专用的IP Address
,则可以假定它已使用无线技术连接到网络。如果eth
具有专用的IP Address
,则可以假定它是通过以太网连接到网络的。我不知道这是否100%有效。这不是我的区域。
import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ListNets {
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
displayInterfaceInformation(netint);
}
static void displayInterfaceInformation(NetworkInterface netint) {
try {
NetworkInterface nif = netint;
if(nif==null){
System.err.println("Error getting the Network Interface");
return;
}
//System.out.println("Preparing to using the interface: "+nif.getName());
Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
InetSocketAddress inetAddr= new InetSocketAddress(nifAddresses.nextElement(),0);
//socket.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
System.out.println("Preparing to using the interface: "+nif.getName());
DatagramSocket socket = new DatagramSocket(inetAddr);
System.out.println(socket.getLocalAddress());
System.out.println("Interface setted");
} catch (SocketException ex) {
System.out.println(ex.toString());
}
catch(NoSuchElementException ex)
{
//System.out.println(ex.toString());
}
}
}