java代码实现ping命令(支持linux系统)
2016-11-13 12:38
441 查看
一.检测当前操作系统的类型
String osName = System.getProperty("os.name");//获取操作系统类型 String command = ""; if(osName.contains("Linux")){ command = "ping -c 100 -i 0"+ip; }else if{ command = "ping -n 5 -w 1000"+ip; } Properties props=System.getProperties(); //获得系统属性集 String osName = props.getProperty("os.name"); //操作系统名称 String osArch = props.getProperty("os.arch"); //操作系统构架 String osVersion = props.getProperty("os.version"); //操作系统版本
二.Linux和Windows的ping指令介绍
.Ping命令通过发送Internet控制消息协议(ICMP)回响请求消息来验证与另一台TCP/IP计算机的IP级连接.Ping命令一般用于检测网络通与不通,也叫延时,其值越大,速度越慢PING(PacketInternetGroupe),因特网包探索器,用于测试网络连接量的程序。
.Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。它是用来检查网络是否通畅或者网络连接速度的命令。
.原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。
Ping的工作流程
.1,在同一网段内.ping
.主机A——————>主机B
.ICMP请求包
.在本机(主机A)查找ARP缓存表查找主机B的IP与其对应的MAC,
.没有找到主机B的IP与其MAC的映射关系,则发送一个arp请求广播。
.主机B接受到arp请求包后,回复一个arp应答包(里面包含本机的MAC),
.主机A<—————主机B
.ICMP应答包
.2,不在同一网段
.在主机A上运行“ping主机C(不在同一网段)”后,开始跟上面一样,到了怎样得到MAC地址时,IP协议通过计算发现C机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的MAC取出来,至于怎样得到路由的MAC,跟上面一样,先在ARP缓存表找,找不到就广播包,路由得到这个数据帧后,再跟主机c进行联系,如果找不到,就向主机A返回一个超时的信息。
Linux的ping命令的使用
.ping命令的一般格式为:ping[-dfnqrRv][-c发送次数][-i间隔秒数][-I网络界面][-l前置载入][-p范本样式][-s数据包大小][-t存活数值][主机名或IP地址]
【-ccount】指定要被发送(或接收)的回送信号请求的数目,由Count变量指出。
【-wtimeout】这个选项仅和-c选项一起才能起作用。它使ping命令以最长的超时时间去等待应答(发送最后一个信息包后)。默认超时时间为4000ms(4s)
【-d】使用Socket的SO_DEBUG功能
http://blog.csdn.net/zhangxinrun/article/details/7207733
三.ping命令的Java代码
Runtime runtime = Runtime.getRuntime(); Process process; InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is,Charset.forName("GBK")); BufferedReader br = new BufferedReader(isr); String line=""; String status = ""; String packetLoss = ""; String timeout = ""; while ((line = br.readLine())!=null){ Boolean bl = !"".equals(line); //英语Linux OS if(line.indexOf("packet loss")!=-1 && b1){ String[] str = line.split(","); packetLoss = str[2].replace("packet loss","").trim(); status = ip+":----->丢包率:"+packetLoss; }else if(line.indexOf("min/avg/max/mdev") !=-1&&b1){ timeout = line.split("=")[1].split("/")[1]; status+="----->延时:"+timeout 4000 +"ms" } //中文windows os else if(line.indexOf("丢失") !=-1&&b1){ packetLoss = line.subString(line.indexOf("(")+1,line.indexOf(")").repalce("丢失","").replace("%","").trim()) }else if(line.indexOf("平均")!=-1&&b1){ timeout = line.substring(line.indexof("平均").split("=")[1].trim()) } }
个人总结:项目中我需要事先监控一个IP得网络链接情况,开始不懂这样写的原理,后来写完后我明白了,其实java实现ping命令就是在cmd执行ping命令,通过java方法启动cmd执行ping命令,然后解析成自己想要的结果。
相关文章推荐
- "源文件名长度大于文件系统支持的长度无法删除"的解决方案(Java代码实现)
- 用java取得linux系统cpu、内存的实时信息(参考别人代码)
- linux 系统调用中断劫持实现—原理和代码
- 蚊子132 开始实现支持LINUX系统
- Android 系统重启与关机:Java 代码实现(3)
- java代码实现鼠标双击出现画图-----------paint()方法由系统自动调用,且一定是小写的字母p
- linux系统调用实现代码分析
- newxy+struts实现零java代码或极少java代码开发以数据为中心的web运用系统 作者:胡立新
- linux系统管理客户端2--串口实现测试代码编写
- JAVA实现简单系统登陆注册模块的设计(附详细代码分析)
- (一个代码学会c语言操作数据库)linux上通过c语言操作数据库实现基本的学生信息管理系统(增、删、查、改‘显示)
- java代码实现弹出系统关机界面,关机菜单
- android 系统重启与关机:java 代码实现
- Java代码在Window或Linux系统下使用通用分割符来分割路径
- Java下类似QQ截图的实现,支持热键,系统托盘
- android 系统重启与关机:java 代码实现
- 移植linux系统到QQ2440V3之二(修改内核实现对yaffs的支持)
- 在linux系统下实现音视频即时通讯的部分代码
- 在java代码中取出linux中export的变量;读取系统现有的property,添加或覆盖...
- android 系统重启与关机:java 代码实现