This repository has been archived by the owner on Jun 5, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 724
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
50ddae4
commit 6a4a03b
Showing
3 changed files
with
119 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package me.biezhi.wechat.util; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.IOException; | ||
import java.io.InputStreamReader; | ||
import java.net.InetAddress; | ||
import java.util.regex.Matcher; | ||
import java.util.regex.Pattern; | ||
|
||
public class PingUtil { | ||
|
||
public static boolean ping(String ipAddress) throws Exception { | ||
int timeOut = 3000 ; //超时应该在3钞以上 | ||
boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut); // 当返回值是true时,说明host是可用的,false则不可。 | ||
return status; | ||
} | ||
|
||
/** | ||
* 返回是否能ping通 | ||
* @param ipAddress | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static boolean ping02(String ipAddress) throws Exception { | ||
String line = null; | ||
try { | ||
Process pro = Runtime.getRuntime().exec("ping " + ipAddress); | ||
BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream())); | ||
while ((line = buf.readLine()) != null){ | ||
if(line.startsWith("PING")){ | ||
continue; | ||
} | ||
if(line.indexOf("timeout") != -1){ | ||
return false; | ||
} | ||
return true; | ||
} | ||
return false; | ||
} catch (Exception ex) { | ||
return false; | ||
} | ||
} | ||
|
||
public static boolean ping(String ipAddress, int pingTimes, int timeOut) { | ||
BufferedReader in = null; | ||
Runtime r = Runtime.getRuntime(); // 将要执行的ping命令,此命令是windows格式的命令 | ||
String pingCommand = "ping " + ipAddress + " -n " + pingTimes + " -w " + timeOut; | ||
try { // 执行命令并获取输出 | ||
System.out.println(pingCommand); | ||
Process p = r.exec(pingCommand); | ||
if (p == null) { | ||
return false; | ||
} | ||
in = new BufferedReader(new InputStreamReader(p.getInputStream())); // 逐行检查输出,计算类似出现=23ms TTL=62字样的次数 | ||
int connectedCount = 0; | ||
String line = null; | ||
while ((line = in.readLine()) != null) { | ||
connectedCount += getCheckResult(line); | ||
} // 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真 | ||
return connectedCount == pingTimes; | ||
} catch (Exception ex) { | ||
ex.printStackTrace(); // 出现异常则返回假 | ||
return false; | ||
} finally { | ||
try { | ||
in.close(); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
//若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0. | ||
private static int getCheckResult(String line) { // System.out.println("控制台输出的结果为:"+line); | ||
Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)", Pattern.CASE_INSENSITIVE); | ||
Matcher matcher = pattern.matcher(line); | ||
while (matcher.find()) { | ||
return 1; | ||
} | ||
return 0; | ||
} | ||
|
||
public static boolean netIsOver(){ | ||
try { | ||
return !ping02("114.114.114.114"); | ||
} catch (Exception e){ | ||
return true; | ||
} | ||
} | ||
|
||
|
||
} |