【发布时间】:2020-03-16 23:27:05
【问题描述】:
我创建了一个具有多线程的端口扫描器,它扫描端口,从 1 开始,数量不断增加。 它在我的局域网上运行良好,但如果我尝试扫描局域网外的 IP,它会说所有端口都已关闭,我认为这是因为防火墙阻止了连接?
有什么方法可以检查端口是否在我的 LAN 之外的 IP 地址上打开?这是我得到的代码
for (int port = startPort; port < 65535; port+=PortScanner.count)
{
Socket socket;
try
{
socket = new Socket();
socket.connect(new InetSocketAddress(host, port ), 500);
openPorts.add(port);
foundPort = true;
String temp = "Port " + port + " is open.\n";
System.out.write(temp.getBytes());
socket.close();
}
catch (IOException ioEx)
{
System.out.println("Port " + port + " is closed");
}
}
Thread.yield();
【问题讨论】:
-
也许您只是做出了错误的假设:如果您使用的 IP 地址未被任何系统使用或您的系统无法访问,它也会声称所有端口都已关闭。跨度>
-
我扫描了一个朋友的 IP,他向我展示了一些打开的端口,但扫描仪说是关闭的,所以可能是防火墙或类似的问题。
-
鉴于缺乏细节:我猜您的好友系统位于典型的 Soo 路由器后面,您要么尝试扫描您甚至无法访问的内部 IP 地址,要么尝试扫描路由器的公共 IP 地址也没有显示任何开放端口,因为没有安装到内部系统的端口转发。端口扫描器首先需要连接到远程系统,否则它将无法扫描那里的任何端口。
-
你朋友的IP是公网地址吗?港口是否对公众开放?如果您尝试使用端口 80 的网络服务器(如 www.google.com)会发生什么?您的程序是否将其报告为开放?
-
我扫描了我朋友的公共 IP 地址,但它说所有端口都已关闭,但是当我扫描“www.google.com”时,它说端口 80 已打开。