#一.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、POP三、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTPS、HTTP POST、HTTP PUT、FTP上传、基于HTTP表单的上传、代理、HTTP / 二、Cookie、用户+口令认证(Basic、Primor、摘要、CRAM-MD五、NTLM、协商和Kerberos)、文件传输恢复、代理隧道等。咱们经常使用的也就是FILE、FTP、HTTP、HTTPS等协议。 ##2.curl典型应用 ####1)仅显示headert头信息 经过curl的“-I”参数能够获取指定网站的header头信息,这些是运维人员所须要的重要信息。html
[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跳转)linux
[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临时跳转,因此测试使用百度的连接地址nginx
[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” #表示换行 在测试一下以前的连接加入更多变量web
[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)下载网页内容保存到本地shell
-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)最多见的命令pingjson
ping命令主要的功能是用来检测网络的连通状况和分析网络速度。 #经常使用选项 -t #持续ping,不中断。不加该选项只ping4个包。 -c #ping的包数,默认是4个。 -W #多长时间ping一次。 -f #极速ping。
####2)网络中的瑞士军刀nc\netcat命令api
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 输出详细的报文信息。 #实例 一、默认启动 tcpdump -vv #普通状况下,直接启动tcpdump将监视第一个网络接口上全部流过的数据包。 二、过滤主机 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 三、过滤端口 tcpdump -i eth1 port 80 #抓取全部通过eth1,目的或源端口是80的网络数据 tcpdump -i eth1 src port 80 #指定源端口 tcpdump -i eth1 dst port 80 #指定目的端口 四、协议过滤 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 五、经常使用表达式 非 : ! 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):最近一次的探测延迟值。
-
第5、6、七列(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):已成功接收的数据包数量。
-
第6、7、8、九列(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 等网站查询、获取相应节点归属运营商及网络。