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