陆建德《网络程序设计》《网络程序设计》第02章.pptVIP

陆建德《网络程序设计》《网络程序设计》第02章.ppt

  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文档。上传文档
查看更多
2.5 原始套接字 (Raw Socket) 利用原始套接字 ,可以访问基层的网络协议,如IP(网际协议)、ICMP(Internet控制消息协议)、IGMP(Internet组管理协议)等。很多网络实用工具,如traceroute、ping、网络嗅探器(sniffer)程序等,就是利用原始套接字实现的。 Raw socket的作用主要在三个方面: 1. 通过raw socket接收发向本机的 ICMP/IGMP信包、数据链 路层帧, 或者用来发送ICMP/IGMP信包、数据链路层帧; 2. 接收、发送本机TCP/IP栈不能识别处理的IP信包(如开发本 机内核中还没有实现的基于IP的OSPF协议或自定义协议); 3. 用来发送一些自己规定源地址等特殊作用的IP包(如以伪造 自己源IP地址、源端口写IP头、TCP头等等的hacker行为) 2.5.1 原始套接字的创建 格式一 (Unix/Linux): int sockRaw=socket(AF_INET, SOCK_RAW, protocol); 格式二 (Windows): SOCKET sockRaw=WSASocket(AF_INET, SOCK_RAW, protocol, NULL, 0, 0); 参数 protocol 的取值 要想收到什么样的数据包,就应在参数 protocol 里指定相应的协议类型,取符号常量值如下: IPPROTO_ICMP 1 /* ICMP协议 */ IPPROTO_IGMP 2 /* IGMP协议 */ IPPROTO_TCP 6 /* TCP协议 */ IPPROTO_UDP 17 /* UDP协议 */ IPPROTO_IP 0 /* IP协议 */ (发IP包时,若设置了IP_HDRINCL选项,需自己填写IP包首部,但标识号和校验和两项应暂置0,而后由内核自动填入适当的值) IPPROTO_RAW 255 /* 原始IP */ (该项特殊:只用来发送IP包,不能接收任何数据。此时,需自己填充IP头,且自己计算校验和) 2.5.2 原始套接字的使用 1.根据需要设置套接字的选项 在默认情况下,IP自动填充IP数据包首部,若需自己填写IP数据包首部时,可使用setsockopt()对原始套接字设置选项 IP_HDRINCL。 2.调用connect和bind函数来绑定对方和本地地址 原始套接字是直接使用IP的套接字,是非面向连接的。但可调用connect和bind函数绑定对方、本地地址。 3.发送数据包 若未用connect绑定,发送用sendto()或sendmsg();若用connect绑定,发送用send()或wrire()。发送缓冲中是否由程序填入IP头需由IP_HDRINCL决定。 4.接收数据包。内核接收到数据包后,判别包的类型: (1)若UDP和TCP包, 不传给原始套接字,除非通过直接访问数据链路层接收; (2)大多数ICMP包及内核能识别类型的包, 都传一个拷贝给匹配的原始套接字; (3)对剩下的内核不能识别类型的IP包,则直接传递给匹配的原始套接字。 另外,不管是否用IP_HDRINCL 选项,用recvfrom() 接收的数据总是包括整个IP包的(含IP头)。 原始套接字的使用小结 当内核接收到IP包的时候,首先检查IP包的 protocol 域,当存在与 protocol 域匹配的 raw socket,就将包拷贝或传递 (遵循上页规则)给raw socket,拷贝情况下,内核随后还会

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档