关于端口你需要知道的-迷你版
0X00 基本内容
你应该听人跟你说过类似于「你看 2333 这个端口在没在监听」这句话吧,也应该听过「我可以 ping 通所以肯定不是网络的问题」这种话吧。虽然听的多了,但实际上它漏洞百出。
首先我们都知道端口号是一个数字,从 0 到 65535 其中 0~2013 叫 well-known ports 知名端口,也就是说通常某个端口就固定给某个服务使用,比如你见到 22 就第一反应该是 ssh 而非 MySQL,见到 80 就知道是 HTTP 而非 smtp。也正是如此,在 Linux 中你自己开发的程序平时监听 8080 没啥问题,但是想监听 80 的时候就要校验你的 root 权限了。
其次要知道端口是 IP 地址上的,并非电脑上的。也就是说当你电脑同时拥有 192.168.2.123
和 192.168.2.234
两个 IP 的时候,你可以启动两个 Nginx 分别监听他们的 80 端口。
最后要知道端口也是分类型的,即使是同一地址的统一端口也可以 tcp 和 udp 分开监听,也就是说你可以同时监听:
1 | 192.168.2.123:80 tcp |
0X01 如何检查
通常来说有什么服务直接用就试了,不过有时候我们需要自底向上的检查问题,那么第一步就是检查服务端的监听是否正常,正常的话客户端的连通是否顺利。首先保证我们的 TCP 和 UDP 通信时正确的,再来排查上层的程序,否则可能你调了半天程序最终发现网络压根就没通。
ss 命令
首先介绍一下用 ss
命令(socket statistics)来查看自己机器上的端口开放情况,比较常见的用法是 ss -apnl
。
a
是所有 socket,包含了 tcp udp 的,也可以单独使用t
或者u
筛选p
显示进程名和 PID 这些n
不解析服务名,这样不仅速度更快而且也更便于筛选端口号l
仅显示监听状态
nc 命令
这个 nc
命令一般会随系统附带,没有的话需要安装 netcat
软件包。它可以快速绑定一个地址和端口并进行监听,也可以快速向指定 ip 和端口发送数据。
1 | # 监听 tcp 0.0.0.0 2333 |
用法应该很好理解,其中 -l
是 Listen 也就是监听,-u
是指 UDP(默认情况下是 TCP)
好了,现在可以和以前那个只知道用 ping 来判断网络通不通的自己说再见了👋