【Linux】网络调试命令总结
ping
测试网络连通性
ifconfig
显示当前系统中所有网络设备,基于ICMP协议开发的。
netstat
参数
-a (all)显示所有选项,netstat 默认不显示 LISTEN 相关。 -t (tcp)仅显示 tcp 相关选项 -u (udp)仅显示 udp 相关选项 -n 不显示别名,能显示数字的全部转化成数字 -l 仅列出有在 Listen (监听) 的服務状态 -p 显示建立相关链接的程序名 -r 显示路由信息,路由表 -e 显示扩展信息,例如uid等 -s 按各个协议进行统计 (重要) -c 每隔一个固定时间,执行该 netstat 命令。
实例
netstat -apn|grep 6666 # 查看端口6666相关的网络状态
netstat Socket -x -alepn # 查看套接字网络连接状态
netstat -atn # 查看TCP套接字网络连接状态
lsof
列出已经打开的文件描述符
实例
lsof -Pni # **lsof -i** 默认也会显示 ip 地址和端口号的别名,我们只要使用 **-n** 和 **-P** 选项就能相对应地显示 ip 地址和端口号
lsof -i | grep myapp # grep 命令过滤我们想要查看的进程打开的 fd 信息
lsof -p pid # 过滤出指定的进程打开的 fd 信息
tcpdump
参数
-i 指定要捕获的目标网卡名,网卡名可以使用前面章节中介绍的 ifconfig 命令获得;如果要抓所有网卡的上的包,可以使用 any 关键字。
## 抓取网卡ens33上的包 tcpdump -i ens33 ## 抓取所有网卡上的包 tcpdump -i any
-X 以 ASCII 和十六进制的形式输出捕获的数据包内容,减去链路层的包头信息;-XX 以 ASCII 和十六进制的形式输出捕获的数据包内容,包括链路层的包头信息。
-n 不要将 ip 地址显示成别名的形式;-nn 不要将 ip 地址和端口以别名的形式显示。
-S 以绝对值显示包的 ISN 号(包序列号),默认以上一包的偏移量显示。
-vv 抓包的信息详细地显示;-vvv 抓包的信息更详细地显示。
-w 将抓取的包的原始信息(不解析,也不输出)写入文件中,后跟文件名:
tcpdump -i any -w filename
-r 从利用 -w 选项保存的包文件中读取数据包信息。
实例
tcpdump -i any -nn -S ‘tcp port 3000‘ # 查看经过 TCP 端口 3000 上的数据包
nc
实例
使用 -l 选项(单词 listen 的第一个字母)在某个 ip 地址和端口号上开启一个侦听服务,以便让其他客户端连接。通常为了显示更详细的信息,会带上 -v 选项。
nc -v -l 127.0.0.1 6000 # 模拟一个服务器程序
用 nc 命令模拟一个客户端程序时,我们不需要使用 -l 选项,直接写上 ip 地址(或域名,nc 命令可以自动解析域名)和端口号即可
nc -v www.baidu.com 80 # 模拟一个客户端 连接百度 web 服务器 nc -v -p 5555 www.baidu.com 80 # -p 选项指定使用 5555 端口连接上了百度
telnet
实例
# 检测指定 ip 地址和端口号的侦听服务是否存在 telnet 120.55.94.78 8888 # telnet ip port
cur
实例
模拟发送 http 请求
curl http://www.baidu.com # curl 页面url 默认行为是把目标页面内容输出到 shell 窗口
# -X 选项来显式指定请求是 GET 还是 POST 方式(不指定使用默认 GET 方式) curl -X GET http://www.baidu.com/index.php?s=9 curl -X POST -d ‘somepostdata‘ ‘https://www.somesite.com/api/v1/chat‘
# 发送 http 请求时设置增加一些头部信息 使用 -H(或 –header)指定 curl -X POST -H ‘Content-Type: application/x-www-form-urlencoded‘ -H ‘Accept: application/json‘ -H ‘X-Requested-With: XMLHttpRequest‘ -d ‘somepostdata‘ ‘https://www.somesite.com/api/v1/chat‘
# http 的应答结果中包含 http 头部信息,可以使用 -i 选项 curl -I http://www.baidu.com/