【发布时间】:2016-04-10 00:48:22
【问题描述】:
问题:
我有这个 FOR 语句,它调用具有不同 IP 地址的方法(范围从 10.0.0.1 到 10.0.0.255,因为我没有 IP 扫描器)。此方法是 Future Callable 并返回布尔值 true 或 false。 该方法的作用基本上是制作一个Socket,以给定的IP和端口+超时连接到这个Socket,并根据给定的IP地址返回true或false,端口是否打开.
我的计划: 我正在尝试检查连接到同一 WIFI 网络的设备是否具有开放端口(SSH 端口),因此我可以在不知道其 IP 地址的情况下通过 SSH 连接到该设备。我的想法是获取 Android 设备的私有 IP 地址,检查它是否等于常见的私有 IP 地址(例如 10.0.0.*)并扫描它的 IP 范围(从 10.0.0.1-255)以查找打开 SSH 端口 (22)。
待办事项:
- 从 Android 设备获取 IP(选中)
- 过滤它,如果它是一个以“10”开头的私有IP。 && "10.0.0."或“192”。 &&“192.168”。等等(选中)
- 检查端口 22 是否在“10.0.0.1-255”或“192.168.1.1-255”范围内打开。 (当前)
我使用此处的代码用于端口扫描器:Socket Port Scanner 在这个问题中,如果固定 IP 地址上的端口打开与否,Future Method 返回 true 或 false。然后将此方法的结果添加到未来布尔列表数组中。然后查询,用户可以看到这个固定IP地址上打开了多少端口。
我对其进行了修改,因此该方法正在扫描多个 IP 地址以查找固定端口,然后将 IP 地址(如果 SSH 端口打开)添加到未来布尔列表数组中。除了 socket.connect(new InetSocketAddress(ip, port), timeout); 始终返回 true 之外,此方法有效。我尝试查看它的代码以了解它为什么这样做,但我没有找到答案。如果您有任何想法如何让 Socket 返回 false,当 IP 地址上的给定端口未打开时,请告诉我。提前致谢。
代码:
这里我调用 Socket 方法 (portIsOpen),如果它返回 true,我将发送到方法的 IP 地址附加到我的 Stringbuilder possibleIPAddresses。这样我可以列出所有打开端口的 IP 地址,然后再连接到它们。
//Initialisiert Variablen für den Port Prüfer
public StringBuilder possibleIPAddress = new StringBuilder("");
final ExecutorService es = Executors.newFixedThreadPool(50);
final int timeout = 500;
final List<Future<Boolean>> futures = new ArrayList<>();
//Code for querying IP Adress here.
//Checking all IP-Addresses from 10.0.0.1-10.0.0.255 for open SSH Port
String ip = "";
for (int x=1;x<=10;x++) {
ip = "10.0.0."+x;
//Should return true if port on IP-Address is open, but returns true everytime..help?
if (futures.add(portIsOpen(es, ip, 22, timeout))) {
possibleIPAddress.append(ip).append("\n");
}
es.shutdown();
}
这是端口扫描器的代码(与端口扫描器问题相同)
public static Future<Boolean> portIsOpen(final ExecutorService es, final String ip, final int port, final int timeout) {
return es.submit(new Callable<Boolean>() {
@Override public Boolean call() {
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), timeout);
socket.close();
return true;
} catch (Exception ex) {
return false;
}
}
});
}
【问题讨论】:
标签: android sockets ssh ip port