下面我将详细讲解 Java 实现局域网 IP 地址扫描的完整攻略。这里将会分为以下几个步骤:
下面我将详细讲解 Java 实现局域网 IP 地址扫描的完整攻略。这里将会分为以下几个步骤:
- 获取本机的 IP 地址
- 用正则表达式获取 IP 地址前缀
- 遍历 IP 地址前缀下的所有 IP 地址
- 发送 ICMP 包测试 IP 地址是否存活
下面分别进行讲解。
获取本机的 IP 地址
在 Java 中,我们可以通过调用 InetAddress.getLocalHost()
方法获取本机的 IP 地址,示例代码如下:
InetAddress addr = InetAddress.getLocalHost();
String localIp = addr.getHostAddress();
用正则表达式获取 IP 地址前缀
IP 地址前缀是指除了 IP 地址的最后一位数字外,其余所有数字的组合,例如 192.168.0 是一个 IP 地址前缀。我们需要通过正则表达式来提取出这个前缀。示例代码如下:
String regex = "\\d+\\.\\d+\\.\\d+\\.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(localIp);
String ipPrefix = "";
if (matcher.find()) {
ipPrefix = matcher.group();
}
遍历 IP 地址前缀下的所有 IP 地址
获取到 IP 地址前缀后,我们需要遍历这个前缀下的所有 IP 地址。可以通过循环来实现,例如:
for (int i = 1; i <= 255; i++) {
String ip = ipPrefix + i;
// 发送 ICMP 包测试 IP 地址是否存活
}
发送 ICMP 包测试 IP 地址是否存活
最后一步是判断 IP 地址是否存活。我们可以通过发送 ICMP 包来测试,如果该 IP 地址返回 ICMP 响应包,则说明这个 IP 地址存活。示例代码如下:
InetAddress address = InetAddress.getByName(ip);
if (address.isReachable(3000)) {
System.out.println(ip + " is UP");
} else {
System.out.println(ip + " is DOWN");
}
上述攻略的完整示例代码如下:
import java.net.InetAddress;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IpScanner {
public static void main(String[] args) throws Exception {
InetAddress addr = InetAddress.getLocalHost();
String localIp = addr.getHostAddress();
String regex = "\\d+\\.\\d+\\.\\d+\\.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(localIp);
String ipPrefix = "";
if (matcher.find()) {
ipPrefix = matcher.group();
}
for (int i = 1; i <= 255; i++) {
String ip = ipPrefix + i;
InetAddress address = InetAddress.getByName(ip);
if (address.isReachable(3000)) {
System.out.println(ip + " is UP");
} else {
System.out.println(ip + " is DOWN");
}
}
}
}
示例一:假设本机 IP 地址为 192.168.0.1,运行上述代码,将会输出以下结果:
192.168.0.1 is UP
192.168.0.2 is DOWN
192.168.0.3 is DOWN
...
192.168.0.255 is DOWN
示例二:假设本机 IP 地址为 10.0.0.1,运行上述代码,将会输出以下结果:
10.0.0.1 is UP
10.0.0.2 is DOWN
10.0.0.3 is DOWN
...
10.0.0.255 is DOWN
希望对你有所帮助。
沃梦达教程
本文标题为:Java实现局域网IP地址扫描


基础教程推荐
猜你喜欢
- jsp学习之scriptlet的使用方法详解 2023-07-30
- SpringBoot Test 多线程报错的根本原因(dataSource already closed) 2023-01-13
- Java编写实现窗体程序显示日历 2023-01-02
- Lombok同时使⽤@Data和@Builder踩坑总结 2022-11-25
- SpringBoot实现文件上传与下载功能的示例代码 2022-12-16
- java – 在不使用validate-on-match的情况下自动恢复Wildfly 8.2 for Oracle中的连接 2023-11-05
- JSP制作简单登录界面实例 2023-07-30
- 使用SpringBoot+EasyExcel+Vue实现excel表格的导入和导出详解 2023-04-23
- SpringBoot整合Freemarker实现页面静态化的详细步骤 2023-06-23
- 关于MyBatis中映射对象关系的举例 2023-01-24