当我通过套接字编程时,我无法清楚地理解RAW_SOCKET.
我的理解是
如果我打开一个带有此选项AF_INET的套接字,RAW_SOCKET意味着我可以在AF_INET标头之前创建我现在的标头,但最后数据是以AF_INET协议的格式发送的.我的理解是否正确.如果有错,可以解释一下.
谢谢
SuB*_*SuB 49
在每一层中,数据包都有两个不相交的部分:Header,Payload
非Raw套接字意味着您只需确定传输层有效负载即可.即,创建传输,网络和数据链路层标头是OS任务.
原始套接字意味着您可以确定数据包的每个部分,包括标头或有效负载.请注意,原始套接字是一般词.我将原始套接字分类为:网络套接字和数据链接套接字(或者替代L3套接字和L2套接字)
在L3 Socket中,您可以确定网络层中数据包的标头和有效负载.例如,如果网络层协议是IPv4,则可以确定IPv4标头和有效负载.因此,您可以设置传输层标头/有效负载,ICMP标头/有效负载,路由协议标头/有效负载.
在L2 Socket中,您可以在数据链路层中设置数据包的头和有效负载,即数据包中的所有内容.因此,您可以使用L3 Socket完成所有操作,并确定ARP报头/有效负载,PPP报头/有效负载,PPPOE报头/有效负载,....
现在编程:
第三参数指定有效载荷协议
KBa*_*art 15
RAW_SOCKET允许用户在互联网(IP)级别上实现自己的传输层协议.您负责创建和解析传输级别标头及其背后的逻辑.数据包看起来像:
-------------------------------------------------------------------
| Ethernet (typically) header | IP header | Your header | payload |
-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
编辑:有原始套接字上很好的说明Linux手册页,或者在这里,如果你使用的是Windows.
您还可以将 SOCK_RAW 与“数据包套接字”一起使用,这将允许您完全控制 L2(以太网)和 L3(IP)层。这意味着您可以完全自定义渲染来自 NIC 的数据包。
详细信息在这里:
http://www.kernel.org/doc/man-pages/online/pages/man7/packet.7.html
归档时间: |
|
查看次数: |
32162 次 |
最近记录: |