Linux網路程式設計 原始套接字能幹什麼?

2021-07-22 06:19:31 字數 1248 閱讀 7177

通常情況下程式設計師接所接觸到的套接字(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 協議的外圍。

流式套接字只能收發 tcp 協議的資料,資料報套接字只能收發 udp 協議的資料,原始套接字可以收發核心沒有處理的資料報。

Linux網路程式設計 原始套接字

原始套接字 sock raw 應用原始套接字,我們可以編寫出由tcp和udp套接字不能夠實現的功能.注意原始套接字只能夠由有 root許可權的人建立.dos.c include include include include include include include include inclu...

網路程式設計原始套接字

socket stream 流式套接字 socket dgram socket raw 原始套接字 ipproto ip ip協議 ipproto icmp internet控制訊息協議,配合原始套接字可以實現ping的功能 ipproto igmp internet 閘道器服務協議,在多播中用到 ...

Linux 原始套接字

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