Java 获取本机局域网内IP

主要涉及NetworkInterfaceEnumerationInetAddress等类

 /*
    获取本机网内地址
     */
    public static InetAddress getInet4Address(){
   
        try {
   
            //获取所有网络接口
            Enumeration<NetworkInterface> allNetworkInterfaces = NetworkInterface.getNetworkInterfaces();
            //遍历所有网络接口
            for(;allNetworkInterfaces.hasMoreElements();
### Java 实现扫描局域网内所有活动 IP 地址 为了实现这一功能,可以利用 `InetAddress` 和多线程技术来加速扫描过程。下面是一个完整的解决方案: #### 使用 InetAddress 类进行网络扫描 通过遍历指定子网中的每一个可能的 IP 地址,并尝试对其进行 ping 操作以检测其是否可达。 ```java import java.net.InetAddress; import java.util.ArrayList; import java.util.List; public class LanScanner { private static final int TIMEOUT_MS = 1000; // 超时时间设置为一秒 public static List<String> scanNetwork(String subnet) throws Exception { List<String> activeIps = new ArrayList<>(); for (int i = 1; i <= 254; i++) { String ipAddress = subnet + "." + i; InetAddress inetAddress = InetAddress.getByName(ipAddress); if (inetAddress.isReachable(TIMEOUT_MS)) { activeIps.add(ipAddress); } } return activeIps; } public static void main(String[] args) { try { List<String> activeIpList = scanNetwork("192.168.1"); System.out.println("Active IPs:"); for (String ip : activeIpList) { System.out.println(ip); } } catch (Exception e) { e.printStackTrace(); } } } ``` 此代码片段定义了一个名为 `LanScanner` 的类,其中包含了用于执行实际扫描工作的静态方法 `scanNetwork()` 。该函数接收一个表示目标子网前缀的字符串参数(例如:"192.168.1"),并返回一个包含所有响应 ICMP Echo 请求(即 "ping")成功的主机列表[^1]。 需要注意的是,在某些操作系统上运行上述程序之前可能需要管理员权限才能成功发送和接收 ICMP 数据包;另外,由于不同设备对于ICMP请求的支持情况各异,因此这种方法并不能保证能够发现所有的活跃节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员杰森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值