jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2309回复:18

请问在passthru怎么样得到ip地址

楼主#
更多 发布于:2004-01-10 14:36
我是一个新手,我想知道怎么样在ptreceive函数中得到原ip地址,以及ip报头的格式,及ip报头的效验和算法
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-10 16:56
最好能有原代码
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-10 22:07
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
if(Packet != NULL)
{
NdisQueryPacket(Packet, NULL, NULL,NULL, &CurRecvPktLen);
   BytesCopied=CopyPacketToBuffer(
CurRecvBuffer,  
Packet,  
0,  
MAC_HEADER_LEN +IP_HEADER_LEN+4
);  
}
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-10 22:09
关于IP报头的校验和算法,改天再给你吧!
或者你可以参考一下关于TCP/IP协议的书,上面有详细的计算方法的,你自己都可以写出来哈
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-11 10:43
bobo_lei老兄:
可不可以解释一下你的代码,尤其是参数的数据类型定义,以及ip地址和mac地址存放的具体位置
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
if(Packet != NULL)
{
NdisQueryPacket(Packet, NULL, NULL,NULL, &CurRecvPktLen);
BytesCopied=CopyPacketToBuffer(
CurRecvBuffer,
Packet,
0,
MAC_HEADER_LEN +IP_HEADER_LEN+4
);
}

jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-11 10:53
兄弟对ptreceive中的参数LookAheadBufferPointer用如下语句进行打印,发现
          int jyb_number;
jyb_number=LookAheadBufferSize;
DbgPrint(\" HeaderBufferPointer: %u\\n\", HeaderBuffer);
DbgPrint(\" LookAheadBufferPointer: %u\\n\", LookAheadBuffer);
DbgPrint(\" HeaderBufferSize: %u\\n\", HeaderBufferSize);
DbgPrint(\" LookAheadBufferSize: %u\\n\", LookAheadBufferSize);
while (jyb_number)
{
DbgPrint(\"%u\", ((unsigned char *)LookAheadBuffer)[LookAheadBufferSize-jyb_number]);
jyb_number--;
}
   发现ip报文的格式在某些情况下和书上写的一样,原ip地址位于第13个字节处即偏移12处(十进制),而在某些情况下会位于偏移14或15处(均为十进制),兄弟想知道这例外的情况有哪些,其报文格式是怎么样的!
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-11 12:45
IP地址位于Ip报文的固定位置,这个是肯定的!不容质疑!!
你可以用softice跟踪调试,就可以知道的更清楚的
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-11 12:59
上面那段代码参数说明如下:
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
PNDIS_PACKET Packet=NULL;
PUCHAR CurRecvBuffer=NULL;
unsigned int CurRecvPktLen;

jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-11 19:54
bobo_lei老兄是真的有不同,我拦截ip地址会出错
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-12 17:49
:)兄弟,你再抓包的时候先判断试不是TCP/IP的包,否则IP位置就不对了,比如还有IPX和其他协议的包(NDIS好像不认识的都写成DEFAULT)。
根据地的兄弟们,团结就是力量
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-12 20:43
呵呵,上面这位老兄说得对,要先判断是不是TCP/IP的包^_^
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-01-13 14:43
老兄我察看了是ip包,HeaderBuffer[12]=0x08,HeaderBuffer[13]=0x00,可ip头仍然不对,麻烦兄弟帮我看看
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-01-13 20:22
可以把你的代码发给我看看吗?
我的邮箱是bobo_lei@163.com
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-01-14 12:45
我就修改了这个函数
NDIS_STATUS
PtReceive(
IN  NDIS_HANDLE ProtocolBindingContext,
IN  NDIS_HANDLE MacReceiveContext,
IN  PVOID HeaderBuffer,
IN  UINT HeaderBufferSize,
IN  PVOID LookAheadBuffer,
IN  UINT LookAheadBufferSize,
IN  UINT PacketSize
)

{
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
PNDIS_PACKET MyPacket, Packet;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
//jyb++ begin
int jyb_number;//循环记数器
DbgPrint(\" HeaderBufferPointer: %u\\n\", HeaderBuffer);
DbgPrint(\" LookAheadBufferPointer: %u\\n\", LookAheadBuffer);
DbgPrint(\" HeaderBufferSize: %u\\n\", HeaderBufferSize);
DbgPrint(\" LookAheadBufferSize: %u\\n\", LookAheadBufferSize);
DbgPrint(\" HeaderBuffer[12,13]: %u %u\", ((unsigned char *)HeaderBuffer)[12],((unsigned char *)HeaderBuffer)[13]);
jyb_number=LookAheadBufferSize;
while (jyb_number)
{
DbgPrint(\" LookAheadBuffer: %u\\n\", ((unsigned char *)LookAheadBuffer)[LookAheadBufferSize-jyb_number]);
jyb_number--;
}
//jyb++ end
其它部分没有更改,仍然是微软的passthru示范代码
在上网时,发现就是标志为08,00是使用的ip协议的数据报,也会有ip地址不在偏移12处,不上网时,有时也有,不过大多数情况下会在偏移12处,以上标示了jyb++的为我加入的代码
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-01-15 14:12
bobo_lei老兄,帮我看看好吗?
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-01-16 00:05
PADAPT pAdapt =(PADAPT)ProtocolBindingContext;
PNDIS_PACKET Packet=NULL;
PUCHAR CurRecvBuffer=NULL;
unsigned int CurRecvPktLen;
PIP_HEADER SendIPHeader;  //IP头结构得指针

Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
if(Packet != NULL)
{
NdisQueryPacket(Packet, NULL, NULL,NULL, &CurRecvPktLen);
BytesCopied=CopyPacketToBuffer(
CurRecvBuffer,
Packet,
0,
CurRecvPktLen);
}

SendIPHeader = (PIP_HEADER)(CurRecvBuffer+MAC_HEADER_LEN);
if (SendIPHeader->protocol == IP_PROTOCOL)
{
    //这里加入对IP包处理得语句
}
else
{
   //非IP包,直接发送
}

看看这个代码吧,^_^,昨天没有上网哈


[编辑 -  1/16/04 by  bobo_lei]
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-01-16 00:06
楼上的兄弟,你没有对数据包的类型进行判断,所以可能出错啊
jybbyj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-01-16 11:31
我此时,没有对得到的数据包进行任何处理啊,只是看看包结构,看见包标示为0x8,0时,即ip包时,也有ip原地址不位于偏移12处啊
bobo_lei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2008-11-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望14点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-01-17 23:22
兄弟,动手实践一下吧!^_^
试试就知道啦!!!
游客

返回顶部