Java,获取子网掩码

    昨天写代码写到一半,突然想到,之前测试的时候都是手动输入子网掩码的,因而想着如何自动获得子网掩码,于是就google了下,发现确实是有这方面的东西,可能我是自己比较笨,看不懂别人的代码,也因为找到的代码很少注释(这可能是中国人写程序的习惯),所以我就不想再看了,但是多少还是有点启发的,查看了jdk以后,知道可以通过NetworkInterface、InterfaceAddress这两个类来实现,可以获得子网掩码前缀,然后通过运算就能得到子网掩码,要说明的是,我计算掩码的方法很土但是很好用,代码也很容易看的懂,还有一个要说明的是,我是xp系统,没有安装ipv6协议,因为安装了ipv6后会有多个结果

代码:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用Java中的InetAddress和NetworkInterface类来获取子网掩码。 以下是一个示例代码: ``` import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; public class SubnetMaskExample { public static void main(String[] args) throws SocketException { Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces(); while (interfaceList.hasMoreElements()) { NetworkInterface iface = interfaceList.nextElement(); Enumeration<InetAddress> addrList = iface.getInetAddresses(); while (addrList.hasMoreElements()) { InetAddress address = addrList.nextElement(); if (!address.isLinkLocalAddress() && !address.isLoopbackAddress() && address instanceof java.net.Inet4Address) { System.out.println("IP地址:" + address.getHostAddress()); System.out.println("子网掩码:" + getSubnetMask(iface)); } } } } public static String getSubnetMask(NetworkInterface iface) throws SocketException { Enumeration<InetAddress> addrList = iface.getInetAddresses(); while (addrList.hasMoreElements()) { InetAddress address = addrList.nextElement(); if (!address.isLinkLocalAddress() && !address.isLoopbackAddress() && address instanceof java.net.Inet4Address) { short prefixLength = iface.getInterfaceAddresses().get(0).getNetworkPrefixLength(); int mask = 0xffffffff << (32 - prefixLength); byte[] bytes = new byte[] {(byte) (mask >>> 24), (byte) (mask >> 16 & 0xff), (byte) (mask >> 8 & 0xff), (byte) (mask & 0xff)}; try { return InetAddress.getByAddress(bytes).getHostAddress(); } catch (Exception e) { e.printStackTrace(); } } } return null; } } ``` 该代码会遍历所有的网络接口,获取每个接口的IP地址和子网掩码。需要注意的是,获取子网掩码需要根据网络前缀长度进行计算,这里使用了Java中的位运算来实现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值