原始套接字

2021-09-19 03:31:40 字數 861 閱讀 3474

參考1:

原始套接字能幹什麼?

參考2:

原始套接字抓包實踐:

參考3:

各層頭結構

通過原始套接字,我們可以抓取所有傳送到本機的ip包(包括ip頭和tcp/udp/icmp包頭),也可以抓取所有本機收到的幀(包括資料鏈路層協議頭)。普通的套接字無法處理icmp、igmp等網路報文,而sock_raw可以。利用原始套接字,我們可以自己構造ip頭。

有兩種原始套接字

一種是處理ip層及其上的資料,通過指定socket第乙個引數為af_inet來建立這種套接字。

另一種是處理資料鏈路層即其上的資料,通過指定socket第乙個引數為af_packet來建立這種套接字。

af_inet表示獲取從網路層開始的資料

socket(af_inet, sock_raw, …)

當接收包時,表示使用者獲得完整的包含ip報頭的資料報,即資料從ip報頭開始算起。

當傳送包時,使用者只能傳送包含tcp報頭或udp報頭或包含其他傳輸協議的報文,ip報頭以及乙太網幀頭則由核心自動加封。除非是設定了ip_hdrincl的socket選項。

如果第二個引數為sock_stream, sock_dgram,表示接收的資料直接為應用層資料。

pf_packet,表示獲取的資料是從資料鏈路層開始的資料

socket(pf_packet,sock_raw,htos(eth_p_ip)):表示獲得ipv4的資料鏈路層幀,即資料報含乙太網幀頭。14+20+(8:udp 或 20:tcp)

eth_p_ip: 在中定義,可以檢視該檔案了解支援的其它協議。

sock_raw, sock_dgram兩個引數都可以使用,區別在於使用sock_dgram收到的資料不包括資料鏈路層協議頭。

原始套接字

資料出處 實際上,我們常用的網路程式設計都是在應用層的報文的收發操作,也就是大多數程式設計師接觸到的流式套接字 sock stream 和資料報式套接字 sock dgram 而這些資料報都是由系統提供的協議棧實現,使用者只需要填充應用層報文即可,由系統完成底層報文頭的填充並傳送。然而在某些情況下需...

原始套接字

利用原始套接字實現乙個tcp syn flooding 程式 要求 客戶端不斷向攻擊端傳送syn連線請求 客戶端在傳送資料時,通過源位址隨機位址的方式隱藏自己的 位址 檢驗 在shell下通過 netstat tn 檢查syn recv連線數檢驗自己的程式是否成功 好像有點問題。不能偽造mac位址。...

原始套接字

用於tcp通訊的流式套接字 用於udp通訊報式套接字 特點是 我們傳送資料報只需要組應用層的資料報文,收到的資料報也只有應用層的資料 也就是說明,鏈路層,網路層,傳輸層的資料是由底層協議棧自動幫我們組的 如果想要自己從鏈路層,網路層,傳輸層到應用層組乙個資料報,這個時候需要使用原始套接字 原始套接字...