999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux下實現通過抓包獲取VLAN ID

2015-01-01 03:05:06
網絡安全技術與應用 2015年10期

0 引言

由于Linux系統強大的網絡管理功能,很多網絡設備都是基于Linux開發的,通過Linux自帶的netfilter模塊,以及豐富的開源軟件可以打造出功能完善的網絡接入設備。其中典型的運用就是虛擬子網VLAN,在交換機上劃分多個VLAN子網,并且匯聚到中繼口Trunk上,同時網關啟用VLAN模塊,通過配置對應的VLAN虛擬網卡實現與交換機的互聯通訊。目前大多數網卡為了提高數據包的處理能力,直接對報文的VLAN Tag進行移除和插入操作,因此到達內核中的數據包已經不包含VLAN Tag。為了實現對數據包的分析審計等需求,需要知道每個數據包是屬于哪個VLAN的。基于這個目的本文通過對數據包的收發流程,抓包原理的分析,提出了一種通過直接修改內核讓數據包帶上VLAN ID的方法。

1 VLAN概述

現在使用最廣泛的VLAN協議標準是 IEEE 802.1Q,許多廠家的交換機,路由器產品都支持IEEE 802.1Q標準。802.1Q Tag的長度是4 bytes,它位于以太網幀中源MAC地址和長度類型之間。802.1Q Tag包含4個字段。

(1)Type:長度為2 bytes,表示幀類型,802.1Q tag幀中Type字段取固定值 0x8100,如果不支持 802.1Q的設備收到802.1Q幀,則將其丟棄。

(2)PRI:priority字段,長度為3 bit,表示 以太網幀的優先級,取值范圍是0~7,數值越大,優先級越高。當交換機,路由器發生傳輸擁塞時,優先發送優先級高的數據幀。

(3)CFI:Canonical Format Indicator,長度為 1bit,表示MAC地址是否是經典格式。CFI為0說明是經典格式,CFI為1表示為非經典格式。該字段用于區分以太網幀、FDDI幀和令牌環網幀,在以太網幀中,CFI取值為0。

(4)VID:VLAN ID,長度為12 bit,取值范圍是0~4095,其中0和4095是保留值,不能給用戶使用。

圖1 VLAN Tag報文格式

2 數據包收發流程

數據包到達網卡以后,網卡判斷數據包是否為802.1Q報文,如果是的話則移除VLAN Tag,修改以太網幀,同時把VLAN信息儲存在 sk_buff中。網卡驅動從網卡收到的報文,已經不帶VLAN tag了。接著通過 netif_rx進入協議棧,netif_rx調用napi_schedule調度,發送 NET_RX_SOFTIRQ軟中斷,觸發net_rx_action執行其 poll操作 process_backlog,接著調用netif_receive_skb來處理收到的skb數據。VLAN模塊通過調用dev_add_pack注冊了802.1Q的協議類型,將自己的prot_hook 掛到了ptype_all鏈表中。在netif_receive_skb遍歷ptype_all找到對應的VLAN鉤子,于是進入了vlan的接收函數vlan_skb_recv,這個函數會移除 VLAN Tag重置以太網層的 proto,再調用netif_rx重新進入協議棧處理流程。由于VLAN Tag已經在網卡上被移除了,實際上并不會進入vlan_skb_recv。不過網卡只會移除第一層VLAN Tag,如果你的報文是QINQ這種雙層VLAN的協議,那么第二層VLAN Tag將由vlan_skb_recv來移除。

數據包進入ip_crv以后,根據目的IP進行路由判斷,如果是發往本地的報文則進入ip_local_deliver后發往本地應用。如果目的IP不是本機則根據默認路由進入轉發模塊ip_forward,如果需要 NAT則內核修改數據包的源 IP等信息,接著協議棧通過dev_queue_xmit調用 dev_hard_start_xmit,關聯到了具體的網絡設備處理函數,從而調用了vlan_dev_hard_start_xmit,在這里插入VLAN Tag頭,并壓入sk_buffer中,找到真實的網絡設備,再次調用dev_queue_xmit,進入網卡驅動,這里只有雙層VLAN協議才會由內核插入內層的VLAN TAG,最外層的VLAN TAG由網卡完成插入。

3 Libpcap抓包原理

Libpcap通過創建 AF_PACKET類型的套接字,把自己的prot_hook掛到了ptype_all鏈表上,AF_PACKET套接字注冊的鉤子函數是packet_rcv。可以看出無論是接收還是發送的報文,內核都會對ptype_all鏈表進行遍歷,最終會調用到packet_rcv函數,把數據包加入到了 AF_PACKET套接字的接收隊列。當應用程式調用recv接收數據包時內核最終會調用packet_recvmsg從接收隊列中取出skb,將數據包內容skb->data拷貝到用戶空間。

4 修改內核插入VLAN ID

通過上面的分析,我們只要在packet_recvmsg函數里在將數據包拷貝到用戶空間的時候將VLAN ID插入到報文的結尾,再通過libpcap等AF_PACKET套接字接口獲取數據的時候就可以得到VLAN ID。代碼修改如下。

修改前:

修改后:

以發送帶有VLAN ID為100的報文為例,下圖是交換機發出的報文:

圖2 VLAN報文

Linux網關接收到數據包以后將VLAN ID插入結尾:

圖3 修改后的VLAN報文

5 總結

通過修改內核的方式使得 AF_PACKET套接字獲取的報文攜帶VLAN ID,為數據包的分析審計提供了基礎。

主站蜘蛛池模板: 亚洲无线一二三四区男男| 97se亚洲综合在线韩国专区福利| 五月婷婷丁香综合| 色国产视频| 22sihu国产精品视频影视资讯| 白浆免费视频国产精品视频| 久久亚洲黄色视频| 久久人人妻人人爽人人卡片av| 国产成人高清精品免费软件| 国产AV无码专区亚洲A∨毛片| 国产精品v欧美| 国产主播喷水| 国产乱人伦偷精品视频AAA| av一区二区人妻无码| 五月综合色婷婷| 都市激情亚洲综合久久| 国产偷倩视频| 99热国产这里只有精品无卡顿"| 国产精品欧美日本韩免费一区二区三区不卡 | 40岁成熟女人牲交片免费| 欧美精品伊人久久| 青青草一区| 亚洲成综合人影院在院播放| 67194成是人免费无码| 好吊色国产欧美日韩免费观看| 国产成人永久免费视频| 午夜高清国产拍精品| 毛片网站免费在线观看| 亚洲h视频在线| 无码在线激情片| 国产精品第5页| 欧美区日韩区| 思思热在线视频精品| 青青草欧美| 欧美在线中文字幕| 国产精品视频观看裸模| 无码视频国产精品一区二区| 国产人成乱码视频免费观看| a级免费视频| 国产乱人视频免费观看| 欧洲日本亚洲中文字幕| 亚欧成人无码AV在线播放| 国产黄色爱视频| 国产又色又爽又黄| 国产乱人免费视频| 国产精品va| 免费国产在线精品一区| 成人噜噜噜视频在线观看| 国产女人在线观看| 免费国产高清精品一区在线| 日韩高清在线观看不卡一区二区| 国产午夜福利亚洲第一| 亚洲欧洲国产成人综合不卡| 亚洲精品成人7777在线观看| 不卡视频国产| 亚洲黄色网站视频| 国产91视频免费观看| 亚洲第一色网站| 五月婷婷精品| 国产亚洲精品91| 国产成人综合欧美精品久久| 中文字幕有乳无码| 亚洲欧美日韩动漫| 麻豆精品在线播放| 丰满的熟女一区二区三区l| 日韩黄色精品| 国产原创自拍不卡第一页| 干中文字幕| 国产精品视频白浆免费视频| 亚洲欧美综合在线观看| 亚洲第一黄片大全| 欧美在线视频不卡| 夜夜操天天摸| 国产精品久久久久久久久| 亚洲一级毛片| 国产精品久久国产精麻豆99网站| 精品第一国产综合精品Aⅴ| 黄色污网站在线观看| 在线色国产| 日本三级欧美三级| 色欲综合久久中文字幕网| 精品国产一区二区三区在线观看|