美文网首页Linux项目架构师
linux常用http测试命令以及网络排错命令总结

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

作者: 唯爱熊 | 来源:发表于2019-11-07 14:52 被阅读0次

    一.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 等网站查询、获取相应节点归属运营商及网络。

    相关文章

      网友评论

        本文标题:linux常用http测试命令以及网络排错命令总结

        本文链接:https://www.haomeiwen.com/subject/mgkvbctx.html