原始套接字简介
?一?原始套接字概述
原始套接字,指在傳輸層下面使用的套接字。流式套接字和數據報套接字這兩種套接字工作在傳輸層,主要為應用層的應用程序提供服務,并且在接收和發送時只能操作數據部分,而不能對IP首部或TCP和UDP首部進行操作,通常把這兩種套接字稱為標準套接字。
但是,如果我們開發的是更底層的應用,比如發送一個自定義的IP包、UDP包、TCP包或ICMP包,捕獲所有經過本機網卡的數據包,偽裝本機的IP,想要操作IP首部或傳輸層協議首部,等等,這些功能對于這兩種套接字就無能為力了。這些功能需要使用另一種套接字來實現,這種套接字叫作原始套接字,功能更強大,更底層。
原始套接字可以在鏈路層收發數據幀。
二?原始套接字和標準套接字的區別
原始套接字可以自動組裝數據包(偽裝本地IP和本地MAC),可以接收本機網卡上所有的數據幀(數據包)。另外,必須在管理員權限下才能使用原始套接字。
原始套接字直接置“根”于操作系統網絡核心(Network?Core),而SOCK_STREAM、SOCK_DGRAM則“懸浮”于TCP和UDP協議的外圍,如下圖所示:
流式套接字只能收發TCP協議的數據,數據報套接字只能收發UDP協議的數據,原始套接字可以收發沒經過內核協議棧的數據包。
三?原始套接字的編程方法
原始套接字的編程和UDP的編程方法差不多,也是創建一個套接字后,通過這個套接字收發數據。重要區別是原始套接字更底層,可以自行封裝數據包,制作網絡嗅探工具,實現拒絕服務攻擊,實現IP欺騙,等等。面向鏈路層的原始套接字用于在MAC層(二層)上收發原始數據幀,這樣就允許用戶在用戶空間完成MAC上各個層次的實現。
?
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/89577351
?
原始套接字和普通的TCP套接字有什么不同:https://zhidao.baidu.com/question/495793746.html
總結
- 上一篇: 哈利波特魔法觉醒手游巫师棋怎么玩
- 下一篇: 原始socket例子