端口与服务查询

双向检索端口注册表:输入 443 这样的端口号,或 postgresql 这样的服务名,表格就会列出所有匹配的分配记录、它使用的传输协议、所属范围以及这个端口的用途。数据是本页内置的一份公开注册表副本,因此完全没有网络连接也能查询,您输入的内容也不会离开浏览器。本页不会扫描端口,它无法告诉您某台机器上哪些端口是开放的 —— 它说明的是某个数字代表什么意思。
离线参考数据已载入。没有任何内容被发送出去。
输入端口号或服务名,或选择上方的一个示例。
公认端口,0 到 1023。 这些端口逐个分配给特定的协议,也是唯一一类在任何地方含义都相同的端口:22 是 SSH,80 是明文 HTTP,443 是基于 TLS 的 HTTP。在服务器上它们通常只有具备管理员权限的进程才能占用,正因如此,一个本不该在那里监听的守护进程才值得多看一眼。

注册端口,1024 到 49151。 它们同样经过登记,但任何进程都可以使用,所以这里的数字告诉您的是它的登记用途,而不一定是您眼前看到的用途:8080 与 8443 登记为备用端口,但实际常常被用于完全不同的东西,开发用的服务器也可能出现在这个范围内的任意数字上。

动态或私有端口,49152 到 65535。 这些端口有意保持未分配:操作系统会为连接的外出端临时挑一个,它本身没有稳定的含义。这个范围内的数字只能在某一次会话的上下文里去理解,所以离线参考数据对它说不出任何有用的东西。

怎么读这张表。 注册表把端口同时分配给协议和传输方式,同一个数字上可能挂着几个互不相干的服务:514 在 TCP 上是远程 shell,在 UDP 上是 syslog;465 既承载一种较旧的邮件提交服务,也是一种 IGMP 变体。当某一行列出多个服务名时,请先看清每个名字后面方括号里的传输方式,再判断您的流量属于哪一个。查不到某个数字并不是错误:注册表只是没有为它分配记录,而页面依然会告诉您它落在哪个范围内。
如何使用这份清单。这里说的并不是某个端口处于开放状态 —— 只是说:如果它背后的服务对任何能连到这台机器的人都有响应,那么风险比这项服务本身的资历所暗示的要高。请在您自己拥有的机器上、从内部、使用系统自带的工具来检查这些项目:

设计上就是明文传输。 23 telnet 21 ftp 389 ldap 161 snmp — 无论密码还是团体名(community string),在线路上都是明文传输的。
文件共享与远程控制。 445 139 137 3389 5900 — 它们面向的是局域网,绝不应该能从互联网访问到,正因如此它们才成了扫描时最常发现的入口点。
数据库与缓存。 3306 1433 5432 6379 27017 11211 — 其中大多数原本设计为位于应用之后,而且有几种在默认配置下根本没有身份验证。
控制接口。 2375 — 一个可以在宿主机上启动容器的 API,它登记的传输方式是明文,就排在一个加密的同类端口旁边。能访问到它就等于能在机器上执行命令。
被流行软件借用的端口号。 9200 — 注册表把它的记录写成一种移动 Web 服务端口,而同一个数字又被一款并未收录进注册表的搜索引擎产品广泛使用。正因有这样的行,表格显示的才是登记的用途,而不是一份软件清单。

别再靠猜了,应该这样做。在您掌控的机器上,让操作系统告诉您是哪个进程占用了某个端口(ss -lntup用于 Linux,netstat -abno用于 Windows),再根据这个答案做判断。端口能不能被访问到是一个配置问题,正确的处置顺序是:停掉该服务、把它绑定到回环地址,或者把它置于防火墙之后。