linux常用http测试命令以及网络排错命令总结

时间:2024-03-08 13:38:57

一.http调试命令curl

1.curl简介

curl全称为commandline uniform resource locator,根据名称可以看出curl 命令是在命令行方式下工作的,利用url的语法进行数据的传输或文件的传输。
更多信息的了解,请参考curl的官方网站:https://curl.haxx.se/
根据官方介绍可以知道,curl 支持30多种类型的传输方式,例如:DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTPS、HTTP POST、HTTP PUT、FTP上传、基于HTTP表单的上传、代理、HTTP / 2、Cookie、用户+口令认证(Basic、Primor、摘要、CRAM-MD5、NTLM、协商和Kerberos)、文件传输恢复、代理隧道等。我们常用的也就是FILE、FTP、HTTP、HTTPS等协议。

2.curl典型应用

1)仅显示headert头信息

通过curl的“-I”参数可以获取指定网站的header头信息,这些是运维人员所需要的重要信息。

[root@m01 ~]# curl -I www.qianzhigang.top
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Thu, 07 Nov 2019 07:30:49 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: https://www.qianzhigang.top

2)使用curl实现URL重定向(这里主要测试设置了重定向的链接)

默认情况下curl是不会发送http重定向请求,需要使用“-L”参数来实现。当一个被请求的页面被重定向到另一个站点上时,就会发送一个http location header作为请求,然后将请求重定向到新的地址上。最终显示会有两个部分,例如:这里访问http://www.qianzhigang.top时,会将地址临时重定向到https://www.qianzhigang.top上(这里设置的强制https跳转)

[root@m01 ~]# curl -L -I www.qianzhigang.top
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Thu, 07 Nov 2019 07:52:35 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: https://www.qianzhigang.top

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 07 Nov 2019 07:52:35 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Set-Cookie: PHPSESSID=bf02e189b60e5e98a48f201369936ca5; path=/
Link: <https://www.qianzhigang.top/wp-json/>; rel="https://api.w.org/"

3)使用curl获取http的状态码

http状态码的获取对运维人员来说很重要,在对web进行监控的时候,我们会通过获取的http的状态码来判定网页的是否异常,如果返回的http状态码不是200,我们默认这个网页的访问时异常的,获取状态之前使用curl加参数"-I"也是可以查看到的,这里有更好的参数组合来操作获取,使用“-s”、“-o”、“-w”参数的组合来实现。说明:这里设置了302临时跳转,所以测试使用百度的链接地址

[root@m01 ~]# curl -s -o /dev/null -w%{http_code}"\n" http://www.baidu.com
200

参数说明:
-s #表示安静模式,不输出错误,或者修改进度条。
-o #表示指定结果输出到你某个文件中保存,不指定的话默认是输出到终端。
-w #表示输出的一些定义的元数据,这里输出的事%{http_code},除此之外还有http_connect、time_total、time_connect、time_appconnect、time_redirect、size_download、size_upload、content_type、ssl_varify_result等变量可提供选择。输出变量需要按照%{variable_name}的格式。
“\n” #表示换行

在测试一下之前的链接加入更多变量

[root@m01 ~]# curl -s -o /dev/null -w%{:http_code}" "%{time_total}" "%{redirect_url}"\n" http://www.qianzhigang.top
302 0.085 https://www.qianzhigang.top 
注意: " "引号中间有空格

4)下载网页内容保存到本地

-O #该参数使用url中默认的文件名保存文件到本地
[root@m01 ~]# curl -O https://www.qianzhigang.com/archives/880.html
-o #该参数将文件保存为命令行中默认的文件名保存文件到本地
[root@m01 ~]# curl -o test.html https://www.qianzhigang.com/archives/880.html

二.linux常用网络命令

1.网络管理命令

1)最常见的命令ping

ping命令主要的功能是用来检测网络的连通情况和分析网络速度。

#常用选项

    -t      #持续ping,不中断。不加该选项只ping4个包。
    -c      #ping的包数,默认是4个。
    -W      #多长时间ping一次。
    -f      #极速ping。

2)网络中的瑞士军刀nc\netcat命令

nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具

#常用选项

     -l     #用于指定nc将处于侦听模式。
     -u     #指定nc使用UDP协议,默认为TCP
     -v     #输出交互或出错信息,新手调试时尤为有用
     -w     #超时秒数,后面跟数字 
     -z     #表示zero,表示扫描时不发送任何数据

3)nmap嗅探工具

Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具。Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。

#常用选项

    -p          #指定端口号
    -p22        #单个端口
    -p22,80     #多个端口
    -p1-1000    #1到1000之间的端口

4)telnet

一种远程登录的工具。同样可以检查某个主机是否开启某个端口

#用法
    
[C:\~]$ telnet 10.0.0.99 22


Connecting to 10.0.0.99:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
SSH-2.0-OpenSSH_7.4

5)netstat


打印网络连接、路由表、tcp11种状态。

#常用选项
    -l      #只显示监听套接字。
    -n      #不做名字解析
    -t      #显示tcp端口
    -u      #显示udp端口
    -p      #显示pid和程序名字
    -r      #显示路由表
    -a      #显示所有的套接字

6)ss

跟netstat命令差不多。

#常用选项
    -l      #只显示监听套接字。
    -n      #不做名字解析
    -t      #显示tcp端口
    -u      #显示udp端口
    -p      #显示pid和程序名字
    -r      #解析主机名
    -a      #显示所有的套接字

7)iftop

iftop界面说明:

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

#常用选项

-i      #设定监测的网卡

-B      #以bytes为单位显示流量(默认是bits)

-n      #使host信息默认直接都显示IP

-P      #使host信息及端口信息默认就都显示

-m      #设置界面最上边的刻度的最大值,刻度分五个大段显示

按q退出监控。

三.网络故障排除工具

1.抓包工具

抓包方式:wireshark抓包软件在Windows中使用
Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包


    tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
    tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
    
#常用选项

-i       监听哪一个网卡 
-n       不把ip解析成主机名
-nn      不把端口解析成应用层协议
-c       指定抓包的数量
-S       不把随机序列和确认序列解析成绝对值
-w       将流量保存到文件中,文件中的信息是无法直接查看的
-r       读取文件中的内容
-v       输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 
-vv      输出详细的报文信息。

#实例

1、默认启动

tcpdump -vv     #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2、过滤主机

tcpdump -i eth1 host 192.168.1.1        #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据

tcpdump -i eth1 src host 192.168.1.1    #指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1    #指定目的地址,192.168.1.1

3、过滤端口

tcpdump -i eth1 port 80         #抓取所有经过eth1,目的或源端口是80的网络数据

tcpdump -i eth1 src port 80     #指定源端口

tcpdump -i eth1 dst port 80     #指定目的端口

4、协议过滤

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某端口的数据包

tcpdump -i eth0 tcp port 21 -nn

5、常用表达式

非 : ! or "not" (去掉双引号) 

且 : && or "and" 

或 : || or "or"

#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数

tcpdump -i eth1 \'((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))\'

#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

tcpdump -i eth1 \'((icmp) and ((ether dst host 00:01:02:03:04:05)))\'

#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 \'((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))\'

2)连通性测试工具mtr

MTR基本原理

MTR(My traceroute)是几乎所有Linux发行版本预装的网络测试工具,此工具也有对应的Windows版本,名称为WinMTR。

WinMTR的官方网站也提供下载,具体下载下载链接为:点击这里下载

MTR工具将ping和traceroute命令的功能并入了同一个工具中,实现更强大的功能。

Linux版本的mtr命令默认发送ICMP数据包进行链路探测。可以通过“-u”参数来指定使用UDP数据包用于探测。

相对于traceroute命令只会做一次链路跟踪测试,mtr命令会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr命令能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

MTR 使用方法

在Linux系统上使用

用法说明:

mtr [-hvrctglspni46] [-help] [-version] [-report] [-report-cycles=COUNT] [-curses] [-gtk] [-raw] [-split] [-no-dns] [-address interface] [-psize=bytes/-s bytes] [-interval=SECONDS] HOSTNAME [PACKETSIZE]

示例输出:

常见可选参数说明:

  • -r 或 -report:以报告模式显示输出。

  • -p 或 -split:将每次追踪的结果分别列出来,而非如“-report”统计整个结果。

  • -s 或 -psize:指定ping数据包的大小。

  • -n 或 -no-dns:不对IP地址做域名反解析。

  • -a 或 -address:设置发送数据包的IP地址。用于主机有多个IP时。

  • -4:只使用IPv4协议。

  • -6:只使用IPv6协议。

  • 另外,也可以在mtr命令运行过程中,输入相应字母来快速切换模式。

  • ?或 h:显示帮助菜单。

  • d:切换显示模式。

  • n:切换启用或禁用DNS域名解析。

  • u:切换使用ICMP或UDP数据包进行探测。

返回结果说明:

默认配置下,返回结果中各数据列的说明如下。

  • 第一列(Host):节点IP地址和域名。如前面所示,按n键可以切换显示。

  • 第二列(Loss%):节点丢包率。

  • 第三列(Snt):每秒发送数据包数。默认值是10,可以通过参数“-c”指定。

  • 第四列(Last):最近一次的探测延迟值。

  • 第五、六、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。

  • 第八列(StDev):标准偏差。越大说明相应节点越不稳定。

在Windows系统上使用

WinMTR是MTR工具在Windows环境下的图形化实现,但进行了功能简化,只支持MTR部分参数的调整设置。WinMTR默认发送ICMP 数据包进行探测,无法切换。WinMTR可以从其官方网站下载获取。和mtr命令一样,相比tracert,WinMTR能避免节点波动对测试结果的影响,所以测试结果更正确。所以,在WinMTR可用的情况下,建议优先使用 WinMTR 进行链路测试。

用法说明:

WinMTR无需安装,直接解压运行即可,操作方法非常简单。运行程序后,在 Host 字段输入目标服务器域名或 IP,注意前面不要包含空格。如下图所示。

单击 Start 开始测试,开始测试后,相应按钮变成了 Stop。运行一段时间后,单击 Stop 停止测试。

其它选项说明:

  • Copy Text to clipboard:将测试结果以文本格式复制到粘贴板。

  • Copy HTML to clipboard:将测试结果以HTML格式复制到粘贴板。

  • Export TEXT:将测试结果以文本格式导出到指定文件。

  • Export HTML:将测试结果以HTML格式导出到指定文件。

  • Options:可选参数,包括:

  • Interval(sec):每次探测的间隔(过期)时间。默认为1秒。

  • Ping size(bytes): PING探测所使用的数据包大小,默认为64字节。

  • Max hosts in LRU list: LRU列表支持的最大主机数,默认值为128。

  • Resolve names:通过反查IP以域名显示相关节点。

返回结果说明:

默认配置下,返回结果中各数据列的说明:

  • 第一列(Hostname):节点IP或域名。

  • 第二列(Nr):节点编号。

  • 第三列(Loss%):节点丢包率。

  • 第四列(Sent):已发送的数据包数量。

  • 第五列(Recv):已成功接收的数据包数量。

  • 第六、七、八、九列(Best 、Avg、Worst、Last):分别是到相应节点延迟的最小值、平均值、最大值和最后一次值。

  • 第八列(StDev):标准偏差,越大说明相应节点越不稳定。

链路测试步骤

通常情况下,链路测试流程如下图所示。

获取本地网络对应公网IP

在客户端本地网络访问 ip.taobao.com 等网站,获取本地网络对应的公网IP。

正向链路测试(PING和MTR)

从客户端向目标服务器做PING和MTR链路测试。从客户端向目标服务器域名或IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据客户端操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为目标服务器域名或IP,然后进行链路测试,记录测试结果。

反向链路测试(PING和MTR)

进入目标服务器系统内部,做反向PING和MTR链路测试。从目标服务器向客户端IP做持续的PING测试,建议至少测试100个数据包,记录测试结果。根据目标服务器操作系统环境的不同,使用WinMTR或mtr命令,设置测试目的地址为客户端 IP,然后进行链路测试,记录测试结果。

测试结果分析

参阅前述说明,对测试结果进行分析。确认异常节点后,访问 ip.taobao.com 等网站查询、获取相应节点归属运营商及网络。