linux原始套接字

2021-09-13 23:21:04 字數 1088 閱讀 9758

通常情況下程式設計師接所接觸到的套接字(socket)為兩類:

(1)流式套接字(sock_stream):一種面向連線的 socket,針對於面向連線的tcp 服務應用;

(2)資料報式套接字(sock_dgram):一種無連線的 socket,對應於無連線的 udp 服務應用。

從使用者的角度來看,sock_stream、sock_dgram 這兩類套接字似乎的確涵蓋了 tcp/ip 應用的全部,因為基於 tcp/ip 的應用,從協議棧的層次上講,在傳輸層的確只可能建立於 tcp 或 udp 協議之上,而 sock_stream、sock_dgram 又分別對應於 tcp 和 udp,所以幾乎所有的應用都可以用這兩類套接字實現。

但是,當我們面對如下問題時,sock_stream、sock_dgram 將顯得這樣無助:

(1)怎樣傳送乙個自定義的 ip 包?

(2)怎樣傳送乙個 icmp 協議包?

(3)怎樣分析所有經過網路的包,而不管這樣包是否是發給自己的?

(4)怎樣偽裝本地的 ip 位址?

這使得我們必須面對另外乙個深刻的主題——原始套接字(sock_raw)。原始套接字廣泛應用於高階網路程式設計,也是一種廣泛的黑客手段。著名的網路sniffer(一種基於被動偵聽原理的網路分析方式)、拒絕服務攻擊(dos)、ip 欺騙等都可以通過原始套接字實現。

原始套接字(sock_raw)可以用來自行組裝資料報,可以接收本機網絡卡上所有的資料幀(資料報),對於監聽網路流量和分析網路資料很有作用。

原始套接字是基於 ip 資料報的程式設計(sock_packet 是基於資料鏈路層的程式設計)。另外,必須在管理員許可權下才能使用原始套接字。

原始套接字(sock_raw)與標準套接字(sock_stream、sock_dgram)的區別在於原始套接字直接置「根」於作業系統網路核心(network core),而  sock_stream、sock_dgram 則「懸浮」於 tcp 和 udp 協議的外圍。

Linux 原始套接字

原始套接字可以用來自行組裝ip資料報,然後將資料報傳送到其他終端。必須在管理員許可權下才能使用原始套接字。總結自 unix網路程式設計 卷1 套接字聯網api 1 原始套接字的建立 int sockfd socket af inet,sock raw,ipproto 後面的 可以是icmp,udp,...

原始套接字

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

原始套接字

參考1 原始套接字能幹什麼?參考2 原始套接字抓包實踐 參考3 各層頭結構 通過原始套接字,我們可以抓取所有傳送到本機的ip包 包括ip頭和tcp udp icmp包頭 也可以抓取所有本機收到的幀 包括資料鏈路層協議頭 普通的套接字無法處理icmp igmp等網路報文,而sock raw可以。利用原...