LINUX 网络编程 原始套接字
一 原始套接字
原始套接字(SOCK_RAW)是一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心。然而,原始套接字能做什么呢?首先来说,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。总体来说,SOCK_RAW可以处理普通的网络报文之外,还可以处理一些特殊协议报文以及操作IP层及其以上的数据。
既然SOCK_RAW有以上特性,所以在某些处理流程上它区别于普通套接字。
· 若设置IP_HDRINCL选项,SOCK_RAW可以操作IP头数据(也就是用户需用填充IP头及其以上的payload);否则SOCK_RAW无法操作IP头数据
· 端口对于SOCK_RAW而言没有任何意义
· 如果使用bind函数绑定本地IP,那么如果IP_HDRINCL未设置,则用此IP填充源IP地址;若不调用bind则将源IP地址设置为外出接口的主IP地址
· 如果使用connect函数设置目标IP,则可以使用send或者write函数发送报文,而不需要使用sendto函数
· 内核处理流程:
· 接收到的TCP、UDP分组不会传递给任何SOCK_RAW
· ICMP、IGMP报文分组传递给SOCK_RAW
· 内核不识别的IP报文传递给SOCK_RAW
· SOCK_RAW是否接收报文:
· Protocol指定类型需要匹配,否则不传递给该SOCK_RAW
· 如果使用bind函数绑定了源IP,则报文目的IP必须和绑定的IP匹配,否则不传递给该SOCK_RAW
· 如果使用connect函数绑定了目的IP,则报文源IP必须和指定的IP匹配,否则不传递给该SOCK_RAW
综上所述,原始套接字处理的只是IP层及其以上的数据,比如实现SYN FLOOD攻击、处理PING报文等。当需要操作更底层的数据的时候,就需要采用其他的方式。
最新文章
- GUID简介
- Fiddler
- 分享大家一个背景为下雪的JQuery
- lintcode:删除链表中指定元素
- 51nod1022 石子归并 V2
- erase() 返回的是删除此元素之后的下一个元素的迭代器 .xml
- Part 59 to 60 Difference between Convert ToString and ToString,String and StringBuilder
- ios使用openUrl进行应用跳转
- Android中 Http请求
- linux下安装oracle11g 64位最简客户端(转)
- Nginx配置文件(2)
- 2018-2019-2 20165303《网络对抗技术》Exp2 后门原理与实践
- Eureka 2.0 开源流产,真的对你影响很大吗?
- dubbo 初探
- pointcut 切面表达式 切入点表达式
- Android应用系列:手把手教你做一个小米通讯录(附图附源码)
- MVVM Light Toolkit使用指南
- 洛谷P3389 【模板】高斯消元法(+判断是否唯一解)
- zabbix监控系列(5)之通过trap模式监控网络设备
- eclipse 注释字体不一致的问题
热门文章
- 360WIFI下使用Fiddler抓取手机APP流量
- [置顶] Jquery发展
- 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008
- Android Studio代码自己主动提示无效(not available in Power Save mode)
- ASCII码表完整版
- RMAN数据库恢复之恢复归档日志文件
- 图文讲解基于centos虚拟机的Hadoop集群安装,并且使用Mahout实现贝叶斯分类实例 (7)
- 设置启动页面-Launch Image
- ffmpeg推rtmp流到crtmpserver直播
- css模板之 web模板一