Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26832
  • 博文数量: 10
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-08 09:38
文章分类

全部博文(10)

文章存档

2012年(10)

我的朋友

分类: WINDOWS

2012-08-08 10:07:39

20120808
书 P.463 对应 pdf P.489 。
  分析网络包 --> 需要它的网络数据 --> 而我们有的是 NDIS_PACKET结构(网络包的描述符结构) --> 需要得到网络包的实际内容 --> 参考 AnalysisPacket
--> AnalysisPacket共有6处被调用 : MPSend、MPSendPackets、MPTransferData、PtTransferDataComplete、PtReceive、PtReceivePacket 。
 
   把 AnalysisPacket 放在任何有 PNDIS_PACHET 参数的地方,对网络报数据进行分析 --> 过滤的结果不外乎3种 : 放过、拒绝、修改 。
   1)、拒绝一个包 。
      A)、MPSend :
  1. return NDIS_STATUS_FAILURE; // 丢弃之
      B)、MPSendPackets :

点击(此处)折叠或打开

  1. // 在这个函数中,任何一个被放弃的包,都必须调用NdisMSendComplete。
  2.             NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
  3.                 Packet,
  4.                 NDIS_STATUS_FAILURE);
      C)、MPTransferData :

点击(此处)折叠或打开

  1. Status = NDIS_STATUS_FAILURE; // 丢弃之
      D)、PtTransferDataComplete :

点击(此处)折叠或打开

  1. Status = NDIS_STATUS_FAILURE;// 丢弃之
      E)、PtReceive :

点击(此处)折叠或打开

  1. Status = NDIS_STATUS_FAILURE;// 丢弃之
      F)、PtReceivePacket :

点击(此处)折叠或打开

  1. return 0;// 丢弃之
      其中,返回的值有不同(要注意) ,但是效果呢?PtReceivePacket 中也返回 NDIS_STATUS_FAILURE 会咋样?

点击(此处)折叠或打开

  1. #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)  // NDIS.h

点击(此处)折叠或打开

  1. #define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)  // ntstatus.h
  2. // 2.3.1 NTSTATUS values - MSDN - Microsoft ()
 
   2)、修改数据包 --> 包括两个方面 ①转发 和 ②加/解密 。
   其中说到 转发 的原理比较简单 ,A)、发送过程中进行转发 -->更改包头中的目标地址 --> 直接调用 NdisSend发送即可 ;B)、接收过程中转发 --> 一边要完成原始的包,一边要转发新建的包 。
   zc 问题 : 应该还是要重新计算 checksum 的吧??? 
 
>>
阅读(1214) | 评论(0) | 转发(0) |
0

上一篇:寒江独钓

下一篇:Windows驱动开发技术详解

给主人留下些什么吧!~~