chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么我抓不到baidu的數(shù)據(jù)包

dyquk4xk2p3d ? 來源:良許Linux ? 2023-01-15 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


	

最近,有位讀者問起一個奇怪的事情,他說他想抓一個baidu.com的數(shù)據(jù)包,體驗下看包的樂趣。

但卻發(fā)現(xiàn)“抓不到”,這就有些奇怪了。

我來還原下他的操作步驟。

首先,通過ping命令,獲得訪問百度時會請求哪個IP。

$pingbaidu.com
PINGbaidu.com(39.156.66.10)56(84)bytesofdata.
64bytesfrom39.156.66.10(39.156.66.10):icmp_seq=1ttl=49time=30.6ms
64bytesfrom39.156.66.10(39.156.66.10):icmp_seq=2ttl=49time=30.6ms
64bytesfrom39.156.66.10(39.156.66.10):icmp_seq=3ttl=49time=30.6ms

從上面的結(jié)果可以知道請求baidu.com時會去訪問39.156.66.10。

于是用下面的tcpdump命令進行抓包,大概的意思是抓eth0網(wǎng)卡且ip39.156.66.10的網(wǎng)絡(luò)包,保存到baidu.pcap文件中。

$tcpdump-ieth0host39.156.66.10-wbaidu.pcap

此時在瀏覽器中打開baidu.com網(wǎng)頁。或者在另外一個命令行窗口,直接用curl命令來模擬下。

$curl'https://baidu.com'

按理說,訪問baidu.com的數(shù)據(jù)包肯定已經(jīng)抓下來了

然后停止抓包。

再用wireshark打開baidu.pcap文件,在過濾那一欄里輸入http.host == "baidu.com"。

此時發(fā)現(xiàn),一無所獲。

f584d61a-947a-11ed-bfe3-dac502259ad0.png在wireshark中搜索baidu的包,發(fā)現(xiàn)一無所獲

這是為啥?

到這里,有經(jīng)驗的小伙伴,其實已經(jīng)知道問題出在哪里了。

為什么沒能抓到包

這其實是因為他訪問的是HTTPS協(xié)議的baidu.com。HTTP協(xié)議里的Host和實際發(fā)送的request body都會被加密。

正因為被加密了,所以沒辦法通過http.host進行過濾。

但是。

雖然加密了,如果想篩選還是可以篩的。

HTTPS握手中的Client Hello階段,里面有個擴展server_name,會記錄你想訪問的是哪個網(wǎng)站,通過下面的篩選條件可以將它過濾出來。

tls.handshake.extensions_server_name=="baidu.com"
f59b80b8-947a-11ed-bfe3-dac502259ad0.png通過tls的擴展server_name可以搜索到baidu的包

此時選中其中一個包,點擊右鍵,選中Follow-TCP Stream。

f5ad4d5c-947a-11ed-bfe3-dac502259ad0.png右鍵找到tcp 流

這個TCP連接的其他相關(guān)報文全都能被展示出來。

f5bbd642-947a-11ed-bfe3-dac502259ad0.pngHTTPS抓包

從截圖可以看出,這里面完整經(jīng)歷了TCP握手TLS加密握手流程,之后就是兩段加密信息TCP揮手流程。

可以看出18號和20號包,一個是從端口56028發(fā)到443,一個是443到56028的回包。

一般來說,像56028這種比較大且沒啥規(guī)律的數(shù)字,都是客戶端隨機生成的端口號。

443,則是HTTPS的服務(wù)器端口號。

HTTP用的是80端口,如果此時對著80端口抓包,也會抓不到數(shù)據(jù)。

粗略判斷,18號和20號包分別是客戶端請求baidu.com的請求包和響應(yīng)包。

點進去看會發(fā)現(xiàn)URL和body都被加密了,一無所獲。

那么問題就來了。有沒有辦法解密里面的數(shù)據(jù)呢?

有辦法。我們來看下怎么做。

解密數(shù)據(jù)包

還是先執(zhí)行tcpdump抓包

$tcpdump-ieth0host39.156.66.10-wbaidu.pcap

然后在另外一個命令行窗口下執(zhí)行下面的命令,目的是將加密的key導出,并給出對應(yīng)的導出地址/Users/xiaobaidebug/ssl.key

$exportSSLKEYLOGFILE=/Users/xiaobaidebug/ssl.key

然后在同一個命令行窗口下,繼續(xù)執(zhí)行curl命令或用命令行打開chrome瀏覽器。目的是為了讓curl或chrome繼承這個環(huán)境變量。

$curl'https://baidu.com'
或者
$open-aGoogleChrome#在mac里打開chrome瀏覽器

此時會看到在/Users/xiaobaidebug/下會多了一個ssl.key文件。

這時候跟著下面的操作修改wireshark的配置項。

f5d18c9e-947a-11ed-bfe3-dac502259ad0.png打開wireshark的配置項

找到Protocols之后,使勁往下翻,找到TLS那一項。

f5e1cb9a-947a-11ed-bfe3-dac502259ad0.png在配置項中找到Protocols

將導出的ssl.key文件路徑輸入到這里頭。

f5edfd98-947a-11ed-bfe3-dac502259ad0.png在Protocols中找到TLS那一欄

點擊確定后,就能看到18號和20號數(shù)據(jù)包已經(jīng)被解密。

f5fadff4-947a-11ed-bfe3-dac502259ad0.png解密后的數(shù)據(jù)包內(nèi)容

此時再用http.host == "baidu.com",就能過濾出數(shù)據(jù)了。

f60d21a0-947a-11ed-bfe3-dac502259ad0.png解密后的數(shù)據(jù)包中可以過濾出baidu的數(shù)據(jù)包

到這里,其實看不了數(shù)據(jù)包的問題就解決了。

但是,新的問題又來了。

ssl.key文件是個啥?

這就要從HTTPS的加密原理說起了。

HTTPS握手過程

HTTPS的握手過程比較繁瑣,我們來回顧下。

先是建立TCP連接,畢竟HTTP是基于TCP的應(yīng)用層協(xié)議。

在TCP成功建立完協(xié)議后,就可以開始進入HTTPS階段。

HTTPS可以用TLS或者SSL啥的進行加密,下面我們以TLS1.2為例。

總的來說。整個加密流程其實分為兩階段。

第一階段是TLS四次握手,這一階段主要是利用非對稱加密的特性各種交換信息,最后得到一個"會話秘鑰"。

第二階段是則是在第一階段的"會話秘鑰"基礎(chǔ)上,進行對稱加密通信。

f6193cce-947a-11ed-bfe3-dac502259ad0.pngTLS四次握手

我們先來看下第一階段的TLS四次握手是怎么樣的。

第一次握手

  • ?Client Hello:是客戶端告訴服務(wù)端,它支持什么樣的加密協(xié)議版本,比如TLS1.2,使用什么樣的加密套件,比如最常見的RSA,同時還給出一個客戶端隨機數(shù)。

第二次握手

  • ?Server Hello:服務(wù)端告訴客戶端,服務(wù)器隨機數(shù)+ 服務(wù)器證書 + 確定的加密協(xié)議版本(比如就是TLS1.2)。

第三次握手

  • ?Client Key Exchange: 此時客戶端再生成一個隨機數(shù),叫pre_master_key。從第二次握手的服務(wù)器證書里取出服務(wù)器公鑰,用公鑰加密pre_master_key,發(fā)給服務(wù)器。

  • ?Change Cipher Spec: 客戶端這邊已經(jīng)擁有三個隨機數(shù):客戶端隨機數(shù),服務(wù)器隨機數(shù)和pre_master_key,用這三個隨機數(shù)進行計算得到一個"會話秘鑰"。此時客戶端通知服務(wù)端,后面會用這個會話秘鑰進行對稱機密通信。

  • ?Encrypted Handshake Message:客戶端會把迄今為止的通信數(shù)據(jù)內(nèi)容生成一個摘要,用"會話秘鑰"加密一下,發(fā)給服務(wù)器做校驗,此時客戶端這邊的握手流程就結(jié)束了,因此也叫Finished報文。

第四次握手

  • ?Change Cipher Spec:服務(wù)端此時拿到客戶端傳來的pre_master_key(雖然被服務(wù)器公鑰加密過,但服務(wù)器有私鑰,能解密獲得原文),集齊三個隨機數(shù),跟客戶端一樣,用這三個隨機數(shù)通過同樣的算法獲得一個"會話秘鑰"。此時服務(wù)器告訴客戶端,后面會用這個"會話秘鑰"進行加密通信。

  • ?Encrypted Handshake Message:跟客戶端的操作一樣,將迄今為止的通信數(shù)據(jù)內(nèi)容生成一個摘要,用"會話秘鑰"加密一下,發(fā)給客戶端做校驗,到這里,服務(wù)端的握手流程也結(jié)束了,因此這也叫Finished報文。

四次握手中,客戶端和服務(wù)端最后都擁有三個隨機數(shù),他們很關(guān)鍵,我特地加粗了表示。

第一次握手,產(chǎn)生的客戶端隨機數(shù),叫client random。

第二次握手時,服務(wù)器也會產(chǎn)生一個服務(wù)器隨機數(shù),叫server random。

第三次握手時,客戶端還會產(chǎn)生一個隨機數(shù),叫pre_master_key。

這三個隨機數(shù)共同構(gòu)成最終的對稱加密秘鑰,也就是上面提到的"會話秘鑰"。

f62bb4c6-947a-11ed-bfe3-dac502259ad0.png三個隨機數(shù)生成對稱秘鑰

你可以簡單的認為,只要知道這三個隨機數(shù),你就能破解HTTPS通信。

而這三個隨機數(shù)中,client randomserver random都是明文的,誰都能知道。pre_master_key卻不行,它被服務(wù)器的公鑰加密過,只有客戶端自己,和擁有對應(yīng)服務(wù)器私鑰的人能知道。

所以問題就變成了,怎么才能得到這個pre_master_key?

怎么得到pre_master_key

服務(wù)器私鑰不是誰都能拿到的,所以問題就變成了,有沒有辦法從客戶端那拿到這個pre_master_key。

有的。

客戶端在使用HTTPS與服務(wù)端進行數(shù)據(jù)傳輸時,是需要先基于TCP建立HTTP連接,然后再調(diào)用客戶端側(cè)的TLS庫(OpenSSL、NSS)。觸發(fā)TLS四次握手。

這時候如果加入環(huán)境變量SSLKEYLOGFILE就可以干預TLS庫的行為,讓它輸出一份含有pre_master_key的文件。這個文件就是我們上面提到的/Users/xiaobaidebug/ssl.key。

f63b0548-947a-11ed-bfe3-dac502259ad0.png將環(huán)境變量注入到curl和chrome中

但是,雖然TLS庫支持導出key文件。但前提也是,上層的應(yīng)用程序在調(diào)用TLS庫的時候,支持通過SSLKEYLOGFILE環(huán)境觸發(fā)TLS庫導出文件。實際上,也并不是所有應(yīng)用程序都支持將SSLKEYLOGFILE。只是目前常見的curl和chrome瀏覽器都是支持的。

SSLKEYLOGFILE文件內(nèi)容

再回過頭來看ssl.key文件里的內(nèi)容。

#SSL/TLSsecretslogfile,generatedbyNSS
CLIENT_RANDOM5709aef8ba36a8eeac72bd6f970a74f7533172c52be41b200ca9b91354bd662b09d156a5e6c0d246549f6265e73bda72f0d6ee81032eaaa0bac9bea362090800174e0effc93b93c2ffa50cd8a715b0f0
CLIENT_RANDOM57d269386549a4cec7f91158d85ca1376a060ef5a6c2ace04658fe88aec4877648c16429d362bea157719da5641e2f3f13b0b3fee2695ef2b7cdc71c61958d22414e599c676ca96bbdb30eca49eb488a
CLIENT_RANDOM5fca0f2835cbb5e248d7b3e75180b2b3aff000929e33e5bacf5f5a4bff63bbe5424e1fcfff35e76d5bf88f21d6c361ee7a9d32cb8f2c60649135fd9b66d569d8c4add6c9d521e148c63977b7a95e8fe8
CLIENT_RANDOMbe610cb1053e6f3a01aa3b88bc9e8c77a708ae4b0f953b2063ca5f925d673140c26e3cf83513a830af3d3401241e1bc4fdda187f98ad5ef9e14cae71b0ddec85812a81d793d6ec934b9dcdefa84bdcf3

這里有三列。

第一列是CLIENT_RANDOM,意思是接下來的第二列就是客戶端隨機數(shù),再接下來的第三列則是pre_master_key。

但是問題又來了。

這么多行,wireshark怎么知道用哪行的pre_master_key呢?

wireshark是可以獲得數(shù)據(jù)報文上的client random的。

比如下圖這樣。

f659267c-947a-11ed-bfe3-dac502259ad0.pngClient Hello 里的客戶端隨機數(shù)

注意上面的客戶端隨機數(shù)是以"bff63bbe5"結(jié)尾的。

同樣,還能在數(shù)據(jù)報文里拿到server random

f665d700-947a-11ed-bfe3-dac502259ad0.png找到server random

此時將client random放到ssl.key的第二列里挨個去做匹配。

就能找到對應(yīng)的那一行記錄。

f676619c-947a-11ed-bfe3-dac502259ad0.pngssl.key里的數(shù)據(jù)

注意第二列的那串字符串,也是以"bff63bbe5"結(jié)尾的,它其實就是前面提到的client random。

再取出這一行的第三列數(shù)據(jù),就是我們想要的pre_master_key。

那么這時候wireshark就集齊了三個隨機數(shù),此時就可以計算得到會話秘鑰,通過它對數(shù)據(jù)進行解密了。

反過來,正因為需要客戶端隨機數(shù),才能定位到ssl.key文件里對應(yīng)的pre_master_key是哪一個。而只有TLS第一次握手(client hello)的時候才會有這個隨機數(shù),所以如果你想用解密HTTPS包,就必須將TLS四次握手能抓齊,才能進行解密。如果連接早已經(jīng)建立了,數(shù)據(jù)都來回傳好半天了,這時候你再去抓包,是沒辦法解密的。

總結(jié)

  • ?文章開頭通過抓包baidu的數(shù)據(jù)包,展示了用wireshark抓包的簡單操作流程。

  • ?HTTPS會對HTTP的URL和Request Body都進行加密,因此直接在filter欄進行過濾http.host == "baidu.com"會一無所獲。

  • ? HTTPS握手的過程中會先通過非對稱機密去交換各種信息,其中就包括3個隨機數(shù),再通過這三個隨機數(shù)去生成對稱機密的會話秘鑰,后續(xù)使用這個會話秘鑰去進行對稱加密通信。如果能獲得這三個隨機數(shù)就能解密HTTPS的加密數(shù)據(jù)包。

  • ?三個隨機數(shù),分別是客戶端隨機數(shù)(client random),服務(wù)端隨機數(shù)(server random)以及pre_master_key。前兩個,是明文,第三個是被服務(wù)器公鑰加密過的,在客戶端側(cè)需要通過SSLKEYLOGFILE去導出。

  • ?通過設(shè)置SSLKEYLOGFILE環(huán)境變量,再讓curl或chrome會請求HTTPS域名,會讓它們在調(diào)用TLS庫的同時導出對應(yīng)的sslkey文件。這個文件里包含了三列,其中最重要的是第二列的client random信息以及第三列的pre_master_key。第二列client random用于定位,第三列pre_master_key用于解密。



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    745

    瀏覽量

    23273
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    269

    瀏覽量

    25278

原文標題:為什么我抓不到baidu的數(shù)據(jù)包

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    串口DMA接收數(shù)據(jù)包丟失怎么解決?

    RTT串口DMA接收數(shù)據(jù),超過緩沖區(qū)后為什么會吞掉一個數(shù)據(jù)包呢,不能每次處理完后清除緩沖區(qū)數(shù)據(jù)嗎,感覺接收的數(shù)據(jù)是累計的,累計滿之后會重新覆蓋,在最后一個
    發(fā)表于 09-29 07:50

    請問DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?

    DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?
    發(fā)表于 08-06 06:29

    CYUSB3014與PC通信幾小時后斷開,通過bus hound不到任何通信數(shù)據(jù),為什么?

    PC是WIN7系統(tǒng),PC端APP通過USB3與下位機通信幾個小時以后,通信就會斷開,通過bus hound不到任何通信數(shù)據(jù),出錯時CYUSB芯片的心跳燈正常,PC的設(shè)備管理器設(shè)備也正常。 重新插拔 或禁用,再啟用以后,通信立刻
    發(fā)表于 06-04 08:27

    藍牙數(shù)據(jù)通道空口數(shù)據(jù)包

    告訴對方你之前發(fā)已經(jīng)收到了(相當于ACK的作用),現(xiàn)在期待下一個新的數(shù)據(jù)包了,因此Bluetooth LE沒有專門的ACK,它是通
    發(fā)表于 06-03 10:51

    更改最大數(shù)據(jù)包大小時無法識別USB設(shè)備如何解決?

    將生產(chǎn)者 EP 端點描述符中的最大數(shù)據(jù)包大小從 1024 字節(jié)更改為 512 字節(jié)時,無法識別 USB 設(shè)備。 請告知如何解決這個問題。
    發(fā)表于 05-20 08:13

    TwinCAT3 EtherCAT | 技術(shù)集結(jié)

    在使用TwinCAT測試EtherCATEOE功能時,我們會發(fā)現(xiàn)正常是無法使用Wireshark去進行網(wǎng)絡(luò)抓取EtherCAT報文的,今天這篇文章就帶大家來上手EtherCAT
    的頭像 發(fā)表于 05-15 18:04 ?4444次閱讀
    TwinCAT3 EtherCAT<b class='flag-5'>抓</b><b class='flag-5'>包</b> | 技術(shù)集結(jié)

    使用CyU3PDmaChannelCommitBuffer提交超過1024字節(jié)數(shù)據(jù)時usb異常大怎么解決?

    你好,正在嘗試使用fx3實現(xiàn)USB3Vision設(shè)備,但是當我使用CyU3PDmaChannelCommitBuffer函數(shù)提交超過1024字節(jié)數(shù)據(jù)時,主機獲取到的USB數(shù)據(jù)包變得非常大
    發(fā)表于 05-13 06:11

    為UART、MCXA142實現(xiàn)ISP通信的主機端,發(fā)送Ping數(shù)據(jù)包并收到預期的響應(yīng),發(fā)送和接收數(shù)據(jù)包的典型順序是什么?

    想為 UART、MCXA142 實現(xiàn) ISP 通信的主機端。發(fā)送 Ping 數(shù)據(jù)包并收到預期的響應(yīng)。發(fā)送和接收數(shù)據(jù)包的典型順序是什么? 此刻,
    發(fā)表于 04-03 08:05

    為什么無法通過demo_feature_L2_bridge_vlan上的PFE轉(zhuǎn)發(fā)VLAN標記的以太網(wǎng)數(shù)據(jù)包

    - PC1 使用 ICMP 應(yīng)答進行響應(yīng) 對于第二個用例,不到正在路由的數(shù)據(jù)包。PC1 不響應(yīng) PC0 發(fā)送的 ARP 請求。還嘗試發(fā)送硬編碼
    發(fā)表于 03-25 08:05

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

    。以下是I2C總線數(shù)據(jù)包結(jié)構(gòu)的詳解: 一、I2C總線數(shù)據(jù)包的基本組成 I2C總線上的數(shù)據(jù)傳輸以數(shù)據(jù)包為單位進行,每個數(shù)據(jù)包包含起始信號、設(shè)備
    的頭像 發(fā)表于 01-17 15:46 ?1194次閱讀

    華納云如何解讀WinMTR的丟數(shù)據(jù)?

    WinMTR顯示的丟數(shù)據(jù)是指在網(wǎng)絡(luò)路徑上,從你的計算機到目標主機之間,數(shù)據(jù)包丟失的百分比。丟率是網(wǎng)絡(luò)穩(wěn)定性的一個重要指標,它可以幫助識別網(wǎng)絡(luò)中的問題點,如路由器故障、網(wǎng)絡(luò)擁塞或配
    的頭像 發(fā)表于 12-30 16:51 ?801次閱讀

    Linux運維必備技能:手把手教你用tcpdump精準

    簡介 網(wǎng)絡(luò)數(shù)據(jù)包截獲分析工具。支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾。并提供and、or、not等邏輯語句幫助去除無用的信息。 tcpdump - dump traffic on a
    的頭像 發(fā)表于 12-24 11:20 ?1920次閱讀

    mtu配置步驟詳解 mtu與數(shù)據(jù)包丟失的關(guān)系

    MTU(Maximum Transmission Unit)即最大傳輸單元,是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)報大小,單位是字節(jié)。MTU配置步驟及其與數(shù)據(jù)包丟失的關(guān)系如下: MTU配置
    的頭像 發(fā)表于 12-16 14:33 ?3487次閱讀

    請問TPA3116D2EVM RevC Gerbers這個數(shù)據(jù)包的文件用什么打開?

    TPA3116D2EVM RevC Gerbers這個數(shù)據(jù)包的文件用什么打開?
    發(fā)表于 11-07 07:21

    CentOS中使用tcpdump

    CentOS中使用tcpdump
    的頭像 發(fā)表于 10-28 14:48 ?958次閱讀