如何使用java获取本地系统的子网掩码?

use*_*621 18 java networking

如何Subnet使用Java编程获取本地系统的掩码地址?

dfa*_*dfa 26

localhost接口的第一个地址的网络掩码:

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
Run Code Online (Sandbox Code Playgroud)

更完整的方法:

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);

for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
    System.out.println(address.getNetworkPrefixLength());
}
Run Code Online (Sandbox Code Playgroud)

/ 24表示255.255.255.


mas*_*mas 5

SE6中的java.net.InterfaceAddress有一个getNetworkPrefixLength方法,顾名思义,它返回网络前缀长度.如果您希望以该格式使用子网掩码,则可以从中计算子网掩码.java.net.InterfaceAddress支持IPv4和IPv6.

多个网络应用程序API中的getSubnetMask()以java.net.InetAddress形式返回指定IP地址的子网掩码(本地系统可能有许多本地IP地址)


小智 5

我找到:

NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
Run Code Online (Sandbox Code Playgroud)

要获得ipv6的子网掩码,我们可以使用:

 networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength(); 
Run Code Online (Sandbox Code Playgroud)

要获得ipv4的子网掩码,我们可以使用:

networkInterface.getInterfaceAddresses().get(1).getNetworkPrefixLength();
Run Code Online (Sandbox Code Playgroud)


Int*_*kot 5

您可以将获得的值转换为标准文本格式,如下所示:

short prflen=...getNetworkPrefixLength();
int shft = 0xffffffff<<(32-prflen);
int oct1 = ((byte) ((shft&0xff000000)>>24)) & 0xff;
int oct2 = ((byte) ((shft&0x00ff0000)>>16)) & 0xff;
int oct3 = ((byte) ((shft&0x0000ff00)>>8)) & 0xff;
int oct4 = ((byte) (shft&0x000000ff)) & 0xff;
String submask = oct1+"."+oct2+"."+oct3+"."+oct4;
Run Code Online (Sandbox Code Playgroud)