检查 java 中网络中所有节点的可访问性
check accessibility of all nodes in a network in java
我想使用 java 检查网络中所有节点的可访问性。我已阅读 This and This 个问题,并通过帮助这些问题编写了我的方法,我的网络中至少有两个可访问的测试 Ips,其中一个是 192.168.1.1
,另一个是 192.168.1.102
你可以在下图中看到 192.168.1.1
的测试:
Odk 但是当我 运行 我的代码时,我的应用程序说 192.168.1.1 不可访问。这是图片,我用红色箭头指向它:
好的,这是我的 java 代码:
private void checkNetworkAccessibility(){
int timeout = 1000;
String subnet = firstSubnet.getText() + "." + secondSubnet.getText() + "." + thirdSubnet.getText() + ".";
DefaultTableModel model = (DefaultTableModel)networkTable.getModel();
for(int i=1;i<=254;i++){
try {
if(InetAddress.getByName(subnet+i).isReachable(timeout)){
model.addRow(new Object[]{subnet + i, subnet + i, "بله", "بله"});
}
else{
model.addRow(new Object[]{subnet + i, "نامشخص", "خیر", "بله"});
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
我的代码有什么问题?
问题是 .isReachable()
不可靠。它的实现完全 OS 依赖!
我们以Linux为例;此方法使用 echo TCP 服务(端口 7)。你真的知道今天有甚至 运行ning 的服务器吗?我没有。
无法ping通;看看这个:
$ ls -l $(which ping)
-rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
是的,没错;粘性位。这样做的原因是 ping 命令沿着线路发送一个 ICMP 回显请求数据包,这需要您能够访问原始套接字。
除非您拥有必要的权限,否则您无法做到,而在 Java 中您也无法做到!除非您使用本机库。而您 运行 拥有必要的权限。这通常意味着您需要成为管理员。你不想要的。
当然,系统管理员甚至可能决定阻止主机上的传入回显请求数据包,因此即使 ping
也不可靠...
我想使用 java 检查网络中所有节点的可访问性。我已阅读 This and This 个问题,并通过帮助这些问题编写了我的方法,我的网络中至少有两个可访问的测试 Ips,其中一个是 192.168.1.1
,另一个是 192.168.1.102
你可以在下图中看到 192.168.1.1
的测试:
Odk 但是当我 运行 我的代码时,我的应用程序说 192.168.1.1 不可访问。这是图片,我用红色箭头指向它:
好的,这是我的 java 代码:
private void checkNetworkAccessibility(){
int timeout = 1000;
String subnet = firstSubnet.getText() + "." + secondSubnet.getText() + "." + thirdSubnet.getText() + ".";
DefaultTableModel model = (DefaultTableModel)networkTable.getModel();
for(int i=1;i<=254;i++){
try {
if(InetAddress.getByName(subnet+i).isReachable(timeout)){
model.addRow(new Object[]{subnet + i, subnet + i, "بله", "بله"});
}
else{
model.addRow(new Object[]{subnet + i, "نامشخص", "خیر", "بله"});
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
我的代码有什么问题?
问题是 .isReachable()
不可靠。它的实现完全 OS 依赖!
我们以Linux为例;此方法使用 echo TCP 服务(端口 7)。你真的知道今天有甚至 运行ning 的服务器吗?我没有。
无法ping通;看看这个:
$ ls -l $(which ping)
-rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
是的,没错;粘性位。这样做的原因是 ping 命令沿着线路发送一个 ICMP 回显请求数据包,这需要您能够访问原始套接字。
除非您拥有必要的权限,否则您无法做到,而在 Java 中您也无法做到!除非您使用本机库。而您 运行 拥有必要的权限。这通常意味着您需要成为管理员。你不想要的。
当然,系统管理员甚至可能决定阻止主机上的传入回显请求数据包,因此即使 ping
也不可靠...