我正在编写一个简单的TCP端口扫描程序。这是我的代码:
for (int port : portList) {
Socket socket = new Socket();
try {
socket.connect(new InetSocketAddress(targetIP, port), 5000);
// If we get to this point, port is open
Log.d(DEBUG_TAG, "Port " + port + " open");
} catch (Exception e) {
Log.d(DEBUG_TAG, e.toString());
} finally {
// Try to close
try {
socket.close();
} catch (Exception e) {}
}
}
这是调试输出。我已经多次运行扫描并使用相同的端口ECONNREFUSED
获得完全相同的输出,而其他EHOSTUNREACH
。
D/TCPSCAN﹕ java.net.SocketException: failed to connect to /192.168.0.10 (port 21) after 5000ms: isConnected failed: EHOSTUNREACH (No route to host)
D/TCPSCAN﹕ java.net.ConnectException: failed to connect to /192.168.0.10 (port 22) after 5000ms: isConnected failed: ECONNREFUSED (Connection refused)
D/TCPSCAN﹕ java.net.SocketException: failed to connect to /192.168.0.10 (port 23) after 5000ms: isConnected failed: EHOSTUNREACH (No route to host)
D/TCPSCAN﹕ java.net.SocketException: failed to connect to /192.168.0.10 (port 80) after 5000ms: isConnected failed: EHOSTUNREACH (No route to host)
D/TCPSCAN﹕ java.net.SocketException: failed to connect to /192.168.0.10 (port 443) after 5000ms: isConnected failed: EHOSTUNREACH (No route to host)
我正在运行的Android设备可以成功ping -c 1 -W 1 192.168.0.10
。我的手机将远程主机检测为在线,这就是为什么我不明白为什么我会EHOSTUNREACH
。更令人好奇的是,端口22(未在目标上打开)获得ECONNREFUSED
。
目标上实际打开的唯一端口是FTP端口21(通过nmap
确认)。
我已经阅读了类似问题的一些答案。主要解决方案似乎是重新启动手机的WiFi连接,这对我来说并不起作用。
注意
为了清楚起见,我没有在这里发布我的整个代码,但我正在检查目标主机192.168.0.10
是否在线:
Process process = runtime.exec("/system/bin/ping -c 1 -W 1 192.168.0.10");
// Wait until the process finishes and check exit code (0 for success)
int exitCode = process.waitFor();
if (exitCode == 0)
Log.d(DEBUG_TAG, "Online");
我正在运行的设备是三星Galaxy S2,我正在瞄准我的笔记本电脑,一台运行Fedora的Macbook Pro。两个设备都在同一个WiFi网络上。
在我的笔记本电脑上,我可以在Android手机上检测并运行nmap
扫描(192.168.0.3
)。它绝对可以到达。
答案 0 :(得分:1)
您能否提供有关测试的更多详细信息?
EHOSTUNREACH - 没有到主持人的路线应该说它是
ISO / OSI第3层问题(不同专用IP网络上的设备) 没有相互路线)
目标设备已关闭
ICMP协议/ ECHO回复在两者之间的某处被阻止(或 源或目标设备上的防火墙)
ECONNREFUSED - 应该更清楚 - 此特定端口未在目标设备上打开
也许您可以将代码逻辑分为两部分:
输出可能是:
尝试尝试一下。
谢谢。