ping IP地址

xiaoxiao2021-03-01  21

package com.xd.monitor.service; import com.xd.monitor.entity.Equipment; import com.xd.monitor.entity.EquipmentFailure; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component;; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @Component public class PingService { @Autowired private EquipmentService equipmentService; @Autowired private EquipmentFailureService equipmentFailureService; @Async public void ping(String ip, String eq_id) {//传入IP地址和设备ID,以便更新设备状态 Runtime runtime = Runtime.getRuntime(); Equipment equipment1 = new Equipment(); Process process; try { process = runtime.exec("ping " + ip); //ping IP InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "gb2312"); //字符编码,避免乱码 BufferedReader br = new BufferedReader(isr); String line = null; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line); //获取ping IP的结果 } int status_key = getCheckResult(sb); //根据结果判定是否ping的通 if (status_key == 1) { //插入数据库 equipment1.setEq_state_key(status_key); equipment1.setEq_id(eq_id); equipmentService.updateEquipment(equipment1); EquipmentFailure eq_failure = new EquipmentFailure(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String times = df.format(new Date()); eq_failure.setPk_equipment_failure(getPK("")); eq_failure.setEq_id(eq_id); eq_failure.setEq_state_key(status_key); eq_failure.setFa_time(times); eq_failure.setFa_description(sb.toString()); eq_failure.setFa_accepter("Admin"); eq_failure.setIp_address(ip); EquipmentFailure ts=equipmentFailureService.getFailureid(eq_id); //判定故障表中是否有该设备的信息,没有的话插入,有的话不插入,避免重复插入 if(ts == null){ equipmentFailureService.insertEquipmentFailure(eq_failure); } } is.close(); isr.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } private int getCheckResult(StringBuffer sb) { // System.out.println("控制台输出的结果为:"+line); Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(sb.toString()); while (matcher.find()) { return 0; } return 1; } //生成故障表的主键,20个字符长度 private static Long timeMillis=null; public static String getPK(String prefix){ if(prefix==null) prefix=""; if(timeMillis==null) timeMillis=System.currentTimeMillis()*10; long i=timeMillis++; StringBuffer v=new StringBuffer("00000000000000000000"); while(i>0){ long t=i6; i=i/36; if(t<10) v.insert(20,(String.valueOf(t))); else v.insert(20,(char)('A'+t-10)); } return prefix+v.substring(v.length()-20+prefix.length(), v.length()); } }
转载请注明原文地址: https://www.6miu.com/read-4021590.html

最新回复(0)