标签:扫描器 String ip ping System 局域网 IP println out
局域网IP扫描器(简单多线程版)
起因:树莓派烧录系统之后没有显示器,想查找出来同一局域网下的IP
一、获取本机IP
InetAddress host = null;
try {
host = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("本机网段获取失败");
}
二、截取拼接本机网段
String hostAddress = host.getHostAddress();
System.out.println("本机ip为:" + hostAddress);
String[] split = hostAddress.split("\\.");
String segment = split[0] + "." + split[1] + "." + split[2] + ".";
三、构造ping方法
class pingIP {
public void ping(String ip){
try {
// 模拟cmd
Process p = Runtime.getRuntime().exec("ping " + ip);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"GBK"));
while (br.readLine() != null){
// 如果包含TTL就是成功
if (br.readLine().contains("TTL")){
System.out.println(ip);
sb.append(ip);
}else if (br.readLine().contains("无法访问")){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("ping方法IO异常");
}catch (NullPointerException e){
e.printStackTrace();
System.out.println("ping方法空指针异常");
}
}
}
四、重写run方法
public void run() {
pingIP pingIP = new pingIP();
pingIP.ping(ip);
}
五、遍历
for (int i = 0; i < 255; i++) {
sniffer ss = new sniffer(segment + i);
new Thread(ss).start();
}
完整项目代码
package TestBasis.lanSniffing;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* @ClassName: sniffer
* @Description:
* @Author: 无心
* @Date: 2021-02-09 14:24
* @Version: 1.0
**/
public class sniffer implements Runnable{
private StringBuffer sb = new StringBuffer();
private String ip;
public sniffer(String ip) {
this.ip = ip;
}
public void run() {
pingIP pingIP = new pingIP();
pingIP.ping(ip);
}
public static void main(String[] args) {
System.out.println("获取本机网段中...");
InetAddress host = null;
try {
host = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("本机网段获取失败");
}
String hostAddress = host.getHostAddress();
System.out.println("本机ip为:" + hostAddress);
String[] split = hostAddress.split("\\.");
String segment = split[0] + "." + split[1] + "." + split[2] + ".";
System.out.println("局域网设备扫描器开始运行,以下ip皆为局域网设备:");
for (int i = 0; i < 255; i++) {
sniffer ss = new sniffer(segment + i);
new Thread(ss).start();
}
}
class pingIP {
public void ping(String ip){
try {
// 模拟cmd的ping
Process p = Runtime.getRuntime().exec("ping " + ip);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"GBK"));
while (br.readLine() != null){
// 如果包含TTL就是成功
if (br.readLine().contains("TTL")){
System.out.println(ip);
sb.append(ip);
}else if (br.readLine().contains("无法访问")){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("ping方法IO异常");
}catch (NullPointerException e){
e.printStackTrace();
System.out.println("ping方法空指针异常");
}
}
}
}
标签:扫描器,String,ip,ping,System,局域网,IP,println,out 来源: https://www.cnblogs.com/ctks/p/14401624.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。