Linux网络编程:原始套接字的魔力【上】.pdf

Linux网络编程:原始套接字的魔力【上】.pdf

ID:53910301

大小:2.00 MB

页数:11页

时间:2020-04-27

Linux网络编程:原始套接字的魔力【上】.pdf_第1页
Linux网络编程:原始套接字的魔力【上】.pdf_第2页
Linux网络编程:原始套接字的魔力【上】.pdf_第3页
Linux网络编程:原始套接字的魔力【上】.pdf_第4页
Linux网络编程:原始套接字的魔力【上】.pdf_第5页
资源描述:

《Linux网络编程:原始套接字的魔力【上】.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux网络编程:原始套接字的魔力【上】星期四,8月232012,10:47下午基于原始套接字编程在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证:也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤裸裸的修改,当然还有IP头。换句话说,我们对它们头部操作的空间非常受限,只能使用它们已经开放给我们的诸如源、目的IP,源、目的端口等等。今天我们讨论一下原始套接字的程序开发,用它作为入门协议栈的进阶跳板太合适不过

2、了。OK闲话不多说,进入正题。原始套接字的创建方法也不难:socket(AF_INET,SOCK_RAW,protocol)。重点在protocol字段,这里就不能简单的将其值为0了。在头文件netinet/in.h中定义了系统中该字段目前能取的值,注意:有些系统中不一定实现了netinet/in.h中的所有协议。源代码的linux/in.h中和netinet/in.h中的内容一样。我们常见的有IPPROTO_TCP,IPPROTO_UDP和IPPROTO_ICMP,在博文“(十六)洞悉linux下的Netfilter&iptable

3、s:开发自己的hook函数【实战】(下)”中我们见到该protocol字段为IPPROTO_RAW时的情形,后面我们会详细介绍。用这种方式我就可以得到原始的IP包了,然后就可以自定义IP所承载的具体协议类型,如TCP,UDP或ICMP,并手动对每种承载在IP协议之上的报文进行填充。接下来我们看个最著名的例子DOS攻击的示例代码,以便大家更好的理解如何基于原始套接字手动去封装我们所需要TCP报文。先简单复习一下TCP报文的格式,因为我们本身不是讲协议的设计思想,所以只会提及和我们接下来主题相关的字段,如果想对TCP协议原理进行深入了解那

4、么《TCP/IP详解卷1》无疑是最好的选择。我们目前主要关注上面着色部分的字段就OK了,接下来再看看TCP3次握手的过程。TCP的3次握手的一般流程是:(1)第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK_NUMBER=j+1),同时自己也发送一个SYN包(SEQ_NUMBER=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。(3)第三次握手:客户端A收到服务器B的S

5、YN+ACK包,向服务器B发送确认包ACK(ACK_NUMBER=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。至此3次握手结束,TCP通路就建立起来了,然后客户端与服务器开始交互数据。上面描述过程中,SYN包表示TCP数据包的标志位syn=1,同理,ACK表示TCP报文中标志位ack=1,SYN+ACK表示标志位syn=1和ack=1同时成立。原始套接字还提供了一个非常有用的参数IP_HDRINCL:1、当开启该参数时:我们可以从IP报文首部第一个字节开始依次构造整个IP报文的所有选项,但是

6、IP报文头部中的标识字段(设置为0时)和IP首部校验和字段总是由内核自己维护的,不需要我们关心。2、如果不开启该参数:我们所构造的报文是从IP首部之后的第一个字节开始,IP首部由内核自己维护,首部中的协议字段被设置成调用socket()函数时我们所传递给它的第三个参数。开启IP_HDRINCL特性的模板代码一般为:constinton=1;if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))<0){printf("setsockopterror!");}所以,我们还得

7、复习一下IP报文的首部格式:同样,我们重点关注IP首部中的着色部分区段的填充情况。有了上面的知识做铺垫,接下来DOS示例代码的编写就相当简单了。我们来体验一下手动构造原生态IP报文的乐趣吧:点击(此处)折叠或打开1.//mdos.c2.#include3.#include4.#include5.#include6.#include7.#include8.#include9.#include

8、s/types.h>10.#include11.#include12.#include13.#include14

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。