网络通信故障排查

网络通信故障排查常用命令

1. ifconfig命令

  主要用于查看当前系统的网卡和IP地址信息,通过此命令,可以查看以下信息:

  • 本机当前激活的网卡列表
  • 每个网卡的IPV4地址
  • 每个网卡的IPV6地址
  • 子网掩码
  • 广播地址

可以看到本机当前有两块激活的网卡:eth0和lo

ifconfig命令默认只展示激活的网卡,可以通过ifconfig -a命令,查看本机下所有的网卡信息(激活和未激活)

ifconfig 网卡名 up命令可以激活网卡
ifconfig 网卡名 down命令可以禁用网卡

可通过ifconfig 网卡 add IPAddress命令将IP地址绑定到指定的网卡

ifconfig eth0 add 198.140.1.14

可通过ifconfig 网卡 del IPAddress命令从指定网卡上解绑对应的IP地址

示例:

ifconfig lo add 198.120.1.14
ifconfig

可以看到,在上述的操作中,网卡lo已经绑定了地址127.0.0.1,还可以通过ifconfig指令绑定新的IP地址,此时就可以使用新的IP地址访问原来的网络了。

2. ping命令

ping命令一般用于侦测本机到目标主机的网络是否通畅, ping命令是通过发送ICMP数据包实现的;

ping 198.120.75.20

同时,ping命令的目前也可以是域名,通过ping这个域名,会获取到域名解析后的IP地址

ping www.baidu.com

可以看到域名www.baidu.com解析后的IP地址为36.154.44.95

3.telnet命令

telnet是较为常用的网络调试命令之一, 如果一个服务程序开启了对外监听服务,则可以使用telnet ip port的方式进行连接,如果链接的时候不指定端口号,则会使用默认的端口号32.

例如可使用telnet链接百度服务

telnet wwww.baidu.com 80

img

使用示例:

如果有一个svn服务器,为了检测svn服务能否正常对外服务,则首先可通过ping命令验证到达这个IP地址的网络是否通畅(即物理链路是否通畅);如果物理链路通常,则使用telnet去链接对应的svn服务器,默认svn服务器使用3690端口,如果能成功连上,则说明这个svn服务器正常开启且能够对外提供服务;

可以使用telnet实现邮件发送功能;首先通过telnet链接邮箱服务器,进行登录验证,即可按照特定的格式发送邮件信息;

4. netstat命令

netstat命令用于查看网络的链接状态;常见的参数选项如下所示:

  • -a 表示显示所有选项,netstat默认不显示listen相关的选项
  • -t 仅仅显示tcp相关的选项
  • -u 仅仅显示udp相关的选项
  • -l 仅显示处于listen状态的相关选项
  • -p 显示建立相关链接的程序名
  • -n 不显示别名,将能显示数字的全部转换为数字显示 如127.0.0.1默认会显示为别名localhost,80端口会被显示为http
  • -r 显示路由信息,路由表
  • -s 按照各个协议进行统计
  • -e 显示扩展信息
  • -c 每格固定的时间执行netstat
5. lsof命令

lsof命令用于列出Linux下各个进程打开的文件描述符类型,在Linux下所有宇资源句柄相关的内容都被同意抽象为文件描述符;例如文件句柄,或者socket, 如下所示:

lsof | more

lsof输出的内容较多,可通过过滤来查看指定的内容:

lsof -i | grep myapp

也可按照进程过滤查看:

lsof -p pid

lsof只能查看当前用户有权限查看的fd;

socket也是一种文件描述符,如果需要显示当前系统网络链接情况,则可使用命令lsof -i,可以形象的展示系统当前的出入链接情况;如果需要不显示ip地址和端口的别名,则需要分别添加-P,-n参数来实现;

lsof -Pin

可使用如下命令查看某个端口是否被占用:

lsof -i:port

恢复被删除的文件:

Linux下某个正在被进程使用的文件被删除了,可以对其尝试恢复。可进入/proc/pid/fd/目录下查看,找到对应的被删除文件,执行如下命令即可恢复:

cat file > newfile

file为目录/proc/pid/fd/下的被删除文件,newfile为指定恢复后的文件名

6. nc命令

nc即为netcat命令,常用于模拟一个服务器程序被客户端链接,也可以模拟一个客户端程序来链接其他的服务器;链接上之后可以进行数据收发;

nc命令默认使用TCP,加上参数-u可使用udp

nc可用于模拟服务端程序,被其客户端链接,通过添加参数-l,可在某个IP地址端口上开启监听服务,以便让其他客户端链接,可在命令中加上-v参数,显示详细的信息;

nc -lv 127.0.0.1 6500

img

也可以模拟客户端去链接其他服务器,此时不需要加-l参数;在客户端链接服务器的时候,一般都是操作系统为客户端分配一个随机的端口号连接到服务器,在使用nc命令模拟客户端的时候,可以通过-p参数指定客户端的端口号;

nc -v -p 5000 www.baidu.com 80

可使用nc模拟服务端和客户端进行相互通信,也可以进行文件传输,文件传输的方法如下所示:

  1. 首先开启服务端监听,指定需要存储的文件路径:

nc -v -l 127.0.0.1 6500 > file.txt

开启对6500端口的监听,等到接受文件数据存储到文件file.txt

  1. 开启客户端,发送文件testFile.txt

nc -v 127.0.0.1 6500 < testFile.txt

7. curl命令

  与windows下的PostMan一样,curl命令是Linux下模拟发送http请求的命令;

http请求的常用方式有GET和POST,可使用参数—X指定请求的方式

  • -X GET GET请求
  • -X POST POST请求

如果是POST请求方式,还需要增加-d参数,指定POST的数据;

如果在发送HTTP请求的时候,需要制定一些HTTP请求头的信息,则可以使用-H参数来进行指定:

  • -F 模拟表单上传功能
  • -H 设置请求的头部信息
  • -A 可设置请求时的user-agent字段的值(--user-agent)
  • -e 可设置请求时的refer字段的值(--referer)
  • -i 在请求的应答结果中包含HTTP头部信息(--include)
  • -I 在请求的应答结果仅显示HTTP头部信息(--head)
curl --include www.baidu.com

img

例如,需要表单上传文件,表单一共有两个字段,uploadVideo,title,且需要设置HTTP头信息:

curl -X POST https://www.testsite.com/api/upload 
-F "uploadVideo=@D:/video/car.mp4" 
-F "title=car" 
-H "Content-Type:multipart/form-data"
8. curl命令

  tcpdump是Linux提供的一个非常强大的抓包工具,对于排查网络问题非常有用;

tcpdump使用必须有sudo权限

常用参数:

  • -i 指定需要捕获的网卡名(ifconfig可获得),如果需要捕获所有网卡,则网卡名指定为any
  • -X 以ASCII和十六进制的形式输出捕获的内容,减去链路层的包头信息
  • -XX 以ASCII和十六进制的形式输出捕获的内容,包括链路层的包头信息
  • -vv 显示详细的抓包数据
  • -vvv 显示更详细的抓包数据
  • -w 将抓取的数据包的原始信息写入指定的文件

此外,tcpdump命令还支持各种数据包过滤的表达式:

# 抓取特定网卡eth0特定端口的数据
tcpdump -i eth0 'port 8888'

# 仅抓取经过8888端口的数据包 (tcp:8888 udp:8888)
tcpdump -i any 'port 8888'

# 仅抓取经过tcp:8888端口的数据包
tcpdump -i any 'tcp port 8888'

# 仅显示源端口是tcp:8888的数据包
tcpdump -i any 'tcp src port 8888'

# 仅显示源端口是tcp:8888或者目标端口是udp:9999
tcpdump -i any 'tcp src port 8888 or udp dst port 9999'

# 仅显示源地址是127.0.0.1且源端口是tcp:9999的数据包
tcpdump -i any 'src host 127.0.0.1 and tcp src port 9999' -XX -nn -vv 

可以使用nc模拟建立客户端和服务端通信,然后通过tcpdump进行抓包:

# 终端1 建立服务端开始监听
nc -l -u -v 127.0.0.1 12345

# 终端2 开始抓包
tcpdump -i any `udp port 12345` -X -nn -vv 

# 终端3 建立客户端,链接服务端并发送消息
nc -u -v 127.0.0.1 12345

img

posted @ 2023-04-12 22:02  Alpha205  阅读(144)  评论(0编辑  收藏  举报