日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > Linux閱碼場(chǎng)
[導(dǎo)讀]大家好,我是飛哥!今天聊聊大家工作中經(jīng)常用到的tcpdump。在網(wǎng)絡(luò)包的發(fā)送和接收過程中,絕大部分的工作都是在內(nèi)核態(tài)完成的。那么問題來(lái)了,我們常用的運(yùn)行在用戶態(tài)的程序tcpdump是那如何實(shí)現(xiàn)抓到內(nèi)核態(tài)的包的呢?有的同學(xué)知道tcpdump是基于libpcap的,那么libpcap...

大家好,我是飛哥!

今天聊聊大家工作中經(jīng)常用到的 tcpdump。

網(wǎng)絡(luò)包的發(fā)送和接收過程中,絕大部分的工作都是在內(nèi)核態(tài)完成的。那么問題來(lái)了,我們常用的運(yùn)行在用戶態(tài)的程序 tcpdump 是那如何實(shí)現(xiàn)抓到內(nèi)核態(tài)的包的呢?有的同學(xué)知道 tcpdump 是基于 libpcap 的,那么 libpcap 的工作原理又是啥樣的呢。如果讓你裸寫一個(gè)抓包程序,你有沒有思路?

按照飛哥的風(fēng)格,不搞到最底層的原理咱是不會(huì)罷休的。所以我對(duì)相關(guān)的源碼進(jìn)行了深入分析。通過本文,你將徹底搞清楚了以下這幾個(gè)問題。

  • tcpdump 是如何工作的?
  • netfilter 過濾的包 tcpdump 是否可以抓的到?
  • 讓你自己寫一個(gè)抓包程序的話該如何下手?
借助這幾個(gè)問題,我們來(lái)展開今天的探索之旅!

一、網(wǎng)絡(luò)包接收過程

圖解Linux網(wǎng)絡(luò)包接收過程一文中我們?cè)敿?xì)介紹了網(wǎng)絡(luò)包是如何從網(wǎng)卡到達(dá)用戶進(jìn)程中的。這個(gè)過程我們可以簡(jiǎn)單用如下這個(gè)圖來(lái)表示。

找到 tcpdump 抓包點(diǎn)

我們?cè)?a href="/tags/網(wǎng)絡(luò)" target="_blank">網(wǎng)絡(luò)設(shè)備層的代碼里找到了 tcpdump 的抓包入口。在 __netif_receive_skb_core 這個(gè)函數(shù)里會(huì)遍歷 ptype_all 上的協(xié)議。還記得上文中我們提到 tcpdump 在 ptype_all 上注冊(cè)了虛擬協(xié)議。這時(shí)就能執(zhí)行的到了。來(lái)看函數(shù):

//file:?net/core/dev.c
static?int?__netif_receive_skb_core(struct?sk_buff?*skb,?bool?pfmemalloc)
{
????......
????//遍歷?ptype_all?(tcpdump?在這里掛了虛擬協(xié)議)
????list_for_each_entry_rcu(ptype,?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉