一.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 等網站查詢、獲取相應節點歸屬運營商及網絡。