【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/