原始套接字


原始套接字

  一般情況下程序設計人員主要接觸以下兩類套接字:

  • 流式套接字(SOCK_STREAM): 面向連接的套接字,對應於 TCP 應用程序。
  • 數據包套接字(SOCK_DGRAM): 無連接的套接字,對應於UDP 應用程序。

  這一類套接字為標准套接字。此外,還有一類原始套接字,它是一種對原始網絡報文進行處理的套接字。原始套接字的用途主要有:

  • 發送自定義的IP 數據報
  • 發送ICMP 數據報
  • 網卡的偵聽模式,監聽網絡上的數據包。
  • 偽裝IP地址。
  • 自定義協議的實現。

  原始套接字主要應用在底層網絡編程上,同時也是網絡黑客的必備手段。eg:sniffer、拒絕服務(DoS)、IP 地址欺騙等都需要在原始套接字的基礎上實現。

  原始套接字與標准套接字之間的關系如下圖所示。標准套接字與網絡協議棧的TCP、UDP 層打交道,而原始套接字則與IP層級網絡協議棧核心打交道。

 

  原始套接字的創建:

int rawsock = socket(AF_INET, SOCK_RAW, protocol);

  常用協議的類型如下:

  • IPPROTO_IP : IP 協議, 接收或者發送IP數據包,包含IP頭部。
  • IPPROTO_ICMP: ICMP 協議, 接收或者發送ICMP 的數據包,IP 的 頭部不需要處理。
  • IPPROTO_TCP: TCP 協議,接收或者發送TCP 數據包
  • IPPROTO_UDP: UDP 協議,接收或者 UDP 數據包
  • IPPROTO_RAW : 原始IP包

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM