第一种方式:利用java运行时:
Java代码
- /**
- * test network
- * @param ip
- */
- private void getNetworkState(String ip) {
- Runtime runtime = Runtime.getRuntime();
- try {
- log.info("=================正在测试网络连通性ip:"+ip);
- Process process = runtime.exec("ping " +ip);
- InputStream iStream = process.getInputStream();
- InputStreamReader iSReader = new InputStreamReader(iStream,"UTF-8");
- BufferedReader bReader = new BufferedReader(iSReader);
- String line = null;
- StringBuffer sb = new StringBuffer();
- while ((line = bReader.readLine()) != null) {
- sb.append(line);
- }
- iStream.close();
- iSReader.close();
- bReader.close();
- String result = new String(sb.toString().getBytes("UTF-8"));
- log.info("ping result:"+result);
- if (!StringUtils.isBlank(result)) {
- if (result.indexOf("TTL") > 0 || result.indexOf("ttl") > 0) {
- log.info("网络正常,时间: " + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
- } else {
- log.info("网络断开,时间 :" + TimeUtil.getCurDate("yyyy-mm-dd hh:mm:ss"));
- }
- }
- } catch (Exception e) {
- log.error("网络异常:"+e.getMessage());
- e.printStackTrace();
- }
- }
在windows平台上,上面代码没有为,ping ip 会结束,而在linux环境中ping命令,ping不通时,
会卡住,ping通,会不定的输出信息,考虑用另一种方式socket。 下载
第二种方式socket:
Java代码
- package com.util.network;
- import java.io.IOException;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.NetworkInterface;
- import java.net.Socket;
- import java.net.SocketAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- import java.util.Enumeration;
- import org.apache.commons.lang.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- * 测试网络连通性
- *
- * @author donald
- *
- */
- public class NetworkHelper {
- private static Logger log = LoggerFactory.getLogger(NetworkHelper.class);
- private static NetworkHelper instance = null;
- public static synchronized NetworkHelper getInstance(){
- if(instance == null){
- instance = new NetworkHelper();
- }
- return instance;
- }
- 下载
- /**
- * 测试本地能否ping ip
- *
- * @param ip
- * @return
- */
- public boolean isReachIp(String ip) {
- boolean isReach = false;
- try {
- InetAddress address = InetAddress.getByName(ip);// ping this IP
- if (address instanceof java.net.Inet4Address) {
- log.info(ip + " is ipv4 address");
- } else if (address instanceof java.net.Inet6Address) {
- log.info(ip + " is ipv6 address");
- } else {
- log.info(ip + " is unrecongized");
- }
- if (address.isReachable(5000)) {
- isReach = true;
- log.info("SUCCESS - ping " + ip
- + " with no interface specified");
- } else {
- isReach = false;
- log.info("FAILURE - ping " + ip
- + " with no interface specified");
- }
- } catch (Exception e) {
- log.error("error occurs:" + e.getMessage());
- }
- return isReach;
- }
- /**
- * 测试本地所有的网卡地址都能ping通 ip
- *
- * @param ip
- * @return
- */
- public boolean isReachNetworkInterfaces(String ip) {
- boolean isReach = false;
- try {
- InetAddress address = InetAddress.getByName(ip);// ping this IP
- if (address instanceof java.net.Inet4Address) {
- log.info(ip + " is ipv4 address");
- } else if (address instanceof java.net.Inet6Address) {
- log.info(ip + " is ipv6 address");
- } else {
- log.info(ip + " is unrecongized");
- }
- if (address.isReachable(5000)) {
- isReach = true;
- log.info("SUCCESS - ping " + ip
- + " with no interface specified");
- } else {
- isReach = false;
- log.info("FAILURE - ping " + ip
- + " with no interface specified");
- }
- if (isReach) {
- log.info("-------Trying different interfaces--------");
- Enumeration<NetworkInterface> netInterfaces = NetworkInterface
- .getNetworkInterfaces();
- while (netInterfaces.hasMoreElements()) {
- NetworkInterface ni = netInterfaces.nextElement();
- log.info("Checking interface, DisplayName:"
- + ni.getDisplayName() + ", Name:" + ni.getName());
- if (address.isReachable(ni, 0, 5000)) {
- isReach = true;
- log.info("SUCCESS - ping " + ip);
- } else {
- isReach = false;
- log.info("FAILURE - ping " + ip);
- }
- Enumeration<InetAddress> ips = ni.getInetAddresses();
- while (ips.hasMoreElements()) {
- log.info("IP: " + ips.nextElement().getHostAddress());
- }
- log.info("-----------------check now NetworkInterface is done--------------------------");
- }
- }
- } catch (Exception e) {
- log.error("error occurs:" + e.getMessage());
- }
- return isReach;
- }
- 下载
- /**
- * 获取能与远程主机指定端口建立连接的本机ip地址
- * @param remoteAddr
- * @param port
- * @return
- */
- public String getReachableIP(InetAddress remoteAddr, int port) {
- String retIP = null;
- Enumeration<NetworkInterface> netInterfaces;
- try {
- netInterfaces = NetworkInterface.getNetworkInterfaces();
- while (netInterfaces.hasMoreElements()) {
- NetworkInterface ni = netInterfaces.nextElement();
- Enumeration<InetAddress> localAddrs = ni.getInetAddresses();
- while (localAddrs.hasMoreElements()) {
- InetAddress localAddr = localAddrs.nextElement();
- if (isReachable(localAddr, remoteAddr, port, 5000)) {
- retIP = localAddr.getHostAddress();
- break;
- }
- }
- }
- } catch (SocketException e) {
- log.error("Error occurred while listing all the local network addresses:"
- + e.getMessage());
- }
- if (retIP == null) {
- log.info("NULL reachable local IP is found!");
- } else {
- log.info("Reachable local IP is found, it is " + retIP);
- }
- return retIP;
- }
- /**
- * 获取能与远程主机指定端口建立连接的本机ip地址
- * @param remoteIp
- * @param port
- * @return
- */
- public String getReachableIP(String remoteIp, int port) {
- String retIP = null;
- InetAddress remoteAddr = null;
- Enumeration<NetworkInterface> netInterfaces;
- try {
- remoteAddr = InetAddress.getByName(remoteIp);
- netInterfaces = NetworkInterface.getNetworkInterfaces();
- while (netInterfaces.hasMoreElements()) {
- NetworkInterface ni = netInterfaces.nextElement();
- Enumeration<InetAddress> localAddrs = ni.getInetAddresses();
- while (localAddrs.hasMoreElements()) {
- InetAddress localAddr = localAddrs.nextElement();
- if (isReachable(localAddr, remoteAddr, port, 5000)) {
- retIP = localAddr.getHostAddress();
- break;
- }
- }
- }
- } catch (UnknownHostException e) {
- log.error("Error occurred while listing all the local network addresses:"+ e.getMessage());
- }catch (SocketException e) {
- log.error("Error occurred while listing all the local network addresses:"+ e.getMessage());
- }
- if (retIP == null) {
- log.info("NULL reachable local IP is found!");
- } else {
- log.info("Reachable local IP is found, it is " + retIP);
- }
- return retIP;
- } 下载
- /**
- * 测试localInetAddr能否与远程的主机指定端口建立连接相连
- *
- * @param localInetAddr
- * @param remoteInetAddr
- * @param port
- * @param timeout
- * @return
- */
- public boolean isReachable(InetAddress localInetAddr,
- InetAddress remoteInetAddr, int port, int timeout) {
- boolean isReachable = false;
- Socket socket = null;
- try {
- socket = new Socket();
- // 端口号设置为 0 表示在本地挑选一个可用端口进行连接
- SocketAddress localSocketAddr = new InetSocketAddress(
- localInetAddr, 0);
- socket.bind(localSocketAddr);
- InetSocketAddress endpointSocketAddr = new InetSocketAddress(
- remoteInetAddr, port);
- socket.connect(endpointSocketAddr, timeout);
- log.info("SUCCESS - connection established! Local: "
- + localInetAddr.getHostAddress() + " remote: "
- + remoteInetAddr.getHostAddress() + " port" + port);
- isReachable = true;
- } catch (IOException e) {
- log.error("FAILRE - CAN not connect! Local: "
- + localInetAddr.getHostAddress() + " remote: "
- + remoteInetAddr.getHostAddress() + " port" + port);
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- log.error("Error occurred while closing socket:"
- + e.getMessage());
- }
- }
- }
- return isReachable;
- }
- /**
- * 测试localIp能否与远程的主机指定端口建立连接相连
- *
- * @param localIp
- * @param remoteIp
- * @param port
- * @param timeout
- * @return
- */
- public boolean isReachable(String localIp, String remoteIp,
- int port, int timeout) {
- boolean isReachable = false;
- Socket socket = null;
- InetAddress localInetAddr = null;
- InetAddress remoteInetAddr = null;
- try {
- localInetAddr = InetAddress.getByName(localIp);
- remoteInetAddr = InetAddress.getByName(remoteIp);
- socket = new Socket();
- // 端口号设置为 0 表示在本地挑选一个可用端口进行连接
- SocketAddress localSocketAddr = new InetSocketAddress(
- localInetAddr, 0);
- socket.bind(localSocketAddr);
- InetSocketAddress endpointSocketAddr = new InetSocketAddress(
- remoteInetAddr, port);
- socket.connect(endpointSocketAddr, timeout);
- log.info("SUCCESS - connection established! Local: "
- + localInetAddr.getHostAddress() + " remote: "
- + remoteInetAddr.getHostAddress() + " port" + port);
- isReachable = true;
- } catch (IOException e) {
- log.error("FAILRE - CAN not connect! Local: "
- + localInetAddr.getHostAddress() + " remote: "
- + remoteInetAddr.getHostAddress() + " port" + port);
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- log.error("Error occurred while closing socket:"
- + e.getMessage());
- }
- }
- }
- return isReachable;
- }
- public static void main(String[] args) {
- if(NetworkHelper.getInstance().isReachIp("192.168.126.128")){
- log.info("=======本机可以ping通ip:"+"192.168.126.128");
- }
- else{
- log.info("=======本机ping不通ip:"+"192.168.126.128");
- }
- if(NetworkHelper.getInstance().isReachNetworkInterfaces("192.168.126.128")){
- log.info("=======本机所有网卡可以ping通ip:"+"192.168.126.128");
- }
- else{
- log.info("=======本机所有网卡ping不通ip:"+"192.168.126.128");
- }
- String localIp = NetworkHelper.getInstance().getReachableIP("192.168.126.128",8081);
- if(!StringUtils.isBlank(localIp)){
- log.info("=======本机可以与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP:"+localIp);
- }
- else{
- log.info("=======本机不能与ip:"+"192.168.126.128"+",port:"+8081+"建立连接的IP");
- }
- }
- }
时间: 2024-12-20 12:46:30