概述

应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket)。http://www.cnblogs.com/nufangrensheng/p/3583435.html

原始套接口是一种对原始网络报文进行处理的套接口。原始套接口主要应用在底层网络编程上,同时也是网络黑客的必备手段。例如sniffer、拒绝服务(DoS)、IP地址欺骗等都需要在原始套接字的基础上实现。

与原始套接字对应,之前的TCP/UDP的套接字称为标准套接字,如下图所示,为标准套接字与原始套接字之间的关系。标准套接字与网络协议栈的TCP、UDP层打交道,而原始套接字则与IP层级网络协议栈核心打交道。

原始网络套接口提供普通的TCP和UDP套接口不提供的以下3个功能:

1、有了原始套接口,进程可以读与写ICMPv4、IGMPv4和ICMPv6等分组。

2、有了原始套接口,进程可以读与写内核不处理其协议字段的IPv4数据报。

3、有了原始套接口,进程还可以使用IP_HDRINCL套接口选项自行构造IPv4头部。

原始套接口的创建

创建一个原始套接口涉及如下步骤:

1、把第2个参数指定为SOCK_RAW调用socket函数,以创建一个原始套接口。第3个参数(协议类型)通常不为0。

只有超级用户才能创建原始套接口。

2、可以在这个原始套接口上如下开启IP_HDRINCL套接口选项:

const int on = 1;
if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0)
出错处理

3、可以在这个原始套接口上调用bind函数,不过比较少见。bind函数仅仅设置本地地址,因为原始套接口不存在端口的概念。

4、可以在这个原始套接口上调用connect函数,不过也比较少见。connect函数仅仅设置远地地址,同样因为原始套接字不存在端口的概念。

原始套接口输出

原始套接口的输出遵循以下规则:

1、普通输出通过调用sendto或sendmsg并指定宿IP地址完成。如果套接口已经连接,那么也可以调用write、writev或send。

2、如果IP_HDRINCL套接口选项未开启,那么由进程让内核发送的数据的起始地址指的是IP头部之后的第一个字节,因为内核将构造IP头部并把它置于来自进程的数据之前。内核把所构造的IPv4头部的协议字段设置成来自socket调用的第3个参数。

3、如果IP_HDRINCL套接口选项已开启,那么由进程让内核发送的数据的起始地址指的是IP头部的第一个字节。进程调用输出函数写出的数据量必须包括IP头部的大小。整个IP头部由进程构造,不过:(a)IPv4标识字段可置为0,从而告知内核设置该值;(b)IPv4头部校验和字段总是由内核计算并存储;(c)IPv4选项字段是可选的。

4、内核对于超出外出接口MTU的原始分组执行分片。

原始套接口输入

原始套接口输入遵循以下规则:

1、接收到的UDP分组和TCP分组绝不传递到任何原始套接口。如果一个进程想要读取含有UDP分组或TCP分组的IP数据报,它就必须在数据链路层读取这些分组。

2、大多数ICMP分组在内核完成处理其中的ICMP消息后传递到原始套接口。

3、所有IGMP分组在内核完成处理其中的IGMP消息后传递到原始套接口。

4、内核不认识其协议字段的所有IP数据报传递到原始套接口。内核对这些分组执行的唯一处理是针对某些IP头部字段的最小验证:IP版本、IPv4头部校验和、头部长度以及宿IP地址。

5、如果某个数据报以片段形式到达,那么在它的所有片段均到达且重组出该数据报之前,不传递任何片段分组到原始套接口。

UNIX网络编程读书笔记:原始套接口的更多相关文章

  1. UNIX网络编程读书笔记:套接口选项

    概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...

  2. UNIX网络编程读书笔记:套接口地址结构

    前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...

  3. UNIX网络编程读书笔记:简介

    认知套接口编程接口 理解原始套接口(raw socket)的概念   值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙 ...

  4. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  5. UNIX网络编程读书笔记:基本TCP套接口编程

    编写一个完整的TCP客户和服务器程序所需要的基本套接口函数: 1.socket函数(客户端.服务器端都必须调用) 参数family指明协议族(family),该参数也往往被称为协议域(domain). ...

  6. UNIX网络编程读书笔记:基本SCTP套接口编程

    概述 SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的).它最初是为满足不断增长的IP电话市场设计的:具体地说,就是穿越因特网传输电话信令. SCTP是一个 ...

  7. UNIX网络编程读书笔记:基本UDP套接口编程

    概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统).NFS(网络文件系统)和SNMP(简单网络管理协议). 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连 ...

  8. UNIX网络编程读书笔记:端口号、套接口对和套接口

    端口号 端口号(port number):16位整数,用来区分不同的进程. 服务器使用的端口号:TCP和UDP定义了一组众所周知的端口(well-known port),用于标识众所周知的服务. 客户 ...

  9. UNIX网络编程读书笔记:I/O模型(阻塞、非阻塞、I/O复用、信号驱动、异步)

    I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的 ...

随机推荐

  1. 安卓 onTouch OnTouchEvent onChick 顺序

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 分发触摸事件 -> 在 触摸 时候 -> 在触摸事件时候->在点击时候 ...

  2. 压测工具Siege

    一.下载 http://www.joedog.org/ http://www.joedog.org/pub/siege/siege-2.70.tar.gz 二.测试 siege -c200 -r10 ...

  3. Mysql插入数据时,报错this is incompatible with sql_mode=only_full_group_by

    Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'inform ...

  4. [转]Android网格视图(GridView)

    GridView的一些属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动,也可以设置成2.3.4…… 2.android:columnWi ...

  5. Testcase的编写

    ‘ID’用于记录某一功能: ‘标题’用于表示某一Case:(一个功能有多个Case) ‘优先级’标记Case的重要等级,运行顺序 ‘测试步骤’记录测试流程 1.Given:条件 2.And:进行某些前 ...

  6. apt-get和apt-cache命令实例展示

    示例:1 列出所有可用包 linux@localhost:~$ apt-cache pkgnamesaccount-plugin-yahoojpceph-fusedvd+rw-toolse3gnome ...

  7. dwz关闭当前dialog

    首先,前台代码如下: <form method="post" class="pageForm required-validate" onsubmit=&q ...

  8. Django的restful api自动生成工具django-rest-swagger介绍

    源码位置:https://github.com/marcgibbons/django-rest-swagger 文档位置:https://marcgibbons.com/django-rest-swa ...

  9. ASP.NET 5 Beta6发布了(翻译)

    感觉就好像我们刚刚发布了一个版本,现在我们又要发布一个新的版本.开发团队通过努力工作在Visual Studio2015的正式版上提交使用ASP.NET 5开发工具的上的更新以及库的更新.新的版本为b ...

  10. iOS:集合视图UICollectionView、集合视图控制器UICollectionViewController、集合视图单元格UICollectionViewCell(创建表格的另一种控件)

    两种创建表格方式的比较:表格视图.集合视图(二者十分类似) <1>相同点:   表格视图:UITableView(位于storyboard中,通过UIViewController控制器实现 ...