java实现ICMP协议的ping功能
程序员文章站
2022-07-13 23:47:24
...
package com.beijia.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Ping {
public static boolean ping(String ipAddress) throws Exception{
int timeOut=3000;
boolean status=InetAddress.getByName(ipAddress).isReachable(timeOut); // 当返回值是true时,说明host是可用的
return status;
}
public static void ping02(String ipAddress){
String line=null;
try {
Process pro=Runtime.getRuntime().exec("ping "+ipAddress);
BufferedReader buf=new BufferedReader(new InputStreamReader(pro.getInputStream()));
while((line=buf.readLine())!=null){
System.out.println(line);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static boolean ping(String ipAddress,int pingTimes,int timeOut){
BufferedReader in=null;
Runtime r=Runtime.getRuntime();
String pingCommand="ping "+ipAddress+" -n "+pingTimes+" -w "+timeOut;
try {//执行命令并获取输出
System.out.println(pingCommand);
Process p=r.exec(pingCommand);
if(p==null){
return false;
}
in=new BufferedReader(new InputStreamReader(p.getInputStream()));
int connectedCount=0;
String line=null;
while((line=in.readLine())!=null){
connectedCount+=getCheckResult(line);
}//如果出现类似=20ms TTL=22这样的字符,出现的次数=测试次数 则返回真
return connectedCount==pingTimes;
} catch (Exception e) {
e.printStackTrace();//出现异常则返回假
return false;
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
private static int getCheckResult(String line){
Pattern pattern=Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(line);
while(matcher.find()){
return 1;
}
return 0;
}
public static void main(String[] args) throws Exception{
String ipAddress="192.168.20.58";
System.out.println(ping(ipAddress));
ping02(ipAddress);
System.out.println(ping(ipAddress,5,5000));
}
}
上一篇: python 字节串与报文
下一篇: 模拟实现Ping
推荐阅读
-
利用java序列化实现基于文件的快速索引 博客分类: 干货 序列化与反序列化快速索引Java数据保存协议
-
求好手,看这个功能能否通过php实现(php直接接受tcp协议的tcp格式数据)
-
求好手,看这个功能能否通过php实现(php直接接受tcp协议的tcp格式数据)
-
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
-
Java Web 网络商城案例演示十六 订单详情功能(支付功能的实现使用易付宝)
-
基于spring-boot和docker-java实现对docker容器的动态管理和监控功能[附完整源码下载]
-
Java 实现拦截器Interceptor的拦截功能方式
-
Java实现评论回复功能的完整步骤
-
Java实现的时间戳与date对象相互转换功能示例
-
Java实现简单的分页功能