gpt4 book ai didi

java - TCP 扫描 : Unexpected Socket Exceptions

转载 作者:行者123 更新时间:2023-12-01 11:41:52 25 4
gpt4 key购买 nike

我正在编写一个简单的 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");

我运行的设备是 Samsung Galaxy S2,我的目标是我的笔记本电脑,运行 Fedora 的 Macbook Pro。两个设备都位于同一 WiFi 网络上。

通过我的笔记本电脑,我可以在 Android 手机 (192.168.0.3) 上检测并运行 nmap 扫描。绝对可以达到。

最佳答案

您能否提供有关您的测试的更多详细信息?

  • 您的源设备是什么(Android 手机)?
  • 您想要到达并扫描哪个目的地?计算机位于本地网络还是外部网络?
  • 源设备和目标设备是否位于同一网络(可能是 WiFi)?

EHOSTUNREACH - 没有到主机的路由应该说它是

  • ISO/OSI 第 3 层问题(不同专用 IP 网络上的设备没有相互之间的路由)

  • 目标设备已关闭

  • ICMP 协议(protocol)/ECHO 回复在两者之间被阻止(或源或目标设备上的防火墙)

ECONNREFUSED - 应该更清楚 - 该特定端口未在目标设备上打开

也许您可以将代码逻辑分为两部分:

  1. 检查设备是否已启动并正在运行(PING - ICMP 协议(protocol))
  2. 然后执行端口扫描
    • if isConnected == TRUE(端口已打开) 否则(端口已关闭)

输出可能是:

  1. PING 成功 && isConnected == TRUE(设备已启动且端口已连接)打开)
  2. PING 成功 && isConnected == FALSE(设备已启动,但端口已连接)已关闭)
  3. PING 不成功 && isConnected == TRUE(可能 ICMP 协议(protocol)/ECHO 请求被阻止 - 设备已启动且端口已打开)
  4. PING 不成功 && isConnected == FALSE(设备可能是DOWN 或 ICMP 被阻止并且端口被关闭)

尝试一下。

谢谢。

关于java - TCP 扫描 : Unexpected Socket Exceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com