linux常用http測試命令以及網絡排錯命令總結


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM