公众号旧文

80 端口一定是 HTTP 网站?我用 Nmap 扫了自己,才发现事情没那么简单。

作者:胖子阅读 —

很多人对端口号,大概会有一种条件反射。

比如:

  • 80 = HTTP
  • 443 = HTTPS
  • 3389 = 远程桌面
  • 22 = SSH

仿佛这些数字天然就对应着某种服务。

刚刚,我用 Nmap 扫了自己的电脑,才发现事情并没有那么简单。

一、事情的开始

我刚在 Windows 上安装了 Nmap。

它最常见的用途,就是扫描一台机器开放了哪些端口。

比如扫描我自己的电脑:

nmap 127.0.0.1

结果输出是这样的:

PORT      STATE SERVICE
80/tcp    open  http
135/tcp   open  msrpc
445/tcp   open  microsoft-ds
902/tcp   open  iss-realsecure
912/tcp   open  apex-mesh
1038/tcp  open  mtqp
3389/tcp  open  ms-wbt-server
5357/tcp  open  wsdapi
10000/tcp open  snet-sensor-mgmt

其中有一行非常显眼:

80/tcp open http

看到这里,第一反应是:

我电脑什么时候开网站了?

但问题是,我并没有装 nginx,也没有装 Apache,更没开 IIS。

于是我继续往下查。

二、到底是谁占用了 80 端口?

netstat -ano | findstr ":80 "

结果如下:

  TCP  0.0.0.0:80  0.0.0.0:0  LISTENING  7160

意思是:

有一个 PID 为 7160 的进程,正在监听 80 端口。

再接着查:

tasklist /fi "PID eq 7160"

结果让我更懵了:

映像名称       PID   会话名    会话#     内存使用
========= ======== ======= ======= ===========
svchost.exe  7160  Services     0     12,772 K

这不是 Web 服务器。

这是 Windows 系统进程。

三、答案出现

但 svchost.exe 本身并不是真正的服务。

它只是服务宿主进程。

很多 Windows 服务,都会挂在 svchost.exe 里面运行。

于是我继续执行:

tasklist /svc /fi "PID eq 7160"

结果终于出来了:

映像名称         PID       服务
=========== ======== =========
svchost.exe    7160   iphlpsvc

也就是 IP Helper(IP 帮助服务)

四、为什么 IP 帮助服务会监听 80 端口?

这时候,产生了一个巨大的认知冲击:

80 端口,不是 HTTP 吗?

实际上,并不是。

准确地说,80 只是通常被 HTTP 使用。

它并不是硬性规定。

端口号本质上只是一个数字。

真正决定通信内容的,是应用层协议。

也就是说任何程序,都可以监听任何端口。

五、很多人从来没意识到的事情

比如:

  • SSH 可以跑在 443
  • 游戏服务器可以跑在 53
  • 数据库甚至可以监听 80

现实世界里,端口号和协议之间,并不是强绑定关系。

很多时候只是约定俗成。

六、那为什么 Nmap 会显示 HTTP?

因为 Nmap 只是根据常见端口习惯做猜测。

当它看到:

80/tcp

就会倾向于标记成:

HTTP

但这并不代表,我的电脑里面真的跑着网站。

七、一个更有意思的问题

很多人学习网络时,记住的都是端口号对应表。

比如:

  • 80 → HTTP
  • 443 → HTTPS
  • 22 → SSH

但真实世界里的网络,并不是背端口号对应表那么简单。

真正重要的是:

  • 谁在监听
  • 监听在哪个地址
  • 使用什么协议
  • 是否允许外部访问
  • 是否经过代理或转发

比如:

0.0.0.0:80

和:

127.0.0.1:80

安全意义完全不同。

前者意味着,所有网卡都能访问。

后者则意味着,只有本机能访问。

八、最后的反直觉结论

很多人以为:

80 端口 = 网站

但这次我意识到:

端口号从来都不等于服务本身。

它只是一个入口编号。

真正决定通信内容的,是程序和协议。

扩展阅读:

关于“胖子百科”被“网络技术联盟站”多次洗稿的说明

关于“胖子百科”被瑞哥小号“网络技术干货圈”更多次洗稿的说明