| | |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.InputStream; |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | |
| | | || lower.contains("could not find host") |
| | | || lower.contains("name or service not known") |
| | | || lower.contains("temporary failure in name resolution") |
| | | || lower.contains("general failure") |
| | | || lower.contains("transmit failed") |
| | | || value.contains("请求超时") |
| | | || value.contains("找不到主机") |
| | | || value.contains("无法访问目标主机") |
| | | || value.contains("一般故障") |
| | | || value.contains("传输失败") |
| | | || value.contains("100.0% 丢失")) { |
| | | return trimMessage(value); |
| | | } |
| | | } |
| | | for (String line : lines) { |
| | | String value = line == null ? "" : line.trim(); |
| | | if (!value.isEmpty()) { |
| | | if (!value.isEmpty() && !isPingHeaderLine(value)) { |
| | | return trimMessage(value); |
| | | } |
| | | } |
| | | return "exit=" + exitCode; |
| | | } |
| | | |
| | | private boolean isPingHeaderLine(String value) { |
| | | String lower = value.toLowerCase(); |
| | | return lower.startsWith("ping ") |
| | | || value.startsWith("正在 Ping ") |
| | | || value.contains("字节的数据") |
| | | || value.contains("bytes of data"); |
| | | } |
| | | |
| | | private String trimMessage(String message) { |
| | |
| | | while ((length = inputStream.read(buffer)) != -1) { |
| | | outputStream.write(buffer, 0, length); |
| | | } |
| | | return outputStream.toString(Charset.defaultCharset()); |
| | | return outputStream.toString(resolveProcessOutputCharset()); |
| | | } |
| | | |
| | | private Charset resolveProcessOutputCharset() { |
| | | if (isWindows()) { |
| | | try { |
| | | return Charset.forName("GBK"); |
| | | } catch (Exception ignored) { |
| | | return Charset.defaultCharset(); |
| | | } |
| | | } |
| | | return StandardCharsets.UTF_8; |
| | | } |
| | | |
| | | private ExecutorService ensureExecutor() { |