这是我到目前为止的代码......
import java.net.*;
public class PortScanner {
public static void main(String args[]) {
int startPortRange = 0;
int stopPortRange = 0;
startPortRange = Integer.parseInt(args[0]);
stopPortRange = Integer.parseInt(args[1]);
for (int i = startPortRange; i <= stopPortRange; i++) {
try {
Socket ServerSok = new Socket("127.0.0.1", i);
System.out.println("Port in use: " + i);
ServerSok.close();
} catch (Exception e) {
System.out.println("Port not in use: " + i);
}
}
}
} 例如,在smtp服务器上,系统使用端口25,我需要扫描连接到smtp服务器的远程客户端上的端口。我怎么能这样做?
请帮帮我。
答案 0 :(得分:2)
您的代码应如下所示:
for (int i = startPortRange; i <= stopPortRange; i++) {
try {
Socket serverSok = new Socket("127.0.0.1", i);
System.out.println("Port in use: " + i);
serverSok.close();
} catch (Exception e) {
System.out.println("Port not in use: " + i);
}
}
答案 1 :(得分:1)
如果我理解你的问题:
你想用Java发现T中的T吗?你不能!
您必须阅读开放式插座的操作系统表。这是一个依赖于操作系统的操作,java不支持它。
否则,如果F为S,则可以更改S的代码以发现T.如果S使用java.net.ServerSocket类,则可以在返回的Socket实例上搜索ServerSocket.accept()并使用getPort()发现T
LLP,Andrea
答案 2 :(得分:0)
首先,这种方法存在一些方法问题,因为端口可以使用,但不能监听。
如果您实际上只是在寻找侦听端口,并且想要使用上述方法,至少会产生一些线程,这样您就不必等待每个端口按顺序超时。
最好的方法是模仿syn扫描,而不是进行完整的TCP握手,但我不确定你是否可以在Java中接近金属。
虽然问题很好。