babizhu
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2003-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1391回复:5

编译无法通过啊,我实在是很菜

楼主#
更多 发布于:2002-02-05 15:21
一个以太网的包结构我比较清楚,如果我能得到这个包,我可以得到源ip,可我不知道KNdisPacket和以太网的包的关系在那里,而且我不大会用softice,555555,请大虾继续执教
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-02-05 17:27
你可以参考如下代码:

NdisQueryPacket(Packet,NULL,&NdisBufferCount,&CurrentBuffer,
NULL);
if(NdisBufferCount)
{
//只考虑第一个buffer的情况。
NdisQueryBuffer(CurrentBuffer, &VirtualAddress, &CurrentLength);
//VirtualAddress+14既指向ip包的指针。
}
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-02-05 17:38
你可以参考如下代码:

NdisQueryPacket(Packet,NULL,&NdisBufferCount,&CurrentBuffer,
NULL);
if(NdisBufferCount)
{
//只考虑第一个buffer的情况。
NdisQueryBuffer(CurrentBuffer, &VirtualAddress, &CurrentLength);
//VirtualAddress+14既指向ip包的指针。
}
 

  PIPHEADER什么的你看了linux里面的ipheader的定义吧!不给你贴了。
  if(*((unsigned short)(VirtualAddress+12)==0x0800)
   {
    pipheader=(PIPHEADER)(VirtualAddress+14);
    if(pipheader->saddr=xxxx)
     {
     }
   }
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
babizhu
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2003-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-02-06 12:09
这句话编译硬是if(*((unsigned char)(VirtualAddress+17))==1) 无法通过,我是在DS中作的,原码如下

NDIS_STATUS MyNdisAdapter::OnReceive
(const KNdisPacket& Original, KNdisPacket& Repackaged)
{
KNdisBuffer buf;
buf=Original.QueryFirstBuffer();
ASSERT (buf.IsValid());

PVOID VirtualAddress;
PUINT Length;
Length=(unsigned int *)buf.Length();

buf.Query(Length,&VirtualAddress);

if(*((unsigned char)(VirtualAddress+17))==1)

{
Repackaged.CloneUp(Original);
}


return NDIS_STATUS_SUCCESS;
}



 

zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-02-06 13:00
这句话编译硬是if(*((unsigned char)(VirtualAddress+17))==1) 无法通过,我是在DS中作的,原码如下

NDIS_STATUS MyNdisAdapter::OnReceive
(const KNdisPacket& Original, KNdisPacket& Repackaged)
{
KNdisBuffer buf;
buf=Original.QueryFirstBuffer();
ASSERT (buf.IsValid());

PVOID VirtualAddress;
PUINT Length;
Length=(unsigned int *)buf.Length();

buf.Query(Length,&VirtualAddress);

if(*((unsigned char)(VirtualAddress+17))==1)

{
Repackaged.CloneUp(Original);
}


return NDIS_STATUS_SUCCESS;
}



 

 

应该是if(*((unsigned char*)(VirtualAddress+17))==1)吧
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-02-06 20:56
PIPHEADER什么的你看了linux里面的ipheader的定义吧!不给你贴了。
  if(*((unsigned short)(VirtualAddress+12)==0x0800)
   {
    pipheader=(PIPHEADER)(VirtualAddress+14);
    if(pipheader->saddr=xxxx)
     {
     }
   }

不好意思,我的笔误。
(*((unsigned short*)(VirtualAddress+12))==0x0800)
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
游客

返回顶部