Java测试网络连通性

第一种方式:利用java运行时:

Java代码  

  1. /**
  2. * test network
  3. * @param ip
  4. */
  5. private void getNetworkState(String ip) {
  6. Runtime runtime = Runtime.getRuntime();
  7. try {
  8. log.info("=================正在测试网络连通性ip:"+ip);
  9. Process process = runtime.exec("ping " +ip);
  10. InputStream iStream = process.getInputStream();
  11. InputStreamReader iSReader = new InputStreamReader(iStream,"UTF-8");
  12. BufferedReader bReader = new BufferedReader(iSReader);
  13. String line = null;
  14. StringBuffer sb = new StringBuffer();
  15. while ((line = bReader.readLine()) != null) {
  16. sb.append(line);
  17. }
  18. iStream.close();
  19. iSReader.close();
  20. bReader.close();
  21. String result  = new String(sb.toString().getBytes("UTF-8"));
  22. log.info("ping result:"+result);
  23. if (!StringUtils.isBlank(result)) {
  24. if (result.indexOf("TTL") > 0 || result.indexOf("ttl") > 0) {
  25. log.info("网络正常,时间: " + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
  26. } else {
  27. log.info("网络断开,时间 :" + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
  28. }
  29. }
  30. } catch (Exception e) {
  31. log.error("网络异常:"+e.getMessage());
  32. e.printStackTrace();
  33. }
  34. }

在windows平台上,上面代码没有为,ping ip 会结束,而在linux环境中ping命令,ping不通时, 
会卡住,ping通,会不定的输出信息,考虑用另一种方式socket。 下载
第二种方式socket:

Java代码  

  1. package com.util.network;
  2. import java.io.IOException;
  3. import java.net.InetAddress;
  4. import java.net.InetSocketAddress;
  5. import java.net.NetworkInterface;
  6. import java.net.Socket;
  7. import java.net.SocketAddress;
  8. import java.net.SocketException;
  9. import java.net.UnknownHostException;
  10. import java.util.Enumeration;
  11. import org.apache.commons.lang.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. /**
  15. * 测试网络连通性
  16. *
  17. * @author donald
  18. *
  19. */
  20. public class NetworkHelper {
  21. private static Logger log = LoggerFactory.getLogger(NetworkHelper.class);
  22. private static NetworkHelper instance = null;
  23. public static synchronized NetworkHelper getInstance(){
  24. if(instance == null){
  25. instance = new NetworkHelper();
  26. }
  27. return instance;
  28. }
  29. 下载
  30. /**
  31. * 测试本地能否ping ip
  32. *
  33. * @param ip
  34. * @return
  35. */
  36. public boolean isReachIp(String ip) {
  37. boolean isReach = false;
  38. try {
  39. InetAddress address = InetAddress.getByName(ip);// ping this IP
  40. if (address instanceof java.net.Inet4Address) {
  41. log.info(ip + " is ipv4 address");
  42. } else if (address instanceof java.net.Inet6Address) {
  43. log.info(ip + " is ipv6 address");
  44. } else {
  45. log.info(ip + " is unrecongized");
  46. }
  47. if (address.isReachable(5000)) {
  48. isReach = true;
  49. log.info("SUCCESS - ping " + ip
  50. + " with no interface specified");
  51. } else {
  52. isReach = false;
  53. log.info("FAILURE - ping " + ip
  54. + " with no interface specified");
  55. }
  56. } catch (Exception e) {
  57. log.error("error occurs:" + e.getMessage());
  58. }
  59. return isReach;
  60. }
  61. /**
  62. * 测试本地所有的网卡地址都能ping通 ip
  63. *
  64. * @param ip
  65. * @return
  66. */
  67. public  boolean isReachNetworkInterfaces(String ip) {
  68. boolean isReach = false;
  69. try {
  70. InetAddress address = InetAddress.getByName(ip);// ping this IP
  71. if (address instanceof java.net.Inet4Address) {
  72. log.info(ip + " is ipv4 address");
  73. } else if (address instanceof java.net.Inet6Address) {
  74. log.info(ip + " is ipv6 address");
  75. } else {
  76. log.info(ip + " is unrecongized");
  77. }
  78. if (address.isReachable(5000)) {
  79. isReach = true;
  80. log.info("SUCCESS - ping " + ip
  81. + " with no interface specified");
  82. } else {
  83. isReach = false;
  84. log.info("FAILURE - ping " + ip
  85. + " with no interface specified");
  86. }
  87. if (isReach) {
  88. log.info("-------Trying different interfaces--------");
  89. Enumeration<NetworkInterface> netInterfaces = NetworkInterface
  90. .getNetworkInterfaces();
  91. while (netInterfaces.hasMoreElements()) {
  92. NetworkInterface ni = netInterfaces.nextElement();
  93. log.info("Checking interface, DisplayName:"
  94. + ni.getDisplayName() + ", Name:" + ni.getName());
  95. if (address.isReachable(ni, 0, 5000)) {
  96. isReach = true;
  97. log.info("SUCCESS - ping " + ip);
  98. } else {
  99. isReach = false;
  100. log.info("FAILURE - ping " + ip);
  101. }
  102. Enumeration<InetAddress> ips = ni.getInetAddresses();
  103. while (ips.hasMoreElements()) {
  104. log.info("IP: " + ips.nextElement().getHostAddress());
  105. }
  106. log.info("-----------------check now NetworkInterface is done--------------------------");
  107. }
  108. }
  109. } catch (Exception e) {
  110. log.error("error occurs:" + e.getMessage());
  111. }
  112. return isReach;
  113. }
  114. 下载
  115. /**
  116. * 获取能与远程主机指定端口建立连接的本机ip地址
  117. * @param remoteAddr
  118. * @param port
  119. * @return
  120. */
  121. public  String getReachableIP(InetAddress remoteAddr, int port) {
  122. String retIP = null;
  123. Enumeration<NetworkInterface> netInterfaces;
  124. try {
  125. netInterfaces = NetworkInterface.getNetworkInterfaces();
  126. while (netInterfaces.hasMoreElements()) {
  127. NetworkInterface ni = netInterfaces.nextElement();
  128. Enumeration<InetAddress> localAddrs = ni.getInetAddresses();
  129. while (localAddrs.hasMoreElements()) {
  130. InetAddress localAddr = localAddrs.nextElement();
  131. if (isReachable(localAddr, remoteAddr, port, 5000)) {
  132. retIP = localAddr.getHostAddress();
  133. break;
  134. }
  135. }
  136. }
  137. } catch (SocketException e) {
  138. log.error("Error occurred while listing all the local network addresses:"
  139. + e.getMessage());
  140. }
  141. if (retIP == null) {
  142. log.info("NULL reachable local IP is found!");
  143. } else {
  144. log.info("Reachable local IP is found, it is " + retIP);
  145. }
  146. return retIP;
  147. }
  148. /**
  149. * 获取能与远程主机指定端口建立连接的本机ip地址
  150. * @param remoteIp
  151. * @param port
  152. * @return
  153. */
  154. public  String getReachableIP(String remoteIp, int port) {
  155. String retIP = null;
  156. InetAddress remoteAddr = null;
  157. Enumeration<NetworkInterface> netInterfaces;
  158. try {
  159. remoteAddr = InetAddress.getByName(remoteIp);
  160. netInterfaces = NetworkInterface.getNetworkInterfaces();
  161. while (netInterfaces.hasMoreElements()) {
  162. NetworkInterface ni = netInterfaces.nextElement();
  163. Enumeration<InetAddress> localAddrs = ni.getInetAddresses();
  164. while (localAddrs.hasMoreElements()) {
  165. InetAddress localAddr = localAddrs.nextElement();
  166. if (isReachable(localAddr, remoteAddr, port, 5000)) {
  167. retIP = localAddr.getHostAddress();
  168. break;
  169. }
  170. }
  171. }
  172. } catch (UnknownHostException e) {
  173. log.error("Error occurred while listing all the local network addresses:"+ e.getMessage());
  174. }catch (SocketException e) {
  175. log.error("Error occurred while listing all the local network addresses:"+ e.getMessage());
  176. }
  177. if (retIP == null) {
  178. log.info("NULL reachable local IP is found!");
  179. } else {
  180. log.info("Reachable local IP is found, it is " + retIP);
  181. }
  182. return retIP;
  183. }  下载
  184. /**
  185. * 测试localInetAddr能否与远程的主机指定端口建立连接相连
  186. *
  187. * @param localInetAddr
  188. * @param remoteInetAddr
  189. * @param port
  190. * @param timeout
  191. * @return
  192. */
  193. public  boolean isReachable(InetAddress localInetAddr,
  194. InetAddress remoteInetAddr, int port, int timeout) {
  195. boolean isReachable = false;
  196. Socket socket = null;
  197. try {
  198. socket = new Socket();
  199. // 端口号设置为 0 表示在本地挑选一个可用端口进行连接
  200. SocketAddress localSocketAddr = new InetSocketAddress(
  201. localInetAddr, 0);
  202. socket.bind(localSocketAddr);
  203. InetSocketAddress endpointSocketAddr = new InetSocketAddress(
  204. remoteInetAddr, port);
  205. socket.connect(endpointSocketAddr, timeout);
  206. log.info("SUCCESS - connection established! Local: "
  207. + localInetAddr.getHostAddress() + " remote: "
  208. + remoteInetAddr.getHostAddress() + " port" + port);
  209. isReachable = true;
  210. } catch (IOException e) {
  211. log.error("FAILRE - CAN not connect! Local: "
  212. + localInetAddr.getHostAddress() + " remote: "
  213. + remoteInetAddr.getHostAddress() + " port" + port);
  214. } finally {
  215. if (socket != null) {
  216. try {
  217. socket.close();
  218. } catch (IOException e) {
  219. log.error("Error occurred while closing socket:"
  220. + e.getMessage());
  221. }
  222. }
  223. }
  224. return isReachable;
  225. }
  226. /**
  227. * 测试localIp能否与远程的主机指定端口建立连接相连
  228. *
  229. * @param localIp
  230. * @param remoteIp
  231. * @param port
  232. * @param timeout
  233. * @return
  234. */
  235. public  boolean isReachable(String localIp, String remoteIp,
  236. int port, int timeout) {
  237. boolean isReachable = false;
  238. Socket socket = null;
  239. InetAddress localInetAddr = null;
  240. InetAddress remoteInetAddr = null;
  241. try {
  242. localInetAddr = InetAddress.getByName(localIp);
  243. remoteInetAddr = InetAddress.getByName(remoteIp);
  244. socket = new Socket();
  245. // 端口号设置为 0 表示在本地挑选一个可用端口进行连接
  246. SocketAddress localSocketAddr = new InetSocketAddress(
  247. localInetAddr, 0);
  248. socket.bind(localSocketAddr);
  249. InetSocketAddress endpointSocketAddr = new InetSocketAddress(
  250. remoteInetAddr, port);
  251. socket.connect(endpointSocketAddr, timeout);
  252. log.info("SUCCESS - connection established! Local: "
  253. + localInetAddr.getHostAddress() + " remote: "
  254. + remoteInetAddr.getHostAddress() + " port" + port);
  255. isReachable = true;
  256. } catch (IOException e) {
  257. log.error("FAILRE - CAN not connect! Local: "
  258. + localInetAddr.getHostAddress() + " remote: "
  259. + remoteInetAddr.getHostAddress() + " port" + port);
  260. } finally {
  261. if (socket != null) {
  262. try {
  263. socket.close();
  264. } catch (IOException e) {
  265. log.error("Error occurred while closing socket:"
  266. + e.getMessage());
  267. }
  268. }
  269. }
  270. return isReachable;
  271. }
  272. public static void main(String[] args) {
  273. if(NetworkHelper.getInstance().isReachIp("192.168.126.128")){
  274. log.info("=======本机可以ping通ip:"+"192.168.126.128");
  275. }
  276. else{
  277. log.info("=======本机ping不通ip:"+"192.168.126.128");
  278. }
  279. if(NetworkHelper.getInstance().isReachNetworkInterfaces("192.168.126.128")){
  280. log.info("=======本机所有网卡可以ping通ip:"+"192.168.126.128");
  281. }
  282. else{
  283. log.info("=======本机所有网卡ping不通ip:"+"192.168.126.128");
  284. }
  285. String localIp = NetworkHelper.getInstance().getReachableIP("192.168.126.128",8081);
  286. if(!StringUtils.isBlank(localIp)){
  287. log.info("=======本机可以与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP:"+localIp);
  288. }
  289. else{
  290. log.info("=======本机不能与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP");
  291. }
  292. }
  293. }
时间: 2024-12-20 12:46:30

Java测试网络连通性的相关文章

java测试网络连接是否成功并设置超时时间

/** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override public String getRMIJkzt() { final ExecutorService es = Executors.newFixedThreadPool(1); Callable<String> callable = new Callable<String>() {//使

测试openstack neutron的网络连通性

测试openstack网络连通性,方式如下: 1.openstack控制端执行nova list 查看VM对应的名称和VM_UUID. 2.openstack控制端执行nova show $VM_UUID,查看VM所在的openstack compute node信息和instance name. 3.登录到openstack compute node,执行virsh list 查看VM状态,执行virsh dumpxml instance-XXXX查找文件中的关于"Bridge"信息

利用netperf、iperf、mtr测试网络

1.netperf安装和使用 netperf安装 # tar -xzvf netperf-2.7.0.tar.gz # cd netperf-2.7.0 # ./configure # make # make install 在客户端和服务器上都安装好. netperf使用 首先在服务器端运行netserver. #./netserver -p 49152 -L 172.18.0.14 Starting netserver with host '172.18.0.14' port '49152'

JAVA测试编程知识点

JAVA测试编程会涉及的知识点: 1.      testNg框架 2.      http协议和HttpClient. 在依据http头进行不同数据解析: Transfer-Encoding:chunked 在chunked 为ture时接口分段传数据怎么解析处理 chunked 不为ture时接口测试已可以处理. Content-Encoding: gzip 接口数据压缩的怎么解析处理 结合Transfer-Encoding:chunked为ture时接口数据怎么解析处理 不同Content

使用iperf测试网络性能

iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动.丢包率.最大段和最大传输单元大小等统计信息:从而能够帮助我们测试网络性能,定位网络瓶颈.iperf是开源的,源代码可以从http://sourceforge.net/projects/iperf/下载. 1.    iperf能够做什么 提起iperf,想必大家都知道它是用了测试网络性能的.具体说来,Iperf是美国伊利诺斯大学(University of Illinois)开发的一种开源的网络

Java NIO 网络编程基础

Java NIO提供了一套网络api,可以用来处理连接数很多的情况.他的基本思想就是用一个线程来处理多个channel. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899

Java测试感受

Java测试感想 这周四是我们的Java语言课,这也是我们第一节课,我们进行了一次考试.通过一个暑假的时间,让我们去自学Java,这也是对我们的一次考验. 开始的时候,老师让我们编了一个比暑假的题还要难得程序,刚开始没有头绪,不知道该怎么写,而且还用了文件,感觉特别难.自己也是对照着之前写的程序,编了半天,也是写了最基本的,感觉自己有好多的地方都不会,这个程序和暑假的时候写的程序差不多,但是自己还是不会,还用百度搜索了一些程序用了将近半天的时间,也没写多少. 有一个地方是让判断输入的数是否为整数

Java基本网络支持

1.Java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了 以编程方式访问WEB服务 的功能: 2.URLDecoder.URLEncoder提供了 普通字符串 和 application/x-www-form-urlencoded MIME字符串 相互转换的静态方法: 3.[InetAddress] 1.1 Java使用InetAddress代表IP地址,InetAddress有2个子类:Inet4Address.Inet6Address 1.2 In

Windows批处理:自动检查网络连通性

检测网络连通性我用的是丛远到近的方法,即"外网--网关--内网--本机",脚本的实现也是根据这个顺序用ping来检测,为提高检测速度,这里我只ping了2次,各位可以根据自己的需要进行修改. 使用方法大神们都会的... 复制代码,另存为.bat文件后执行. @echo off color 2F title 网络连通性检测 echo. echo. ping -n 2 223.5.5.5>%temp%\1.ping & ping -n 2 223.6.6.6>>%