• 不要只知道用 ping 来判断网络通不通了
  • 发布于 2个月前
  • 236 热度
    0 评论
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 分开监听,也就是说你可以同时监听:
# 堆代码 duidaima.com
192.168.2.123:80 tcp
192.168.2.123:80 udp
192.168.2.234:80 tcp
192.168.2.234:80 udp
SCR-20230331-paqh


0X01 如何检查

通常来说有什么服务直接用就试了,不过有时候我们需要自底向上的检查问题,那么第一步就是检查服务端的监听是否正常,正常的话客户端的连通是否顺利。首先保证我们的 TCP 和 UDP 通信时正确的,再来排查上层的程序,否则可能你调了半天程序最终发现网络压根就没通。

ss 命令
首先介绍一下用 ss 命令(socket statistics)来查看自己机器上的端口开放情况,比较常见的用法是 ss -apnl。
a 是所有 socket,包含了 tcp udp 的,也可以单独使用 t 或者 u 筛选
p 显示进程名和 PID 这些
n 不解析服务名,这样不仅速度更快而且也更便于筛选端口号
l 仅显示监听状态


nc 命令
这个 nc 命令一般会随系统附带,没有的话需要安装 netcat 软件包。它可以快速绑定一个地址和端口并进行监听,也可以快速向指定 ip 和端口发送数据。
# 监听 tcp 0.0.0.0 2333
nc -l 0.0.0.0 -p 2333

# 监听 udp 0.0.0.0 2333
nc -ul 0.0.0.0 -p 2333

# 向 tcp 127.0.0.1 2333 发内容
echo "hello, world" | nc 127.0.0.1 2333

# 向 udp 127.0.0.1 2333 发内容
echo "hello, world" | nc -u 127.0.0.1 2333
用法应该很好理解,其中 -l 是 Listen 也就是监听,-u 是指 UDP(默认情况下是 TCP)
好了,现在可以和以前那个只知道用 ping 来判断网络通不通的自己说再见了。
用户评论