原始套接字与网络协议实现技术.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第31讲主要内容

1.原始套接字原理

2.原始套接字创建

3.原始套接字创建需要注意的细节问题(限制/

选项)

4.ICMPPing报文格式及介绍

5.利用原始套接字实现Ping命令

6.路由发现原理介绍

7.TraceRoute命令原理及实现

8.利用原始套接字实现UDP协议封包

9.利用原始套接字实现TCP协议的方法

10.GRSLib中关于Ping功能和TraceRoute功能

的封装

引言

❖之前已经掌握了TCP/IP协议中的骨干协议,重点掌握

了每种协议的数据结构(格式);

❖接下来了,大家的疑问就是这些格式貌似在之前的

SOCKET编程部分中并没有讲解,更没有提及任何可以

控制这些数据结构细节的编程方法;

❖其实如果大家够细心,应该注意了课程中一直再提的一

个理念就是可以对网络层/传输层进行编程;

❖而这种编程的方法,就是这一讲要重点介绍的原始套接

字方法;

原始套接字

❖原始套接字本质还是套接字;

❖之所以被称为原始,是因为对于一些分层的网络协议来

说,原始套接字可以对底层的协议进行操作,这与利用

普通的SOCKET使用较的协议来直接实现功能不

同;

❖利用原始套接字可以位于基层的传输协议;

❖使用原始套接字,也可以对IP头信息进行操作;

❖其它大多数协议(除ATM)根本不支持原始套接字;

❖所有原始套接字都是使用SOCK_RAW类型创建的;

❖目前只有Winsock2了原始套接字的支持;

❖要想顺利的使用原始套接,就要对基层的协议有充分的

了解;

创建原始套接字

❖可以调用socket函数或WSASocket函数来创建原始

套接字;

❖下面的例子显示了创建使用ICMP协议的原始套接字:

SOCKETsINVALID_SOCKET;

s=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);

//或者:下面还打开了IO特性

s=

WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NUL

L,0,WSA_FLAG_OVERLAPPED);

❖这里只是创建了使用ICMP协议的原始套接字,实际还

可以创建很多种类的原始套接字;

原始套接字的安全限制

❖在WinNT内核的系统上,除了系统管理员组之外的

用户都无法正常的使用原始套接字;

❖通常是在调用bind函数时,会返回WSAEACCES;

❖要想绕过这个限制,就需要在表中

HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr

olSet\services\AFD\Parameters

项下的DisableRawSecurity键值(DWORD型)改为1

如果没有这个键值就创建它

原始的套接字类型

❖前面的例子中演示了如何创建一个使用ICMP协议的原

始套接字

❖其实还可以创建类型的原始套接字,只需为协议参

数指定下列值即可:

◼IPPROTO_RAW

◼IPPROTO_IP

◼IPPROTO_ICMP

◼IPPROTO_IGMP

◼IPPROTO_TCP

◼IPPROTO_UDP(等等)

创建原始套接字的例子

❖RawSocket项目通过创建不同协议类型的原始套机字

演示了几乎所有可以创建的原始套接字类型;

❖另外SamePort项目演示了TCP/UDP协议使用相同的

端口而不的情况示例.

IP_HDRINCL选项

❖对于像IPPROTO_UDP/IPPROTO_TCP这种类型的原

始套接字来说,一般还需要指定IP_HDRINCL选项

❖该选项主要用于说明调用send/sendto等函数发送数

据时其中包含IP首部

❖一般情况下,无论什么类型的原始套接字都会接收到完

整的IP包,包括IP头部,对应协议头部和数据

❖但是发送时默认是不包括IP头部的(由SOCKET生

您可能关注的文档

文档评论(0)

wx5620 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档