解決抓到的報(bào)文校驗(yàn)和錯(cuò)誤問(wèn)題

解決抓到的報(bào)文校驗(yàn)和錯(cuò)誤問(wèn)題

在linux上使用tcpdump抓包,使用wireshark分析時(shí)發(fā)現(xiàn)發(fā)出的報(bào)文校驗(yàn)和都是錯(cuò)誤的,可是仍然可以與目標(biāo)建立鏈接,正常通信。這是為什么呢?

0x00 原因

在這里找到了問(wèn)題原因:https://zhidao.baidu.com/question/518773571676596765.html


在使用WireShark等截取數(shù)據(jù)包時(shí),往往會(huì)出現(xiàn)錯(cuò)誤的CheckSum,這主要是因?yàn)榫W(wǎng)卡開(kāi)啟了CheckSum Offload(硬件校驗(yàn)和) 功能,系統(tǒng)將CheckSum的計(jì)算工作交由網(wǎng)卡去計(jì)算,在高速網(wǎng)絡(luò)交換的情況下可以大大減輕CPU的工作負(fù)荷。
在windows系統(tǒng)中的Checksum Offload過(guò)程如下:如果網(wǎng)卡支持,在高級(jí)選項(xiàng)里可以設(shè)置Checksum Offload是否對(duì)Rx(接收端)或Tx(發(fā)送端)有效,也可以設(shè)置為對(duì)兩者都有效。
對(duì)于Tx,設(shè)置Checksum Offload有效之后,Windows的傳輸層將隨機(jī)填充TCP校驗(yàn)和,因此在本機(jī)上抓取的數(shù)據(jù)包是Bad CheckSum。然后,網(wǎng)卡會(huì)自動(dòng)計(jì)算正確的校驗(yàn)碼然后發(fā)送,因此對(duì)方收到的仍然是正確的TCP包。
對(duì)Rx,設(shè)置Checksum Offload有效之后,網(wǎng)卡在接收數(shù)據(jù)時(shí),會(huì)填充一個(gè)NDIS_TCP_IP_CHECKSUM_PACKET_INFO 結(jié)構(gòu)并設(shè)置標(biāo)志位,由網(wǎng)卡完成數(shù)據(jù)校驗(yàn);如果由于某種原因失敗,則不設(shè)置標(biāo)志位,由Windows里的TCP/IP協(xié)議棧來(lái)完成數(shù)據(jù)校驗(yàn)。
其實(shí)就是說(shuō),由于開(kāi)啟了硬件校驗(yàn)和功能,傳輸層并沒(méi)有計(jì)算校驗(yàn)和,而是隨機(jī)填了個(gè)數(shù),所以你抓到的包校驗(yàn)和是錯(cuò)的,而這個(gè)錯(cuò)誤的校驗(yàn)和在網(wǎng)卡發(fā)送出去前會(huì)被網(wǎng)卡改正過(guò)來(lái),所以接收端收到的包是校驗(yàn)和正確的包,會(huì)發(fā)回反饋。


0x01 解決方法

知道原因后,就容易解決了,我用的是CentOS-7.0,所以以它為例,我們只需要關(guān)閉網(wǎng)卡的硬件校驗(yàn)和功能,就可以抓到校驗(yàn)和正確的報(bào)文了。

  1. 命令行下輸入ehtool -k eth0,查看網(wǎng)卡校驗(yàn)和功能的開(kāi)啟狀態(tài)。

    checksum1
  2. ethtool -K eth0 rx off tx off,關(guān)閉網(wǎng)卡校驗(yàn)和。

    checksum2
  3. 重啟網(wǎng)卡,sudo /etc/init.d/network restart

  4. 重啟之后,再次查看網(wǎng)卡校驗(yàn)和功能開(kāi)啟狀態(tài),此時(shí)我們發(fā)現(xiàn)已經(jīng)是off狀態(tài)了。

    checksum3
  5. 再次抓包,此時(shí)校驗(yàn)和正確。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 7.輪詢(xún)模式驅(qū)動(dòng) DPDK包括1Gigabit、10Gigabit 及 40Gigabit 和半虛擬化IO的輪詢(xún)模...
    半天妖閱讀 5,879評(píng)論 0 4
  • 簡(jiǎn)介 用簡(jiǎn)單的話(huà)來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,077評(píng)論 1 13
  • http://www.xfocus.net/articles/200106/208.htmlhttp://www....
    魚(yú)仔_1625閱讀 6,401評(píng)論 1 0
  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,358評(píng)論 6 174
  • 6.報(bào)文緩沖區(qū)庫(kù) 報(bào)文緩沖區(qū)庫(kù)(Mbuf)提供了申請(qǐng)和釋放緩沖區(qū)的功能,DPDK應(yīng)用程序使用這些buffer存儲(chǔ)消...
    半天妖閱讀 3,699評(píng)論 0 3

友情鏈接更多精彩內(nèi)容