网络分析技术揭秘:原理、实践与WinPcap深入解析_吕雪峰;彭文波;宋泽宇_AZW3_MOBI_EPUB_PDF_电子书(无页码)_吕雪峰;彭文波;宋泽宇

内容节选

8.1使用WinPcap发送数据包 针对不同的应用情况,WinPcap提供了下列四种方式来把原始数据包发送到网络中。 ❑每次发送一个数据包一次。 ❑每次发送一个数据包,但在内核中重复发送多于一次,次数预先设定。 ❑每次发送一个发送队列(发送队列是一个容器,它能容纳不同数量的数据包),并根据每个数据包的时间戳严格按顺序发送各数据包(称为同步方式)。 ❑每次发送一个发送队列,但不根据每个数据包的时间戳发送各数据包,而是尽可能快速地发送各数据包(称为异步方式)。 用户可根据实际需要来选择合适的发送方式,具体的选择方法及有关各发送方式的性能比较可参见第13章。 8.1.1 wpcap.dll库导出的相应函数 WinPcap为了使用户能够顺利完成数据包的发送任务,在库wpcap.dll中提供了下列函数,用户可以很方便地使用它们。 pcap_sendpacket函数发送单个原始数据包一次或多次,其原型如下:int pcap_sendpacket(pcap_t*p,u_char*buf,int size); pcap_send_queue函数分配一个发送队列,其原型如下:pcap_send_queue*pcap_sendqueue_alloc(u_int memsize); pcap_sendqueue_queue函数把一个原始数据包添加到queue参数所指定的发送队列的尾部,其原型如下:int pcap_sendqueue_queue(pcap_send_queue*queue, const struct pcap_pkthdr*pkt_header, const u_char*pkt_data); pcap_sendqueue_transmit函数发送一个数据包队列到网络,其原型如下:u_int pcap_sendqueue_transmit(pcap_t*p, pcap_send_queue*queue,int sync); pcap_sendqueue_destroy函数释放与一个发送队列相关的所有资源其原型如下:void pcap_sendqueue_destroy(pcap_send_queue*queue) 8.1.2 数据包发送实例 为了更好地理解在网络分析中如何根据实际要求发送数据包,本节将使用WinPcap所提供的函数来演示各种发送方式,同时还分别提供了典型的使用实例程序与简单的测试结果。 1.发送单个数据包 下面的代码将演示如何通过WinPcap提供的pcap_sendpacket函数发送单个数据包一次,完整的代码见[ch8/send工程]。/* 生成数据包的函数*/ void gen_packet(unsigned char*buf,int len); int main() { /*获得系统的网络适配器设备列表,并选择一个的适配器设备,打开它*/ …… /*发送数据包*/ //生成数据包 int packetlen=100;//数据包长度为100字节 unsigned char*buf=(unsigned char*)malloc(packetlen); memset(buf,0x0,packetlen); gen_packet(buf,packetlen);//获得生成的数据包,长度为packetlen //开始数据包发送 if((ret=pcap_sendpacket(adhandle,buf,packetlen))==-1) { //发送失败,释放资源,程序返回 …… return-1; } /* *释放资源, *包括关闭打开的适配器,释放适配器设备列表,释放存储待发数据包的内存 */ …… return 0; } 此实例程序在打开了合适的网络适配器后,为了存储数据包,会执行内存分配并清零。然后调用gen_packet函数生成一个数据包,该数据包的长度为100字节。最后调用WinPcap库的pcap_sendpacket函数把该数据包发送到网络上。其中gen_packet函数负责生成数据包,其参数buf用来保存所生成数据包的内容,len为要求生成的数据包的长度。 注意 该函数所生成的数据包没有任何实际意义,仅起演示作用。 gen_packet函数的具体实现如下:void gen_packet(unsigned char*buf,int len) { int i=0; // 给数据包的第0到5字节填充目标MAC地址:01:01:01:01:01 for(i=0;i<6;i++) { buf[i]=0x01; } //给数据包的第6到11字节填充源MAC地址:02:02:02:02:02 for(i=6;i<12;i++) { buf[i]=0x02; } //给数据包的第12到13字节填充协议标识0xcd,无任何......

  1. 信息
  2. 前言
  3. 第1章 揭开网络分析的神秘面纱
  4. 1.1 网络分析概述
  5. 1.2 网络分析的主要用途
  6. 1.3 黑客使用嗅探器的方法
  7. 1.4 被嗅探数据的真面目
  8. 1.5 常见的网络分析器
  9. 1.6 网络分析器的工作原理
  10. 1.7 嗅探器的检测
  11. 1.8 网络分析工具的主要功能组成
  12. 1.9 Wireshark的概述、安装与使用
  13. 1.10 小结
  14. 第2章 初识网络分析基础库WinPcap
  15. 2.1 WinPcap概述
  16. 2.2 WinPcap的优点
  17. 2.3 WinPcap的使用者
  18. 2.4 WinPcap的体系架构
  19. 2.5 用户空间库接口函数
  20. 2.6 小结
  21. 第3章 网络分析工具的内核驱动基础知识
  22. 3.1 Windows驱动程序基础知识
  23. 3.2 NDIS协议驱动程序
  24. 3.3 小结
  25. 第4章 编译与使用WinPcap
  26. 4.1 源代码目录结构
  27. 4.2 构建驱动程序NPF
  28. 4.3 构建Packet.dll库
  29. 4.4 构建wpcap.dll库
  30. 4.5 安装NPF驱动程序与各库文件
  31. 4.6 使用WinPcap库进行程序开发的实例
  32. 4.7 小结
  33. 第5章 WinPcap驱动程序的初始化与清除
  34. 5.1 驱动程序中的初始化函数DriverEntry
  35. 5.2 驱动程序中的卸载函数DriverUnload
  36. 5.3 小结
  37. 第6章 获得与释放网络适配器设备列表
  38. 6.1 使用WinPcap选择合适的适配器
  39. 6.2 获得网络适配器列表的幕后
  40. 6.3 释放网络适配器列表的实现
  41. 6.4 小结
  42. 第7章 打开与关闭适配器
  43. 7.1 使用WinPcap打开与关闭适配器
  44. 7.2 打开与关闭适配器的幕后
  45. 7.3 小结
  46. 第8章 数据包的发送
  47. 8.1 使用WinPcap发送数据包
  48. 8.2 数据包发送的幕后
  49. 8.3 小结
  50. 第9章 数据包的内核过滤
  51. 9.1 基础知识
  52. 9.2 WinPcap数据包过滤基础
  53. 9.3 使用WinPcap过滤数据包
  54. 9.4 数据包过滤的幕后
  55. 9.5 小结
  56. 第10章 数据包的接收
  57. 10.1 使用WinPcap接收数据包
  58. 10.2 数据接收的幕后
  59. 10.3 小结
  60. 第11章 统计网络流量与网络状态
  61. 11.1 使用WinPcap进行网络统计的方法
  62. 11.2 网络统计的幕后11.2.1工作模式
  63. 11.3 小结
  64. 第12章 文件的存储与读取
  65. 12.1 libpcap文件存储格式
  66. 12.2 使用WinPcap进行文件存储与读取
  67. 12.3 数据包文件存储的幕后
  68. 12.4 数据包文件读取的幕后
  69. 12.5 内核文件转储的实现
  70. 12.6 小结
  71. 第13章 修改源代码
  72. 13.1 给wpcap.dll增加设置重复发送次数的函数
  73. 13.2 修改WinPcap的内核驱动代码
  74. 13.3 小结
  75. 第14章 性能测试与分析
  76. 14.1 测试环境
  77. 14.2 测试实例
  78. 14.3 小结
  79. 附录A 源语法规范
  80. 附录B 过滤表达式规范
  81. 附录C SYN洪泛攻击的详细资料
  82. C.1 SYN洪泛攻击原理
  83. C.2 使用WinPcap实现SYN洪泛攻击的方法
  84. C.3 SYN洪泛攻击的防御
  85. 附录D ARP欺骗资料
  86. D.1 ARP简介
  87. D.2 ARP工作原理
  88. D.3 常见ARP攻击类型
  89. D.4 局域网ARP欺骗的应对
  90. D.5 常用的防护方法
  91. D.6 ARP欺骗的正当用途
  92. 参考文献