我需要检查远程主机是否能够访问特定端口。测试时绑定到该端口的服务将关闭。
测试可能解决的问题包括:
- 网络允许远程主机访问该端口。
- 主机(接收方)上的防火墙允许远程主机连接到该端口。
我试过 telnet。但是如果服务未绑定到该端口,telnet 将返回非零退出代码。可能的选择是什么?
更新:
我们不能用 nmap 的方法来做这件事吗?任何带有过滤状态的输出都应该意味着一个红旗。
示例命令:$ nmap -v 120.114.24.56 -P0 -p 8080
参考:http://nmap.org/book/man-port-scanning-basics.html
Nmap 识别的六个端口状态 –(红色标记的端口状态对我们来说应该是一个危险信号)
打开
应用程序正在此端口上主动接受 TCP 连接、UDP 数据报或 SCTP 关联。找到这些通常是端口扫描的主要目标。有安全意识的人知道每个开放端口都是攻击的途径。攻击者和渗透测试人员希望利用开放端口,而管理员则试图关闭或使用防火墙保护它们,而不会阻止合法用户。开放端口对于非安全扫描也很有趣,因为它们显示了网络上可用的服务。
关闭
已关闭的端口是可访问的(它接收并响应 Nmap 探测数据包),但没有应用程序监听它。它们有助于显示主机在 IP 地址上处于启动状态(主机发现或 ping 扫描),并可作为操作系统检测的一部分。由于已关闭的端口是可访问的,因此可能值得稍后扫描,以防某些端口打开。管理员可能需要考虑使用防火墙阻止此类端口。然后它们将出现在过滤状态,下面将讨论。
已过滤
Nmap 无法确定端口是否打开,因为数据包过滤会阻止其探测到达端口。过滤可能来自专用防火墙设备、路由器规则或基于主机的防火墙软件。这些端口让攻击者感到沮丧,因为它们提供的信息非常少。有时它们会以 ICMP 错误消息(如类型 3 代码 13(目标无法到达:管理上禁止通信))进行响应,但更常见的是过滤器只是丢弃探测而不做出响应。这迫使 Nmap 重试多次,以防探测因网络拥塞而不是过滤而丢弃。这会大大减慢扫描速度。
未过滤
未过滤状态意味着端口可访问,但 Nmap 无法确定它是打开还是关闭。只有用于映射防火墙规则集的 ACK 扫描才会将端口归类为此状态。使用其他扫描类型(例如窗口扫描、SYN 扫描或 FIN 扫描)扫描未过滤端口可能有助于确定端口是否打开。
打开|过滤
当 Nmap 无法确定端口是开放的还是被过滤的时,它会将端口置于此状态。这种情况发生在开放端口没有响应的扫描类型中。没有响应也可能意味着数据包过滤器丢弃了探测或它引发的任何响应。因此 Nmap 无法确定端口是开放的还是被过滤的。UDP、IP 协议、FIN、NULL 和 Xmas 扫描以这种方式对端口进行分类。
关闭|过滤
当 Nmap 无法确定端口是否关闭或被过滤时使用此状态。它仅用于 IP ID 空闲扫描。
答案1
根据您对资源的访问情况,这很困难(甚至不可能)。
如果是 Unix 服务器,我会在服务器上运行 tcpdump(这样它只监听您感兴趣的端口上的流量),然后尝试通过 Telnet 连接到它。Telnet 当然会失败,但至少您应该看到通过 tcpdump 的传入服务器尝试 [即使只有传入流量,因为没有任何响应]。这意味着流量正在到达盒子 - 当然,这并不意味着盒子上没有防火墙阻止程序运行。
答案2
如果服务器上还没有监听任何东西,那么我通常只需在端口上启动一项服务即可。不过,现代防火墙可能会使用数据包检查,因此无法保证您想要监听端口的功能能够正常工作。
您可以使用 nc 类似命令执行此操作(例如对于端口 6667 上的 TCP)
nc -l 6667
然后在发送端尝试 telnet 或 nc。如果没有 nc,可以使用 perl 和例如 IO::Socket::Inet 制作一个简单的套接字侦听器,或者使用 python 或 powershell(具体取决于平台)。
对于 UDP,您可以使用带有 -u 标志的 nc,但是您无法使用 telnet 来验证这一点,但 nc 在发送端也可以工作。