此篇博客記錄使用Wireshark抓包分析協議。
目錄
一、DNS
二、分析TCP握手過程
三、TLS報文
四、HTTP協議
五、SMTP
六、ARP
七、RTP
八、RTMP
一、DNS
?????? DNS是域名系統,Domain Name System的縮寫,是基于TCP/IP的一個服務。DNS是將主機名到IP地址轉換的目錄服務。DNS是:①一個由分層的DNS服務器實現的分布式數據庫②一個使得主機能夠查詢分布式數據庫的應用層協議,使用53號端口。如圖中的221.11.1.67是西安聯通提供的DNS服務器。
?????? 域名解析總體可分為兩大步驟,第一個步驟是本機向本地域名服務器發(fā)出一個DNS響應報文(圖中所給的是向221.11.1.67發(fā)送一個DNS請求報文),報文里攜帶需要查詢的域名;第二步驟是本地域名服務器向本機回應一個DNS響應報文,里面包含域名對應的IP地址。(本例中的華為官網IP為113.142.160.4)
?請求報文如下:
?響應報文如下:
?這是回答結構,共有四個答案。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-489665.html
???? 可以看到,經過DNS查詢,得到IP地址為113.142.160.4。接下來建立TCP連接。
二、分析TCP握手過程
傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協議。
建立連接可以分為三部分,當三次握手完成,TCP客戶端和服務器成功地建立連接,可以傳輸數據了。
1.客戶端發(fā)送一個帶SYN標志的TCP報文到服務器,這是三次握手中報文1。
2.服務器端回應客戶端,發(fā)送一個帶ACK標志和SYN標志的報文,這是三次握手中的第2個報文。因此,它表示對剛才客戶端SYN報文的回應;同時又標志SYN給客戶端,詢問客戶端是否準備好進行連接。
3.客戶端必須再次回應服務端一個ACK報文,這是報文3。
???? 如下圖所示,本機(10.94.49.169)和華為(113.142.160.4)進行了三次握手。
?第一次握手:客戶端向服務器發(fā)送連接請求包,標志位SYN置為1,序號為Seq = X (X = 0)。
第二次握手:服務器收到客戶端發(fā)過來的報文,由SYN=1知道客戶端要求建立聯機。向客戶端發(fā)送一個SYN和ACK都置為1的TCP報文,設置初始序號Seq=Y(Y=0),將確認序號ACK設置為客戶的序列號Seq+1(即X=1)。
?第三次握手:客戶端針對SYN包發(fā)送ACK包確認應答??蛻舳耸盏椒掌靼l(fā)來的包檢查ACK是否正確,以及標志位ACK是否為1。若正確,客戶端再次發(fā)送確認包,ACK標志位為1,SYN標志位為0。確認序列號ACK=1,發(fā)送序號為X+1=1。服務器收到后確認序列值與ACK=1則連接建立成功,即可傳輸數據。
三、TLS報文
??????? TLS(Transport Layer Security,傳輸層安全協議)用于兩個應用程序之間提供保密性和數據完整性。
??????? 建立握手連接的目的:(1)身份的驗證,client與server確認對方是它相連接的。(2)client與server交換session key,用于連接后數據的傳輸加密和hash校驗。
??????? 客戶端會先向服務端發(fā)送Client Hello消息,其中包括了隨機數,密碼套件以及密鑰交換算法參數。服務端收到后會給確認,發(fā)送給客戶端Server Hello數據包,服務端會根據Client Hello提供的協議版本列表,選擇版本。
?下圖是TLS協議Client Hello。
?下圖是服務端發(fā)出的Server Hello。
?TLS的握手過程就結束了,后面即可加密傳輸消息了。
四、HTTP協議
?????? HTTP協議(HyperText Transfer Protocol)一般指HTTP(超文本傳輸協議),它是Web的核心。超文本傳輸協議是一種用于分布式、協作式和超媒體信息系統的應用層協議,是因特網上應用最為廣泛的一種網絡傳輸協議,所有的WWW文件需遵守這個標準。HTTP由兩個程序實現:一個客戶程序和一個服務器程序??蛻舫绦蚝头掌鞒绦蜻\行在不同的端系統中,通過交換HTTP報文進行會話。HTTP定義了這些報文的結構以及客戶和服務器進行報文交換的方式。
HTTP請求/響應步驟:
1.客戶端連接web服務器:HTTP客戶端與web服務器建立一個TCP連接。
2.客戶端向服務器發(fā)起HTTP請求:通過已經建立的TCP連接,客戶端向服務器發(fā)送一個請求報文。
3.服務器接收HTTP請求并返回HTTP響應:服務器解析請求,定位請求資源,服務器將資源副本寫到TCP連接,有客戶端讀取。
4.釋放TCP連接:若connection模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection模式為
?? ? ?? HTTP報文三部分組成,行、首部行和實體主體,如下圖。在請求報文中,開始行就是請求行。本例中所訪問的為www.cctv.com。
?????? 下圖是抓取的請求報文,請求方法為GET,版本協議號是HTTP/1.1,主機名為www.cctv.com,User-Agent是生成請求的瀏覽器類型,Accept是客戶端可識別的響應內容類型列表,Accept-Language是客戶端可接受的自然語言,Accept-Encoding是客戶端可接受的編碼壓縮格式,connection為連接方式。
?下圖為響應報文,可以看到我們的請求被重定向到www.cctv.com。
五、SMTP
?????? SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,是一種提供可靠且有效的電子郵件傳輸的協議,是因特網電子郵件的核心。SMTP是建立在FTP文件傳輸服務上的一種郵件服務,主要用于系統之間的郵件信息傳遞,并提供有關來信的通知。SMTP獨立于特定的傳輸子系統,且只需要可靠有序的數據流信道支持,SMTP的重要特征之一是其能跨越網絡傳輸郵件,即“SMTP郵件中繼”。
????? 本例中,所使用的為QQ郵箱,進行抓包,所以查詢到的是QQ的郵件服務器,但要注意抓取SMTP數據包需要關閉郵件客戶端的SSL加密選項。首先可以看到本機向(211.11.1.67)DNS服務器發(fā)送了DNS查詢。
?DNS查詢結束后,需要進行TCP握手,建立TCP連接,然后才開始SMTP報文。第一條SMTP報文由服務器發(fā)給客戶端,響應代碼220表示連接建立成功。
?????? 客戶端收到220代碼后,繼續(xù)發(fā)送請求,首先是發(fā)送EHLO命令。一般來說客戶端和SMTP服務端建立連接之后就需要發(fā)送EHLO或者是HELO命令,后面附帶的參數是domain,即相當于客戶端的主機域名或者是主機名,這一步的主要作用是聲明身份,EHLO/HELO命令相當于是HELLO命令,兩者之間的主要區(qū)別是EHLO帶身份驗證而HELO不帶身份驗證,因此EHLO要更加安全。
?當服務端接收到客戶端的EHLO請求之后,返回了一個250代碼并且附帶了支持的身份驗證方式。
?客戶端使用AUTH命令進行身份驗證。
?身份驗證成功后,服務器端向客戶端返回235的成功代碼。
?到這里就完成了和SMTP服務器建立連接和身份驗證的步驟。隨后客戶端發(fā)送MAIL FROM命令,聲明郵件的發(fā)件人。
?服務器返回250代碼確定操作成功。
?然后,客戶端發(fā)送RCPT TO命令聲明郵件的收件人。
?
服務器返回250代碼確定操作成功。
?
?客戶端使用DATA命令,告知服務器要開始傳輸郵件的正文內容。
?服務端返回354代碼,告知郵件的內容結束以<CR><LF>.<CR><LF>為標記。
客戶端接收到354代碼后,會給服務端發(fā)送一個確認數據包,并開始傳輸郵件內容。
?郵件正文。我們可以看到在上面的數據包中包含了SMTP和IMF兩個部分,因為抓包發(fā)送的郵件內容都是文本,所以直接使用IMF協議就可以傳輸,而SMTP協議中的報文內容則是DATA命令的終止標志。由于關閉了SSL加密,所以可以直接在這里面提取到郵件內容。在客戶端發(fā)送完郵件內容之后,還會接著發(fā)送一個QUIT命令來表示結束這次的SMTP傳輸。
?服務器在接受到數據之后會返回250代碼表示接受成功并且再返回221代碼表示結束本次SMTP傳輸。
?文章來源:http://www.zghlxwxcb.cn/news/detail-489665.html
?至此,整個SMTP郵件傳輸過程結束。
六、ARP
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議,將網絡層地址(IP地址)和鏈路層地址(MAC地址)之間進行轉換。
ARP報文格式如下
?實驗環(huán)境,一臺電腦和一部手機處在同一個局域網下,電腦IP為172.20.10.4,手機的IP為172.20.10.2。使用電腦來ping手機,使用wireshark抓包。
請求報文如下:
?響應報文如下:
七、RTP
RTP(Real-time Transport Protocol,實時傳輸協議),通常運行在UDP上。它用來為IP網上的語音、圖像、傳真等多種需要實時傳輸的多媒體數據提供端到端的實時傳輸服務。RTP用于在單播或多播網絡中傳送實時數據,一般音頻、視頻會議,視頻監(jiān)控,語音電話和翻譯器、混合器等都會使用到RTP協議。
RTP分組首部字段
?
有效載荷類型字段的長度為7比特。對于音頻流,有效載荷類型字段用于指示所使用的音頻編碼類型。對于一個視頻流,有效載荷類型用于指示視頻編碼類型。
序號字段長為16比特。每發(fā)送一個RTP分組則該序號增加1,而且接收方可以用該序號來檢測丟包和恢復分組序列。
時間戳字段長為32比特。它反映了RTP數據分組中的第一個字節(jié)的采樣時刻。
同步源標識符(SSRC)長為32比特。它標識了RTP流的源。通常在RTP會話中的每個流都有一個不同的SSRC。
下圖為兩臺電腦進行語音通話所抓取的部分RTP包。
RTP報文如下:
八、RTMP
RTMP(Real-Time Messaging Protocol實時消息傳送協議)的縮寫,RTMP是流媒體傳輸協議,本次實驗使用的為VLC,播放RTMP網絡流地址,使用wireshark進行抓包分析。(測試直播地址為rtmp://media3.scctv.net/live/scctv_800)
Wireshark抓包結果如下,可以看到首先進行DNS查詢,然后為TCP三次握手建立連接,之后才進行RTMP。
?
?
?首先,客戶端向服務端發(fā)送C0+C1,確認版本。
?客戶端向服務端發(fā)送C0塊,表示和服務器握手,C0中包含版本號。服務器收到C0之后,檢查C0版本支持,返回發(fā)送一個S0,若不支持則應終止連接??蛻舳撕头斩硕挤謩e等待C1和S1,等待版本確認。客戶端收到S1后發(fā)送C2,服務器收到C1后發(fā)送S2,握手完成。下圖為服務器回復的確認包(S0+S1+S2)。
?
?客戶端發(fā)送C2,握手完成。
?下圖為客戶端發(fā)送Connect,報文如下:
?
客戶端向服務器發(fā)送確認窗口大小,并請求創(chuàng)建流(createStream)。
服務器端給出響應。
?客戶端向服務器發(fā)送播放命令,請求播放stream,并設置Buffer Length 1,3000ms。
服務端給出響應結果。
?
服務器向客戶端發(fā)送推流通知,并附帶元數據信息(分辨率、幀率、音頻采樣率等等)和視頻、音頻數據。此時客戶端就可以開始正常播放RTMP流了。
?
??? 大概的實驗流程就如上所示了,大家一定要自己動手實踐一下才能更好地掌握知識。
?
?
?
?
到了這里,關于用Wireshark抓包分析協議 計算機網絡的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!