JAVA里的PING是在JDK 1.5后用了新的函数isreachable去实现,具体介绍如下:
InetAddress对象的常用方法
InetAddress类有很多get方法,用来获取主机名,主机地址等信息。主要有:
byte[] getAddress() 返回次InetAddress对象的原始IP地址,保存为一个byte数组
String getCanonicalHostName() 获取此IP地址的完全限定域名
String getHostAddress() 获取IP地址的字符串,返回为一个String
String getHostName() 获取此IP地址的主机名
下面一个简单的例子展示这些方法的使用:
import java.net.InetAddress;
public class Example3 {
public static void main(String args[]) throws Exception {
InetAddress address = InetAddress.getByName("www.microsoft.com");
System.out.println("ip: " + address.getHostAddress());
System.out.println("host: " + address.getHostName());
System.out.println("canonical host name: "
+ address.getCanonicalHostName());
byte[] bytes = address.getAddress();
for (byte b : bytes) {
if (b >= 0)
System.out.print(b);
else
System.out.print(256 + b);
System.out.print(" ");
}
}
}
这个例子首先是获取www.microsoft.com的对应的InetAddress实例,然后分别打印 address.getHostAddress() address.getHostName()以及address.getCanonicalHostName()。在这个例子中,需要注意的是IP地址中,每一个都是0-255之间的,是无符号的。但是java中的byte表示的区域是-128~127,所以中间需要做一个转换。
结果如下:
ip: 65.55.12.249
host: www.microsoft.com
canonical host name: wwwco2vip.microsoft.com
65 55 12 249
1.2. InetAddress对象的其他实用方法
isReachable(int timeout) 测试是否能达到特定IP地址
isReachable(NetworkInterface netif,int ttl,int timeout)测试是否能达到特定IP地址,并且制定特定的NetworkInterface,ttl表示路由过程中的最大跳数,timeout是超时时间。一个简单的例子如下:
import java.net.InetAddress;
public class Example4 {
public static void main(String args[]) throws Exception {
InetAddress address1 = InetAddress.getLocalHost();
InetAddress address2 = InetAddress.getByName("www.baidu.com");
System.out.println(address1.isReachable(5000));
System.out.println(address2.isReachable(5000));
}
}
分别测试本机是否可达以及www.baidu.com是否可达。运行的结果是:
感觉奇怪么,前者是正常的,但是按理说www.baidu.com应该也是可达的,实际确实false,这个原因是因为isReachable的实现,通常是ICMP ECHO Request 或是尝试使用目标主机上的端口7进行连接,很有可能被防火墙拦截,所以会访问不到。
如果要TELNET的话,会比较准确,比如以下代码
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class CommonsTelnetTest {
public static void main(String [] args){
// TODO Auto-generated method stub
Socket server = null;
try {
server = new Socket();
InetSocketAddress address = new InetSocketAddress("smtp.126.com",25);
server.connect(address, 5000);
System.out.println("ok!");
}
catch (UnknownHostException e) {
System.out.println("wrong!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("wrong");
e.printStackTrace();}
}
}
分享到:
相关推荐
java ping ip ping命令 ping工具类 支持linux和windows等所有平台 Ping是Windows下的一个命令 在Unix和Linux下也有这个命令。 ping也属于一个通信协议,是TCP/IP协议的一部分 利用“ping”命令可以检查网络是否连通...
此项目是spring boot+thymeleaf+maven的Java实现ping命令的功能以及端口检测是否开放的功能
用java实现ping的几种方式:纯Java实现ICMP的ping命令,JAVA调用外部EXE实现PING功能,ICMP Ping in Java(JDK 1.5 and above),最简单的办法,直接调用CMD
资源包含:课程报告word+源码 编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/127039936
很好的一个java实现的ping功能,适合初学者学习使用,相互学习,相互交流啊
基于java的Udp_Ping,很简单的计算机网络课设
java实现ping.pdf
java定时ping命令程序
批量PingTelnet检测
java调用jpcap实现ping功能代码
java 实现 ping 操作,检查网络情况
一段JAVA代码 实现ping功能 import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.nio.channels.SocketChannel;
自己做的java调用ping命令实例 地址使用的是套接字地址 ping的主机用sping注入
针对一个网段,指定端口的批量ping及telnet工具,适合用于测试一个网段的机器有没有开放特定端口,检测是否打开某软件或开放了某端口。
TCP-Ping_ping_TCP,IP_JAVAping_java_源码.zip
基于控制台输出的ping程序java实现
使用Java语言开发 基于ICMP协议 仿Windows系统的Ping程序 简单实现 使用了Jpcap 计算机网络课程设计的作业
使用批处理实现telnet自动登陆并执行ping命令
自动运维,只要把要PING的IP放在C盘的ip.txt中,格式每行一个IP地址即可。运行程序后,控制台会输出结果,显示通或者不通,也会把结果输出到C盘的result.txt,里面包括每个IP是否通,并且有哪一个日期时间去ping的。...