22:04:08.002 [main] INFO  Ping - 目标地址   192.168.1.107 是否可到达:true
22:04:08.006 [main] INFO Ping - 执行命令 ping 192.168.1.107 -n 4 -w 5000
22:04:11.085 [main] INFO Ping - 目标地址 192.168.1.107 是否可PING通:true
22:04:11.140 [main] INFO Ping -
22:04:11.140 [main] INFO Ping - 正在 Ping 192.168.1.107 具有 32 字节的数据:
22:04:11.141 [main] INFO Ping - 来自 192.168.1.107 的回复: 字节=32 时间<1ms TTL=64
22:04:12.141 [main] INFO Ping - 来自 192.168.1.107 的回复: 字节=32 时间<1ms TTL=64
22:04:13.142 [main] INFO Ping - 来自 192.168.1.107 的回复: 字节=32 时间<1ms TTL=64
22:04:14.144 [main] INFO Ping - 来自 192.168.1.107 的回复: 字节=32 时间<1ms TTL=64
22:04:14.144 [main] INFO Ping -
22:04:14.144 [main] INFO Ping - 192.168.1.107 的 Ping 统计信息:
22:04:14.144 [main] INFO Ping - 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
22:04:14.144 [main] INFO Ping - 往返行程的估计时间(以毫秒为单位):
22:04:14.144 [main] INFO Ping - 最短 = 0ms,最长 = 0ms,平均 = 0ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.log4j.Logger;
import org.junit.Test; public class Ping { private static final Logger LOGGER = Logger.getLogger(Ping.class); @Test
public void scanPortTest() { scanPort("192.168.1.107", 9200); // for (int i = 1000; i <= 9999; i++) {
// scanPort("127.0.0.1", i);
// }
} public void scanPort(String ipAddress, int port) {
Socket client = null;
try {
client = new Socket();
client.connect(new InetSocketAddress(ipAddress, port), 300);
LOGGER.info(ipAddress + ":" +port);
} catch (IOException e) {
LOGGER.error("端口:" + port + " 异常 " + e);
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} @Test
public void discoveryTest() throws Exception {
Discovery("192.168.1", 1, 254);
} private static List<String> Discovery(String networkSection, int start, int end) throws Exception {
for (int i = start; i <= end; i++) {
String ipAddress = networkSection + "." + i;
ping(ipAddress);
}
return null;
} private static boolean ping(String ipAddress) throws Exception {
// 超时应该在3钞以上
int timeOut = 3000;
// 当返回值是true时,说明host是可用的,false则不可。
boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut);
LOGGER.info("目标地址 " + ipAddress + " 是否可到达:" + status);
return status;
} private static void ping02(String ipAddress) throws Exception {
String line = null;
try {
Process pro = Runtime.getRuntime().exec("ping " + ipAddress);
InputStreamReader isr = new InputStreamReader(pro.getInputStream(), "GBK");
BufferedReader buf = new BufferedReader(isr);
while ((line = buf.readLine()) != null)
LOGGER.info(line);
} catch (Exception ex) {
LOGGER.error(ex.getMessage());
}
} private static boolean ping(String ipAddress, int pingTimes, int timeOut) {
BufferedReader in = null;
// 将要执行的ping命令,此命令是windows格式的命令
Runtime r = Runtime.getRuntime();
String pingCommand = "ping " + ipAddress + " -n " + pingTimes + " -w " + timeOut;
try { // 执行命令并获取输出
LOGGER.info("执行命令 " + pingCommand);
Process p = r.exec(pingCommand);
if (p == null) {
return false;
}
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int connectedCount = 0;
String line = null;
while ((line = in.readLine()) != null) {
connectedCount += getCheckResult(line);
} // 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真
boolean flag = connectedCount == pingTimes;
LOGGER.info("目标地址 " + ipAddress + " 是否可PING通:" + flag);
return flag;
} catch (Exception ex) {
LOGGER.error(ex);
return false;
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} // 若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
private static int getCheckResult(String 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;
} @Test
public void pingTest() throws Exception {
String ipAddress = "192.168.1.107";
ping(ipAddress);
ping(ipAddress, 4, 5000);
ping02(ipAddress);
}
}

Java ping 主机 端口的更多相关文章

  1. Java 实现 telnet命令 验证主机端口的连通性

    Java 实现 telnet命令 验证主机端口的连通性 1.Telnet 命令 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在本地计 ...

  2. From 192.168.25.133 icmp_seq=238 Destination Host Unreachable 虚拟机ping主机不通

    From 192.168.25.133 icmp_seq=238 Destination Host Unreachable 虚拟机ping主机不通,但是主机可以ping通虚拟机,虚拟机ping不通外网 ...

  3. NAT 模式下虚拟机安装的centos7 ping主机显示connect: Network is unreachable

    在虚拟机下安装的centos7使用的网络是NAT模式,安装成功后ping主机地址显示 Network is unreachable 解决方案: 1)使用ifconfig命令查看网卡信息 2)进入/et ...

  4. bug7 java.net.BindException: 端口被占用。

    java.net.BindException:   端口被占用. java.net.BindException:   端口被占用.

  5. 通过ping 主机名,或者主机名对应的IP地址

    通过ping 主机名,或者主机名对应的IP地址: 如下图: 懵了吧? 但是你用 ping 主机名 -4

  6. Linux 能PING IP 但不能PING 主机域名的解决方法 vim /etc/nsswitch.conf hosts: files dns wins

    Linux 能PING IP 但不能PING 主机域名的解决方法 转载 2013年12月25日 10:24:27 13749 . vi /etc/nsswitch.conf hosts: files ...

  7. 判断所ping主机的操作系统

    根据它的值判断所ping主机的操作系统类型. TTL被称为生存期,也就是你所传输的数据在网络上经过的路由器的最大个数. 操作系统 TTLLINUX 64WIN2K/NT 128WINDOWS 系列 3 ...

  8. VMware桥接模式下虚拟机ping主机不通

    现象: VMware设置为桥接模式,虚拟机ping主机不通,主机ping虚拟机通. 解决: 尝试以下几种方法 关闭主机(专用网络.来宾或公用网络)和虚拟机的防火墙. 更改桥接的物理网卡,确保是主机正在 ...

  9. 主机ping虚拟机失败。虚拟机ping主机,可以ping通。

    原文:https://blog.csdn.net/ww1473345713/article/details/51490525 今天打开虚拟机,然后用Xshell远程连接,发现连接不上.按照以下顺序检查 ...

随机推荐

  1. Ajax知识点整理

    一.javascript原生Ajax 1.简介 Ajax是Asynchronous JavaScript+XML(异步JavaScript和XML)的缩写. 该名称诞生于XML还是数据传输首选格式的时 ...

  2. 清理:db上面的过期的binlog,释放磁盘空间。 (转)

    如果10台以内的db的话,自己手动ssh进去,clean就足以,但是上百台呢,就要写脚本了.大概思路:在 一台db跳转机上面, 写一个脚本,访问slave,远程获取正在复制的master上面的binl ...

  3. 如何得到DataTable的列名

    foreach (DataColumn dc in dtfood.Columns) { string lm = dc.ColumnName; }

  4. 查看,修改,上传monmap命令

    标签(空格分隔): ceph,ceph运维,monmap 查看集群monmap命令 从集群获取monmap: # ceph mon getmap -o monmap 查看上一步下载的monmap: # ...

  5. C语言学习笔记--单引号和双引号

    (1)C 语言中单引号用来表示字符字面量(是个数值)被编译为对应的 ASCII 码 (2)C 语言中双引号用来表示字符串字面量(是个指针)被编译为对应的内存地址 例如:'a'表示字符字面量(97),在 ...

  6. JavaScript的内部对象

    JavaScript的内部对象 按创建方式不同分为:使用变量声明的隐性对象,使用new创建的显性对象 隐性对象 在赋值和声明后就是一个隐性对象,隐性对象不支持prototype属性,也无法随意扩展对象 ...

  7. Java实现WC基本功能

    GitHub仓库:https://github.com/douyazai/WCbase 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...

  8. vue -- 异常处理集合

    1.npm run dev 运行出错,报错如下: > webpack-dev-server --inline --progress --config build/webpack.dev.conf ...

  9. SQL——模糊查询

    前言 在这个大数据时代,我们都离不开对数据的增删改查,增加.删除.修改这些看似都是一步完成的事情,但是对于查询来说,好的查询SQL可以大大的减少系统内存运行时间,提高系统的反应速度.这里简单的介绍一下 ...

  10. 机房重构——泛型和“DataTable”

    前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...