libnet网络编程资料.docVIP

  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文档。上传文档
查看更多
libnet网络编程资料.doc

基于libnet网络编程介绍与分析基于libnet网络编程介绍与分析 当前,基于socket的网络编程已成为当今不可替代的编程方法,它将网络通讯当作文件描述符进行处理,把对这个“网络文件”(即socket套接字)的操作抽象成一种类似于文件操作的方式进行。从实现细节上,这种工作方式根据TCP/IP的网络通讯模型,封装了一系列的实现,使得我们只需要使用一个指定的参数,就可以实现在基于所需协议的数据的发送和接收。 但是,如果我们对那些系统自动给我们做的工作感兴趣,希望与发送的数据作“面对面”的接触,libnet则会是一个不错的选择。 libnet是UNIX系统同台上网络安全工具开发的重要的库,它和libpcap、libnids一起,给网络安全工具的开发人员提供了一组丰富而且完全的武器,使之得以很方便地编写出结构化强、健壮性好、可移植性高等特点的程序。 libnet提供一系列的接口函数,实现和封装了数据包的构造和发送过程。利用它可以亲自构造从应用层到链路层的各层协议的数据包头,并将这些包头与有效数据有序地组合在一起发送出去。当然,它也是基于tcp/ip协议族模型的。 libnet当前的版本是1.1.2,相对于1.0.*版本有比较大的变化。 全部源代码包括18,000 行代码,109个导出函数,其中包括67个建包函数。这使得它支持现有的TCP/IP族的所有协议。此外,它支持多平台,Windows,OS X,BSD,Linux, Solaris,HPUX都能使用。 下图是它支持的协议: libnet库可以被划分为4个功能部分:内存管理、地址解析、包处理、以及其他一些支持函数。 ★ 内存管理函数 单数据包内存初始化及环境建立: libnet_t *libnet_init(int injection_type, char *device, char *err_buf); 资源释放: ??? void libnet_destroy(libnet_t *l); ★ 地址解析函数 地址解析: char *libnet_addr2name4(u_int32_t in, u_int8_t use_name); libnet_name2addr4(libnet_t *l, char *host_name, u_int8_t use_name); struct libnet_in6_addr libnet_name2addr6(libnet_t *l, char *host_name, u_int8_t use_name); void libnet_addr2name6_r(struct libnet_in6_addr addr, u_int8_t use_name, char *host_name, int host_name_len); 获取接口设备IP地址: ??? u_int32_t libnet_get_ipaddr4(libnet_t *l); ??? struct libnet_in6_addr libnet_get_ipaddr6(libnet_t *l); 获取接口设备硬件地址: ??? struct libnet_ether_addr *libnet_get_hwaddr(libnet_t *l); ★ 数据包构造函数 ?? (这一部分函数较多,都以libnet_build_*()的形式出现,在此略过) ★ 数据包发送函数 ??? int libnet_write(libnet_t *l); ★ 相关的支持函数 随机数种子生成器: ??? int libnet_seed_prand(libnet_t *l); 获取随机数: ??? u_int32_t libnet_get_prand(int mod); 端口列表链初始化: ??? int libnet_plist_chain_new(libnet_t *l, libnet_plist_t **plist, char *token_list); 获取端口列表链的下一项(端口范围): ??? int libnet_plist_chain_next_pair(libnet_plist_t *plist, u_int16_t *bport, u_int16_t *eport); 端口列表链输出显示: ??? int libnet_plist_chain_dump(libnet_plist_t *plist); 获取端口列表链: ??? char *libnet_plist_chain_dump_string(libnet_plist_t *plist); 端口列表链内存释放: ??? int libnet_plist_chain_free(libne

文档评论(0)

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

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

1亿VIP精品文档

相关文档