linux操作鏈路層的資料

2021-07-04 03:17:43 字數 701 閱讀 4782

1.介紹

在linux中提供了pf_packet介面可以操作鏈路層的資料。

2.使用方法

定義乙個pf_packet = socket(pf_socket, sock_raw, htons(eth_p_rarp));

就可以利用函式sendto和recefrom來讀取和傳送鏈路層的資料報了(當然,傳送arp包,上面第三個引數要變為htons(eth_p_arp),或者ip的包為eth_p_ip,可檢視檔案/usr/include/linux/if_ether.h檔案看到所有支援的協議)。

3.在使用sock_raw, sock_dgram和sock_packet的區別

在socket的第乙個引數使用pf_packet的時候,上述三種socket的型別都可以使用。但是有區別。

(1)使用sock_raw傳送的資料必須包含鏈路層的協議頭,接受得到的資料報,包含鏈路層協議頭。而使用sock_dgram則都不含鏈路層的協議頭。

(2)sock_packet也是可以使用的,但是已經廢棄,以後不保證還能支援,不推薦使用。

(3)在使用sock_raw或sock_dgram和sock_packet時,在sendto和recvfrom中使用的位址型別不同,前兩者使用sockaddr_ll型別的位址,而後者使用sockaddr型別的位址。

(4)如socket的第乙個引數使用pf_inet,第二個引數使用sock_raw,則可以得到原始的ip包。

linux socket 操作鏈路層

linux提供最常用的網路通訊應用程式開發介面 berkerley套接字 socket 它既適用於同一主機上程序間通訊 ipc 又適用於不同主機上的程序間通訊。套接字的設定通過socket呼叫完成 int socket int family,int type,int protocol 其中famil...

資料鏈路層

資料鏈路的定義 鏈路 計算機網路中相鄰節點的一段物理線路。資料鏈路 計算機網路中節點到節點相鄰的一段物理路線加上控制在這些路線上傳輸資料的協議。資料鏈路層解決的問題 對於計算機網路裡面的每一層,其實都是為了解決某乙個層面的問題而設計出來的,資料鏈路層也一樣 由於物理層只解決了訊號流在物理媒介的傳輸問...

資料鏈路層

首先撇清兩個概念 鏈路和資料鏈路。鏈路是指從乙個結點到另乙個結點的一段物理線路,而中間沒有任何其他的交換結點,在進行資料通訊時,兩個計算機之間的通訊路徑往往要經過許多段這樣的鏈路,可見鏈路只是一條路徑的組層部分,資料鏈路是除了一條物理鏈路外還需要加上一些必要的通訊協議來控制這些資料的傳輸。若把這些實...