linux核心根據skb獲取目的mac位址

2021-08-03 22:40:41 字數 1018 閱讀 1611

工作筆記工作筆記linux程式設計

直接通過skb裡面的資訊獲取mac,如下

1.

struct ethhdr *eth_hdr = (struct ethhdr *)skb_mac_header(skb);

2.if(skb_mac_header_was_set(skb))

3.

注意:需要先通過skb_mac_header_was_set函式判斷是否已經設定了mac頭,如果沒有設定依然呼叫memcpy將會卡住或者報記憶體未對齊的錯誤。

由於自己在iptables的output鏈上掛載了乙個target,這個時候捕獲到的資料報是3層的,還沒有mac位址頭,因此上面的方法行不通。

根據核心arp.c的arp_find函式寫乙個查詢arp的函式,如下:

1.

2./* 從核心arp.c扣的arp_find函式,把skb->dev改為了dst->dev */

3.int

arp_find_local

(unsigned

char *haddr, struct sk_buff *skb)

4.15.

16. paddr = rt_nexthop(skb_rtable(skb), ip_hdr(skb)->daddr);

17.18.

/* 指定create為0,只查詢快取,create = 1時貌似沒找到會發arp查詢包 */

19. n = __neigh_lookup(&arp_tbl, &paddr, dev, 0);

20.21.

if (n)

28. neigh_release(n);

29. } else

30. kfree_skb(skb);

31.return

1;32.}

linux核心中如何修改skb報文

核心 中有許多用於計算校驗和的api,下面是linux網路技術內幕相關api的截圖 sk buf中的csum欄位 sk buf中的ip summed欄位 ip summed欄位表示l4層的校驗和狀態。根據報文的不同 輸入報文和輸出報文 ip summed會有不同的取值。當資料報為輸入報文 defin...

gitlab api根據標籤或者分支獲取目錄和檔案

官網gitlab api相關url 根據標籤或者分支獲取目錄和檔案 引數解析 project gitlab上的專案,可以通過gitlaapi.getproject 獲得 path 要查詢的檔案路徑,為空則表示查詢根目錄 ref name 標籤或者分支名 recursive 是否遞迴查詢所有目錄和檔案...

linux獲取核心資訊

linux獲取核心資訊過程 1.核心printk列印資訊會先根據等級與當前終端等級console loglevel決定是否向終端輸出列印,同時會將資訊儲存到乙個環形記錄緩衝區,該緩衝區最多可儲存log buf len的核心資訊,當緩衝區達到最大值時,新資訊會覆蓋掉舊的資訊,以保證資訊不會因為失控而消...