1. 程式人生 > >在應用層來截獲資料鏈路層的幀並對其處理

在應用層來截獲資料鏈路層的幀並對其處理

目前大多數作業系統都為應用程式提供訪問資料鏈路層的強大功能。這種功能可以提供如下能力:能夠監視由資料鏈路層接收的分組,使得諸如(tcpdump)等程式能夠在普通計算機系統上執行,而無需專門的硬體裝置來監視分組。如果結合使用網路介面 進入混雜模式(promiscuous mode)的能力,那麼應用程式設定能夠監視本地電纜上流通的所有分組,而不僅僅以程式執行所在主機為目的地的分組。能夠作為普遍應用程序而不是核心的一部分執行某些程式。比如RARP伺服器的大多數UNIX版本是普通的應用程序,它們從資料鏈路讀入RARP請求,又往資料鏈路寫出RARP應答。(RARP請求和應答都不是IP資料報)UNIX上訪問資料鏈路層的3個常用方法是BSD的分組過濾器BPF,SVR4的資料鏈路提供者介面DLPI和LINUX的SOCK_PACKET介面。函式庫libpcap適用於所有這三個介面,使用它可以編寫獨立於作業系統提供的實際資料鏈路訪問介面的程式。BPF:在支援BPF的系統上,每個資料鏈路驅動程式就在傳送一個分組之前或在接收一個分組之後呼叫BPF。儘管往資料鏈路中安置一個用於捕獲所有分組的“龍頭” 並不困難,BFP的強大威力在於它的過濾能力。開啟一個BPF裝置的每個應用程序可以裝載各自的過濾器,這個過濾器然後由BPF應用於每個分組。更復雜的 過濾器可以檢查分組頭部某些欄位是否為特定值。BPF使用以下3個技術來降低開銷:    1 BPF過濾在核心中進行,以此把從BPF到應用程序的資料拷貝量減到最小。這種從核心空間到使用者空間的拷貝開銷高昂。要是每個分組都如此拷貝,BPF可能就跟不上快速的資料鏈路。    2 由BPF傳遞到應用程序的只是每個分組的一段定長部分。這個長度成為捕獲長度(capture length),也稱為快照長度(snapshot length簡寫為snaplen)。大多數應用程序只需要分組頭部而不需要分組資料。這個技術同樣減少了由BPF拷貝到應用程序的資料量。    3 BPF為每個應用程序分別緩衝資料,只有當緩衝區已滿或讀超時(read timeout)期滿時該緩衝區中的資料才拷貝到應用程序。該超時值可由應用程序指定。============================================================================================================================================================             LINUX : SOCK_PACKET和PF_PACKETLINUX先後有兩個從資料 鏈路層接收分組的方法。較舊的方法是建立SOCK_PACKET的套介面,這個方法的可用面較寬,不過缺乏靈活性。較新的方法是建立協議族為 PF_PACKET的套介面,這個方法引入了更多的過濾和效能特性。我們必須有足夠的許可權才能建立這兩種套介面(類似原始套介面的建立)。而且呼叫 socket的第三個引數必須是指定乙太網幀型別的某個非0值。建立PF_PACKET套介面時,呼叫socket的第二個引數既可以是 SOCK_DGRAM,表示扣除鏈路層頭部的“煮熟”(cooked)分組,也可以是SOCK_RAW表示“未煮”(raw)的完整鏈路層分組(乙太網 幀)。SOCK_PACKET套介面只返回乙太網幀。舉例來說,從資料鏈路層接收所有幀應如下建立套介面:fd = socket( AF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );   //較新方法 然後就可以對起fd進行讀寫來查詢幀的資訊或fd = socket( AF_INET, SOCK_PACKET, htons(ETH_P_ALL) ); //較舊方法由資料鏈路層接收的任何協議乙太網幀將返回到這些套介面。如果只想捕獲IPv4幀,那就如下建立套介面:fd = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_IP) ); //較新方法或fd = socket( AF_INET, SOCK_PACKET, htons(ETH_P_IP) ); //較舊方法用作socket呼叫的第三個引數的常值還有ETH_P_ARP, ETH_P_IPV6等等。指定這個協議的引數為某個ETH_P_xxx常值是在告知資料鏈路層應該把由它接收的幀中哪些型別的幀傳遞給所建立的套介面。如果資料鏈路層支援混雜模式,那麼需要的話還必須把裝置投入混雜模式。對於PF_PACKET套介面,把一個網路介面投入混雜模式通過設定PACKET_ADD_MEMBERSHIP套介面選項完成,在作為setsockopt第四個引數傳遞的packet_mreq結構中需指定網路介面和值為PACKET_MR_PROMISC的行為。對於SOCK_PACKET套介面,投入混雜模式通過使用SIOCGIFFLAGS ioctl獲取標誌,邏輯或上IFF_PROMISC標誌位,再使用SIOCSIFFLAGS ioctl設定標誌完成。linux上的資料鏈路層訪問方法相比BPF和DLPI存在如下差別:linux方法不提供核心緩衝,而且只有較新的方法才能提供核心過濾(通過設定SO_ATTACH_FILTER套介面選項安裝)。儘管這些套介面有普通 的套介面接收緩衝區,但是多個幀不能緩衝在一起由單個讀入操作由單個讀入操作一次性的傳遞給應用程序。這麼依賴勢必增長從核心到應用程序拷貝大量資料所設 計的開銷。linux較舊的方法不提供針對裝置的過濾。(較新的方法可以通過呼叫bind與某個裝置關聯)。如果呼叫socket時指定了ETH_P_IP,那麼來 自任何裝置(例如乙太網,ppp鏈路,SLIP鏈路和回饋裝置)的所有IPv4分組都被傳遞到所建立的套介面。recvfrom將返回一個通用套介面地址 結構,其中的sa_data成員含有裝置名字(例如eth0)。應用程序然後必須自行丟棄來自任何非所關注裝置的資料。這裡的問題仍然是可能會有太多的數 據返回給應用程序,從而妨礙對於告訴網路的監視。============================================================================================================================================================libpcap:分組捕獲函式庫libpcap是一個與實現無關的訪問作業系統所提供的分組捕獲機制的分組捕獲函式庫。該函式庫可以從http://www.tcpdump.org獲取。============================================================================================================================================================libnet:分組構造與輸出函式庫libnet函式提供構造任意協議的分組並輸出到網路中的介面。它以與實現無關的方式提供原始套介面訪問方式和資料鏈路層訪問方式。libnet隱藏了構造IP,UDP和TCP頭部的許多細節,並提供了簡單且便於移植的資料鏈路層和原始套介面的寫出訪問介面。libnet函式庫可以從http://www.packetfactory.net/libnet獲取。linux中的一些協議頭定義:在/usr/include/netinet/目錄下有很多./usr/include/linux/if_ether.h#define ETH_ALEN 6            //Octets in one ethernet addr#define ETH_HLEN    14    //total octets in header#define ETH_ZLEN    60    // Min. octets in frame sans FCS#define ETH_DATA_LEN    1500 // Max. octets in payload#define ETH_DATA_LEN    1514 // Max. octets in fram sans FCSstruct ethhdr{    unsigned char h_dest[ETH_ALEN];    unsigned char h_source[ETH_ALEN];    unsigned short h_proto;};IP:struct iphdr:/usr/include/netinet/ip.hstruct tcphdr :/usr/include/netinet/tcp.h

相關推薦

應用截獲資料鏈處理

目前大多數作業系統都為應用程式提供訪問資料鏈路層的強大功能。這種功能可以提供如下能力:能夠監視由資料鏈路層接收的分組,使得諸如(tcpdump)等程式能夠在普通計算機系統上執行,而無需專門的硬體裝置來監視分組。如果結合使用網路介面 進入混雜模式(promiscuous mode)的能力,那麼應用程式設定能夠監

12、基本資料鏈協議(資料鏈

1、基本資料鏈路層協議 引言 在考察協議之前,先明確一下有關底層通訊模型的基本假設是有必要的。首先我們假設物理層、資料鏈路層和網路層都是獨立的程序,它們通過來回傳遞資訊進行通訊。如圖所示,物理層程序和某些資料鏈路層程序執行在一個稱為網路介面卡(NIC)的專用硬體上:鏈路層程序

計算機網路7模型之資料鏈

1.資料鏈路層最基本的服務是將源機網路層來的資料可靠的傳輸到相鄰節點的目標機網路層,為達到這一目的,資料鏈路層必須具備一系列相應的功能,它們主要有:如何將資料組合成資料塊,在資料鏈路層中將這種資料塊稱為資料幀,資料幀是資料鏈路層的傳送單位,如何控制幀在物理通道上的傳輸,包括如何處理傳輸差

TCP/IP詳解--資料鏈 乙太網格式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

學網路——資料鏈的兩個子

1.LLC子層(logical link control):;邏輯鏈路控制為上層協議提供SAP服務訪問點,併為資料加上控制資訊,其協議為802.2,為乙太網和令牌環網提供了通用功能 2.MAC子層(media access control):介質訪問控制負責MAC定址和定義介質訪問控制方法

TCP/IP詳解--資料鏈 & 乙太網格式

鏈路層上最常見的封裝就是乙太網和IEEE 802封裝,這裡就使用乙太網作為講解的物件。一、概述      資料鏈路層屬於計算機網路的底層,使用的通道主要有點對點通道和廣播通道兩種型別。       

OSI七模型詳解物理資料鏈、網路、傳輸.....應用協議

OSI 七層模型通過七個層次化的結構模型使不同的系統不同的網路之間實現可靠的通訊,因此其最主要的功能就是幫助不同型別的主機實現資料傳輸 。 完成中繼功能的節點通常稱為中繼系統。在OSI七層模型中,處於不同層的中繼系統具有不同的名稱。    一個裝置工作在哪一層,關鍵看它工作時利用哪一層的資料

資料鏈—瞭解資料鏈

本文介紹資料鏈路的定義和幀的理解: 1、資料鏈路: 首先大家要明確的是,資料鏈路和鏈路是兩個不同的概念 (1)鏈路(link):從一個節點到另外一個節點(直接相連)的一段物理線路(包括了有線和無線)

資料鏈傳輸的三個基本問題

封裝成幀 透明傳輸 差錯控制 封裝成幀 : 封裝成幀(framing)就是在一段資料的前後分別新增首部和尾部,然後就構成了一個幀。確定幀的界限。 用控制字元進行幀定界的方法舉例 :

分析資料鏈結構實驗

剛開始看見這個實驗,發現只有一個實驗報告模板和實驗題目,完全不知道實驗步驟也沒有實驗指導,就當時完全不知道怎麼弄,後來慢慢分析了這兩種幀結構,漸漸的wireshark裡面的資料也漸漸看懂表示資料報的那個部分了,通過百度,問同學,漸漸得分析完畢,自行分析資料代表的欄位含義,並且最後將實驗完成,感覺受益不淺。

【計算機網路】資料鏈(一):資料和物理定址

資料鏈路層是物理層的上層,物理層是把電腦連線起來的物理手段,它主要規定了網路的一些電氣屬性,其作用是負責傳送0和1的電訊號。資料鏈路層位於物理層的上層,簡單的闡述它的作用就是確定0和1的分組方式。 下

資料鏈的成方法

       之前說過,資料鏈路層一個很重要的功能就是成幀和拆幀,因為幀是資料鏈路層的一個單元,資料鏈路層是對於幀進行處理的。那麼這裡就具體講一講資料鏈路層是怎麼成幀的。        首先我們應該想想成幀所涉及的問題。第一就是網路層的資料包交給鏈路層之後,按照怎樣的格式封

【計算機網路】資料鏈總結

資料鏈路層 目錄 資料鏈路層概述 基本概念 資料鏈路層的三個基本問題 點對點通道的資料鏈路層 概述 PPP協議的組成 PPP幀的格式和要求 PPP協議的工作狀態 廣播通道的資料鏈路層 區域網和乙太

資料鏈小小結(未完待續...)

資料鏈路層:把實現相關規程的硬體和軟體加到鏈路上,就構成了資料鏈路。1.功能:1)鏈路管理 2)訊息的傳輸 3)流量與差錯控制 4)異常情況處理2.流量控制協議:停-等流量控制、滑動視窗流量控制1)停-等流量控制:原理:先檢車幀是否正確,再向傳送節點回送一確定幀ACK。特殊情況處理:超時計時器、給幀編序號。缺

資料鏈與區域網_計算機網路原理第五章_自考本科段

概要:計算機網路原理第五章資料鏈路層與區域網小結 1、資料鏈路層服務 識記:資料鏈路層功能 (1)資料鏈路層功能:負責通過一條鏈路,從一個節點想另一個物理鏈路直接相連的相鄰節點,傳送網路層資料報,中間不經過其他仍和交換節點。實現物理鏈路直接項鍊的相鄰節點間的資料報傳輸。  

【計算機網路】第五章 資料鏈(1)

一.資料鏈路層服務 1. 概述 (1)術語   ·主機和路由器:結點   ·連線相鄰結點的通訊通道:鏈路(有線、無線、區域網)   ·鏈路層資料分組:幀 (2)資料鏈路層主要任務:通過一條鏈路從一個結點向另一個物理鏈路直接相連的相鄰結點傳送資料報 2. 鏈路層服務 (1)組幀   ·封裝資料

【計算機網路】第五章 資料鏈(2)

三.多路訪問控制(MAC)協議 1. 兩類鏈路 (1)點對點鏈路:撥號接入的PPP、乙太網交換機與主機間的點對點鏈路 (2)廣播鏈路(共享介質):早期的匯流排乙太網、HFC的上行鏈路、802.11無線區域網 2. 基本概念 (1)單一共享廣播通道 (2)兩個或兩個以上結點同時傳輸,則發生衝突;結點

計算機網路複習 第三章 資料鏈

1. 封裝成幀     在一段資料的前面和後面分別新增首部和尾部,使接收方能確定幀的界限。    幀定界的方法    A:位元組計數法:在幀頭設定一個長度域,放置該幀的位元組數,當收方收到幀後,通過幀的長度,確定幀的開始。

計算機網路概述---資料鏈

資料鏈路層基本概念 三個基本問題 封裝成幀:在一段資料的前後加上首部和尾部,然後構成幀,首部和尾部的作用就是進行幀的界定; 透明傳輸:當傳輸的資料中含有首部和尾部的字元時,需要進行轉義(用位元組填充解決,給資料中的特殊字元前面填充轉義字元); 差錯控制:傳輸過程中可能產生位元差錯,1變成0,0變成1等

TCP/IP學習筆記(2)-資料鏈

資料鏈路層有三個目的: 為IP模組傳送和接收IP資料報。 為ARP模組傳送ARP請求和接收ARP應答。 為RARP傳送RARP請求和接收RARP應答 ip大家都聽說過。至於ARP和RARP,ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議,而RARP則叫做逆地址解析