![如何检查给定服务器上的外部开放端口?](https://linux22.com/image/1403237/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E7%BB%99%E5%AE%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%A4%96%E9%83%A8%E5%BC%80%E6%94%BE%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
我需要以编程方式确定运行我脚本的服务器上的某个端口是否对外开放。我假设唯一可靠的方法是考虑到两个端口都在监听,和任何现有的防火墙都会让外部服务尝试与端口通信。
所以,我的问题分为两部分:
- 这个初始假设正确吗?我是否需要依赖外部服务来可靠地检测外部开放的端口?
- 假设 1 的答案是肯定的,那么有哪些选项可以提供免费 API?我查看了canyouseeme.org和ping.eu,但似乎都没有提供 API。我可以向这些网站用于基于 HTML 的服务的相同页面发布 POST 并抓取 HTML 响应,但这显然不是理想的选择。
答案1
对于简单的网络基础设施(例如家庭和小型企业路由器),您的第一个假设是正确的,但更大的组织和 ISP 将实施更复杂的防火墙规则,这些规则可以根据请求的频率和类型(DDoS)自动排除 IP,仅引用几个参数。
我没有找到任何有用的 API,这些网站一次性解决问题。另一个解决方案是使用您的电话/平板电脑运行工具。
您仍然可以从网络上的一台机器(甚至是同一台机器)对您的公共 IP 运行扫描,这将为您提供开放端口的列表(除非您有防火墙规则允许所有网络机器连接到您的公共 IP 地址上的任何端口,但我认为这样做没有意义)。