一 原始套接字

原始套接字(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报文等。当需要操作更底层的数据的时候,就需要采用其他的方式。

最新文章

  1. GUID简介
  2. Fiddler
  3. 分享大家一个背景为下雪的JQuery
  4. lintcode:删除链表中指定元素
  5. 51nod1022 石子归并 V2
  6. erase() 返回的是删除此元素之后的下一个元素的迭代器 .xml
  7. Part 59 to 60 Difference between Convert ToString and ToString,String and StringBuilder
  8. ios使用openUrl进行应用跳转
  9. Android中 Http请求
  10. linux下安装oracle11g 64位最简客户端(转)
  11. Nginx配置文件(2)
  12. 2018-2019-2 20165303《网络对抗技术》Exp2 后门原理与实践
  13. Eureka 2.0 开源流产,真的对你影响很大吗?
  14. dubbo 初探
  15. pointcut 切面表达式 切入点表达式
  16. Android应用系列:手把手教你做一个小米通讯录(附图附源码)
  17. MVVM Light Toolkit使用指南
  18. 洛谷P3389 【模板】高斯消元法(+判断是否唯一解)
  19. zabbix监控系列(5)之通过trap模式监控网络设备
  20. eclipse 注释字体不一致的问题

热门文章

  1. 360WIFI下使用Fiddler抓取手机APP流量
  2. [置顶] Jquery发展
  3. 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008
  4. Android Studio代码自己主动提示无效(not available in Power Save mode)
  5. ASCII码表完整版
  6. RMAN数据库恢复之恢复归档日志文件
  7. 图文讲解基于centos虚拟机的Hadoop集群安装,并且使用Mahout实现贝叶斯分类实例 (7)
  8. 设置启动页面-Launch Image
  9. ffmpeg推rtmp流到crtmpserver直播
  10. css模板之 web模板一