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