第七章 底层网络编程 网络编程技术 教学课件.ppt

第七章 底层网络编程 网络编程技术 教学课件.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 底层网络编程 网络编程技术 教学课件

套接字选项 1 setsockopt int setsockopt(socket s,int level,int optname,const char *optval,int optlen) level指定控制套接字的层次.可以取三种值: 1)SOL_SOCKET:通用套接字选项. 2)IPPROTO_IP:IP选项. 3)IPPROTO_TCP:TCP选项. optname指定控制的方式(选项的名称)。 optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换 。 套接字选项 套接字选项 套接字选项 2 ioctlsocket int ioctlsocket(socket s,long cmd,unsigned long *argp); 其中cmd选项有: SIOCATMARK 是否到达带外标记 FIOASYNC 异步输入/输出标志 FIONREAD 缓冲区可读的字节数 或:int WSAIoctl( SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );详见MSDN; 7.5 基于libnet的网络数据包构造技术 Libnet是专业的网络数据包构造和发送开发包;根据其实现的功能,主要作用体现在: 1.构造任意数据内容; 2.构造各种不同协议的数据包; 3.从IP层构造数据包; 4.从链路层构造数据包; 5.发送数据包; 6.自动计算校验和; 7.可以发送多个数据包; 8.构造不同格式的数据包; 9.修改已知数据包; 10.构造不同平台的网络数据包。 7.5 基于libnet的网络数据包构造技术 libnet出现的原因主要有: 为网络程序员提供一个简单的编程接口,使程序员能把主要精力集中用来解决问题,而不用考虑底层网络细节; Libnet是一个与libpcap类似的数据包注入器,可以用来编写有关网络测试、网络故障诊断和网络安全等方面的应用程序和工具。虽然libpcap同样具有数据包构造和发送能力,但在构造数据包方面没有libnet使用方便; Libnet的主要目的是用来构造和注入网络数据包,而不是捕获网络数据包。通过与libpcap配合使用,可以用来构造许多有用的网络程序和网络工具。 7.5 基于libnet的网络数据包构造技术 Libnet工作过程 7.5 基于libnet的网络数据包构造技术 Libnet与libpcap的关系 7.5 基于libnet的网络数据包构造技术 Libnet安装与配置:P222 7.5 基于libnet的网络数据包构造技术 libnet库提供的接口函数包含15种数据包生成器和两种数据包发送器(IP层和数据链路层)。 提供了50多个C API函数,功能涵盖 内存管理(分配和释放)函数 地址解析函数 各种协议类型的数据包构造函数,包括应用层(如DNS,RIP,SNMP等)传输层(如TCP,UDP等)、网络层(如IP,ARP,ICMP,,IGMP,OSPF等)和数据链路层(如Ethernet帧等) 数据包发送函数(IP层和链路层) 一些辅助函数,如产生随机数、错误报告、端口列表管理等 内存管理函数 单数据包内存初始化: int libnet_init_packet(u_short packet_size, u_char **buf); 单数据包内存释放: void libnet_destroy_packet(u_char **buf); 多数据包(缓冲池)内存初始化: Int libnet_init_packet_arena(struct libnet_arena **arena, u_short packet_num, u_short packet_size); 访问多数据包(缓冲池)内存中的下一个数据包: u_char *libnet_next_packet_from_arena(struct libnet_arena **arena, u_short packet_size); 多数据包内存释放: void libnet_destroy_packet_a

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档