1.原始套接字是允许访问底层传输协议的一种套接字类型,提供了普通套接字所不具备的功能,能够对网络数据包进行某种程度的控制操作

因此原始套接字通常用于开发简单网络性能监视程序以及网络探测、网络攻击

2.从用户的角度看,在TCP/IP协议簇中,流式套接字和数据报套接字这两类套接字分别对应于传输层的TCP和UDP协议,几乎所有的应用数据传输都可以用这两类套接字实现

3.Barkeley套接字将流式套接字和数据报套接字定义为标准套接字,用于在主机之间通过TCP和UDP来传输数据

4.为了保证Internet的使用效率,除了传输数据之外,操作系统的协议栈还处理了大量的非数据流量,如果程序员在创建应用时也需要对这些非数据流量进行控制,那么需要原始套接字,这种套接字越过了TCP/IP协议栈的部分层次,为程序员提供了完全且直接的数据包级的Internet访问能力

5.对于使用普通流式套接字和数据报套接字的应用程序,它们只能控制数据包的数据部分,也就是除了传输层首部和网络层首部以外的,需要通过网络传输的数据部分

而传输层首部和网络层首部则由协议栈根据创建套接字时指定的参数负责填充

6.通过原始套接字可以控制传输层的首部,也可以控制网络层的首部,这给程序员提供了很大的灵活性

原始套接字为网络程序提供的这种灵活性给网络安全带来了一定的安全隐患

7.具体而言,原始套接字提供普通TCP和UDP套接字不提供的以下三种能力

①发送和接收ICMPv4、IGMPv4和ICMPv6等分组。原始套接字能够处理在IP头中预定义的网络层上的协议分组,如ICMP、IGMP等

举例来说,ping程序使用原始套接字发送ICMP回射请求并接受ICMP回射应答。多播路由守护程序也使用原始套接字发送和接收IGMPv4分组

②发送和接受内核不处理其协议字段的IPv4数据包。对于8位IPv4协议字段,大多数内核仅仅处理该字段值为1(ICMP协议)、2(IGMP协议)、6(TCP协议)、17(UDP协议)的数据报

举例来说,OSPF路由协议既不使用TCP也不使用UDP,而是直接通过IP协议承载,协议类型为89

如果想在一个没有安装OSPF路由协议的系统上处理OSPF数据报文,那么实现OSPF的程序必须使用原始套接字读写这些IP数据包,因为内核不知道如何处理协议字段为89的IPv4数据包,这个能力还延续到IPv6

③控制IPv4首部。使用原始套接字不仅能够直接处理IP协议承载的协议分组,而且能够直接控制IP首部,通过设置IP_HDRINCL套接字选项可以控制IPv4首部字段的自行构造,我们可以利用该选项构造特殊的IP首部以达到某些探测和访问需求

8.尽管原始套接字的功能强大,可以构造TCP和UDP的协议数据完成数据传输,但是这种套接字类型也并不是在所有的情况下都适用

在网络层上,原始套接字基于不可靠的IP分组传输服务,与数据报套接字类似,这种服务的特点是无连接、不可靠

无连接的特点决定了原始套接字的传输非常灵活,具有资源消耗小、处理速度快的优点

不可靠的特点意味着在网络质量不好的环境下,数据包丢失会比较严重

9.结合原始套接字的开发层次和能力,原始套接字适合于在以下场合选择使用:

①特殊用途的探测应用。原始套接字提供了直接访问硬件通信的相关能力,其工作层次决定了此类套接字具有灵活的数据构造能力,应用程序可以利用原始套接字操控TCP/IP数据包的结构和内容,实现面向特殊用途的探测和扫描

原始套接字适用于要求数据包构造灵活高的应用

②基于数据包捕获的应用

对于从事协议分析或网络管理的人来说,各种入侵检测、流量监控以及协议分析软件是必备的工具,这些软件都具有数据包捕获和分析的功能

原始套接字能够操控网卡进入混在模式的工作状态,从而达到捕获流经网卡的所有数据包的目的

使用原始套接字可以满足数据包捕获和分析的应用需求

③特殊用途的传输应用

原始套接字能够处理内核不认识的协议数据,对于一些特殊应用,我们希望不增加内核功能,而是完全在用户层面完成对某类特殊协议的支持,原始套接字能够帮助应用数据在构造过程中修改IP首部协议字段值,并接受处理这些内核不认识的协议数据,从而完成了协议功能在用户层面的扩展

原始套接字的灵活性决定了这种编程方法受到了许多黑客和网络管理人员的欢迎,但是由于涉及复杂的控制字段构造和解释工作,使用这种套接字类型完成网络通信并不容易,需要程序设计者对TCP/IP协议有深入的理解,同时具备深厚的网络程序设计经验

10.使用原始套接字编写的程序往往面向特定应用,侧重于网络数据的构造与发送或者捕获与分析

使用原始套接字传送数据与使用数据报套接字的过程类似,不需要建立连接,而是在网络层上直接根据目的地构造IP分组进行数据传送

11.基于原始套接字的数据发送过程:

在通信过程中,数据发送方根据协议要求,将要发送的数据填充进发送缓冲区,同时给发送数据附加上必要的协议首部,全部填写好后,将数据发送出去

①Windows Sockets DLL初始化,协商版本号。在数据发送前,应用程序需要首先进行Windows Sockets DLL初始化,并创建好原始套接字,为网络通信分配必要的资源

②创建套接字,指定使用原始套接字进行通信,根据需要设置IP控制选项。根据应用的不同,原始套接字有两种选择:仅构造IP数据或构造IP首部和IP数据

③指定目的地址和通信端口

④填充首部和数据

⑤发送数据

⑥关闭套接字

⑦结束对Windows Sockets DLL的使用,释放资源

12.基于原始套接字的数据接收过程:

在通信过程中,数据接收放设定好接收条件后,从网络中接收到与预设条件相匹配的网络数据,如果出现了噪声,对数据进行过滤

①Windows Sockets DLL初始化,协商版本号。在数据发送前,应用程序需要首先进行Windows Sockets DLL初始化,并创建好原始套接字,为网络通信分配必要的资源

②创建套接字,指定使用原始套接字进行通信,并声明特定的协议类型

③根据需要设定接收选项

④接收数据

⑤过滤数据

⑥关闭套接字

⑦结束对Windows Sockets DLL的使用,释放资源

网络接口提交给原始套接字的数据并不一定是网卡接收到的所有数据,如果希望得到特定类型的数据包,在步骤3,应用程序可能需要对套接字的接受进行控制,设定接受选项

由于原始套接字的传输也是无连接的,网络接口提交给原始套接字的数据很可能存在噪声,因此在接收到数据后,需要对数据进行一定条件的过滤

综上所述:在使用原始套接字进数据传输的编程过程中,增加了很多操作,如套接字选项的设置、传输协议首部的构造、网卡工作模式的设定以及接收数据的过滤与判断等,这些操作要求程序设计人员在原始套接字的创建、接收与发送过程中充分理解其操作技巧和数据形态

105-网络编程——第七章原始套接字编程(上)相关推荐

  1. 【Linux网络编程】原始套接字编程

    原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据.区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有 ...

  2. Linux网络编程——原始套接字编程

    Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...

  3. 【网络编程】---C++实现原始套接字捕获数据包

    C++实现原始套接字捕获数据包 引言 原始套接字与TCP套接字和UDP套接字的区别 原始套接字编程使用的场合 原始套接字的通信过程 (1)基于原始套接字的数据发送过程 (2)基于原始套接字的数据接收过 ...

  4. linux sock_raw原始套接字编程

    sock_raw原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket   1.socket(AF_INET, SOCK_R ...

  5. 原始套接字编程”中的Teardrop代码编程

    原始套接字编程"中的Teardrop代码编程 (1)实验代码: #include <stdio.h> #include <stdlib.h> #include < ...

  6. 原始套接字编程 | ping程序实现

    [实验目的] 熟悉原始套接字编程的基本流程 理解ping程序的实现机制 理解ICMP协议的基于作用和报文格式. 完成原始套接字的配置. [实验内容] 1.构造ICMP协议首部结构 2.构造IC ...

  7. Windows平台的原始套接字编程的知识点概要(备忘)

    其实从大学学习了C语言后,翻看整本教材只有C语言的语法,根本没有网络编程相关的任何内容,现在回想起来,都记不起自己何时在哪本书上学习了套接字编程,说起TCP.UDP,能知道他们的区别,相关的编程的&q ...

  8. 原始套接字编程(1)

    Linux下原始套接字的原理 创建原始套接字: socket(AF_NET, SOCK_RAW, protocol); 1. 参数protocol用来致命所接收的协议包,如果是像IPPROTO_TCP ...

  9. Teardrop原始套接字编程

    目录 一.含义介绍 二.Teardrop代码编程 参考 一.含义介绍 1.什么是原始套接字 原始套接字的含义就是在传输层之下使用的套接字,它提供了一些 TCP 和 UDP 套接字无法提供的功能,即: ...

最新文章

  1. 两年AI研究经验(教训)总结,进来看看吧!
  2. 【老孙随笔】年轻一代绝非低智商
  3. JS 二级菜单栏的tab切换
  4. c语言char类型溢出,C语言中数据溢出的问题---以char类型为例
  5. 【2019浙江省赛 - J】Welcome Party(并查集,bfs,优先队列,建图)
  6. 2020 q5l使用手册电子版_关于2020下半年自考本科毕业生论文预答辩题目查询的通知...
  7. 某程序员10个月时间做了30个私活单子,纯收入40万?
  8. h5页面保存img_如何设计H5编辑器中的模版库并实现自动生成封面图
  9. Java多线程学习三十九:CAS 有什么缺点?
  10. 時間用function 來計算...如此精確.
  11. cowpatty无线破解之——WPA-PSK字典攻击
  12. LeNet网络分类MINST数据集,附详细代码及注解和B站视频讲解
  13. 国际商务礼仪与标准接待风范
  14. 计算机怎么保存窗口画面,电脑视频怎么旋转保存 怎样将视频画面进行旋转并保存|视频画面旋转工具...
  15. 猫眼top100部高分电影spider
  16. devm_ioremap_resource devm_ioremap 区别
  17. 微信小程序分享二维码生成
  18. 通达信大智慧联动到同花顺单独下单工具下单
  19. 2021最新 2小时搭建属于自己的游戏服务器—《泰拉瑞亚篇》
  20. 飞行堡垒fx80g拆卸电源_华硕飞行堡垒第五代FX80拆机加装内存条教程(整盖翻转拆机)...

热门文章

  1. 2021-2027全球与中国电子邮件营销自动化工具市场现状及未来发展趋势
  2. Office内嵌12国语言翻译功能----翻译好助手(转)
  3. 计算机领域裸机是指,计算机中裸机是指什么
  4. SQL随机选择N条数据,SQL随机查询数据
  5. Git及TortoiseGit 安装及使用
  6. active什么牌子_maiaactive 玛娅是什么牌子,创始人,官网,怎么样详解
  7. linux运维常用培训
  8. 史上最详细sqlmap入门教程
  9. linux系统模拟mac,在 Linux 的 KVM 上安装 Mac OS X Mavericks 虚拟机
  10. Python爬取熊猫TV 英雄联盟游戏分类下面所有主播的人气排行