`
zhouhaiyang88
  • 浏览: 4102 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

java 对 URL访问、校验端口是否占用、IP是否ping通

阅读更多
package cn.microvideo.info.service.impl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathExpressionException;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.xml.sax.SAXException;

import cn.microvideo.info.domain.ServiceMonitorInfo;
import cn.microvideo.info.service.MonitorService;
import cn.microvideo.info.util.ServiceXMLUtil;

@Service("monitorService")
public class MonitorServiceImpl implements MonitorService {

	private Logger log = Logger.getLogger(MonitorServiceImpl.class);

	@Override
	public void execute() {
		ServiceXMLUtil serviceUtil = ServiceXMLUtil.getInstance();
		List<ServiceMonitorInfo> services = serviceUtil.getServices();
		for (ServiceMonitorInfo service : services) {
			monitoring(service);
		}
	}

	private void monitoring(ServiceMonitorInfo service) {
		String state = "监控服务获取失败";
		if (service != null) {
			boolean servResult = false;
			String url = service.getUrl();
			if (StringUtils.isNotBlank(url)) {
				String result = null;
				if ("post".equalsIgnoreCase(service.getMethod())) {
					try {
						result = postSend(url, service.getParam());
					} catch (Exception e) {
					}
					if (StringUtils.isNotBlank(result)) {
						servResult = true;
					}
				} else if ("get".equalsIgnoreCase(service.getMethod())) {
					try {
						result = sendGet(url, service.getParam());
					} catch (Exception e) {
					}
					if (StringUtils.isNotBlank(result)) {
						servResult = true;
					}
				}
				if (!servResult) {
					String regex = "//(.*?):(\\d+)/";
					Pattern p = Pattern.compile(regex);
					Matcher m = p.matcher(url);
					while (m.find()) {
						String location = m.group(1);
						try {
							Integer port = Integer.parseInt(m.group(2));
							servResult = validePort(location, port);
						} catch (Exception e) {
							servResult = false;
						}
						if (!servResult) {
							try {
								servResult = ping(location);
							} catch (Exception e) {
								servResult = false;
							}
							if(servResult){
								state = "服务器【IP】能够正常访问";
							}
						}else{
							state = "服务器【端口】能够正常访问";
						}

					}
				}else{
					state = "服务器【地址】能够正常访问";
				}
				if(!servResult){
					state = "服务器【地址、端口、IP】都无法访问";
				}
			}
		}
		service.setState(state);
		ServiceXMLUtil serviceUtil = ServiceXMLUtil.getInstance();
		try {
			serviceUtil.updateNodeById(service);
		} catch (XPathExpressionException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private String postSend(String url, String param) {
		String result = null;
		PrintWriter out = null;
		BufferedReader in = null;
		try {
			URL realUrl = new URL(url);
			URLConnection conn = realUrl.openConnection();
			conn.setRequestProperty("accept", "*/*");
			conn.setRequestProperty("connection", "Keep-Alive");
			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1)");
			conn.setDoOutput(true);
			out = new PrintWriter(conn.getOutputStream());
			out.print(param);
			out.flush();
			in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			log.error("服务监控,发送POST请求异常:"+e.getMessage());
		} finally {
			try {
				if (out != null)
					out.close();
			} catch (Exception e2) {
			}
			try {
				if (in != null)
					in.close();
			} catch (Exception e2) {
			}
		}

		return result;
	}

	private String sendGet(String url, String param) {
		String result = "";
		BufferedReader in = null;
		try {
			String urlNameString = url + "?" + param;
			URL realUrl = new URL(urlNameString);
			URLConnection connection = realUrl.openConnection();
			connection.setRequestProperty("accept", "text/html, application/xhtml+xml, */*");
			connection.setRequestProperty("connection", "Keep-Alive");
			connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
			connection.setRequestProperty("Accept-Language", "zh-CN");
			connection.setRequestProperty("user-agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
			connection.connect();
			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			String line;
			while ((line = in.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			log.error("服务监控,发送GET请求异常:"+e.getMessage());
		} finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
			}
		}
		return result;
	}

	/** 当返回值是true时,说明host是可用的,false则不可。*/
	public static boolean ping(String ipAddress) throws Exception {
		int timeOut = 3000; // 超时应该在3钞以上
		boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut);
		return status;
	}

	private boolean validePort(String location, int port) {
		Socket s = new Socket();
		try {
			SocketAddress add = new InetSocketAddress(location, port);
			s.connect(add, 2000);
			return true;
		} catch (IOException e) {
			return false;
		}finally{
			try {
				s.close();
			} catch (IOException e1) {
			}
		}
	}

}
写道
此例结合上次XML解析文章

http://zhouhaiyang88.iteye.com/admin/blogs/2302442

 
分享到:
评论

相关推荐

    java实现免费代理IP的获取方式 并实时校验代理IP是否有效

    Java 实现免费代理IP的获取方式 并动态实时校验是否有效,java文件项目内含有Jsoup的Jar包(Jsoup是加工过的,含请求),有2个主入口程序: 其一:用于请求代理IP,并立即校验是否是一个有效的代理IP,如果有效,...

    检测端口是否被占用源码(C++)

    总结来说,检测端口是否被占用涉及到对TCP/IP协议的理解、套接字编程以及系统调用的使用。通过创建并尝试绑定或连接到目标端口,我们可以判断端口的使用情况。在实际项目中,这一步骤对于确保服务的正常运行和避免...

    IpRangeUtil;java 校验Ip段(子网掩码)

    IpRangeUtil;java 校验Ip段(子网掩码); 支持 iptables.patterns=10.0.0.0/8,192.168.0.0/16,172.16.0.0/12,202.195.129.240/28,202.195.128.0/20

    Java代码中对IP精确格式的校验

    在`CheckIP.java`文件中,我们可以定义一个静态方法`isValidIP(String ip)`,该方法接受一个字符串作为参数,返回值为布尔类型,表示输入的字符串是否符合IP地址的格式。 ```java public class CheckIP { public ...

    端口检测(是否被占用)

    项目名为"portDetect1",代码可能包含一个简单的函数,用来检查指定端口是否被占用,并根据返回值进行相应的处理。 总结,端口检测对于调试网络服务、部署应用或排查网络问题具有重要意义。理解端口的工作原理和...

    java正则表达式验证IP地址

    Java正则表达式验证IP地址是指使用Java语言中的正则表达式来验证IP地址是否符合标准。IP地址是指在网络通信中用来标识设备的地址,它是一种逻辑地址,通过它可以找到网络中的设备。在Java中,可以使用正则表达式来...

    JAVA验证身份证号码校验码是否正确.zip

    在Java编程中,验证身份证号码的校验码是否正确是一项常见的任务,特别是在处理个人信息时,如用户注册、信息录入等场景。本教程将深入探讨如何使用Java实现这一功能。 首先,我们需要了解身份证号码的基本结构。...

    Java编写的CRC校验

    在Java编程环境中实现CRC校验对于确保数据的完整性和一致性至关重要,尤其是在Android开发中,它能帮助开发者检测和防止数据传输过程中的错误。 CRC校验的基本原理是通过附加一个短的校验码到数据块的末尾,这个...

    Java居民身份证号校验规则

    Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!

    CIDRUtils.java 判断IP是否在指定范围内

    java判断IP是否在指定范围内,支持IPV4和IPV6。

    JAVA验证URL是否有效连接的方法

    ### JAVA验证URL是否有效连接的方法 #### 背景与目的 在进行远程服务器或Web应用的监控时,经常会遇到需要验证某个URL是否能够成功访问的情况。这不仅可以用于监测服务的健康状态,还可以帮助开发者及时发现并处理...

    浅谈java获取UUID与UUID的校验

    java 获取 UUID 与 UUID 校验详解 Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成...

    JAVA_MAC地址校验和转换

    - **校验有效性**:可以使用正则表达式检查MAC地址的格式是否正确,例如`^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$`。 - **校验物理唯一性**:如果需要确保MAC地址在实际网络中是唯一的,可以查询网络接口或使用...

    java实现CRC16校验功能

    在Java中实现CRC16校验功能可以帮助开发者确保数据的完整性和一致性,尤其在文件传输、网络通信或者存储系统中。CRC16的基本原理是通过一个固定长度的校验和来验证数据是否在传输或处理过程中发生了错误。 CRC16的...

    java完整性校验解决方案

    Java 数据完整性校验是保障软件安全的重要环节,尤其是在下载或传输文件时,确保数据未被篡改至关重要。这里我们将深入探讨 Java 中实现数据完整性验证的方法,主要关注MD5(Message-Digest Algorithm 5)哈希算法的...

    java校验和算法

    由于需要和蓝牙通讯,协议需要用到校验和,找了很久才找到,给大家共享。java校验和算法绝对可以用。

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    5. **IP地址的其他操作**:如计算IP地址的子网掩码、获取IP地址的主机名、判断两个IP地址是否在同一子网等。 对于这个工具类的实现,`IpUtils.java`文件就是关键。打开这个文件,我们可以看到类定义、方法声明和...

    JAVA写的CRC校验

    CRC的基本原理是基于多项式除法,通过对数据进行特定算法计算,生成一个固定位数的校验码。当数据在传输或存储过程中发生改变时,重新计算的CRC值通常会与原始值不同,从而能发现错误。 在描述中提到的Java编写的...

    java中用正则表达式检测IP地址是否合理

    ### Java中利用正则表达式检测IP地址合理性 在日常的软件开发中,经常会遇到需要验证用户输入数据的情况,特别是对于IP地址这类特定格式的数据。本文将详细介绍如何使用Java中的正则表达式来检查一个IP地址的有效性...

    Java校验参数工具类

    这是自己开发的一个参数校验的工具类,可用于对实例的属性进行非空校验。包括全部校验和任一校验两种校验方式。 举例:CheckParamsUtils.checkParamsAll(requestBean, "name", "age","gender");

Global site tag (gtag.js) - Google Analytics