hyphon
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2004-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1506回复:6

取得网卡的带有IP头的数据

楼主#
更多 发布于:2003-06-06 16:41
怎样取得网卡的带有IP头的数据?我需要在WindowsXP下得到。得到后进行判断IP地址,然后根据地址进行转发(相当于做代理服务器)。有哪位大侠指教,不胜感激。给分。

最新喜欢:

baoyibao99baoyib...
LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-09 10:25
把问题描述的详细点.
laolu2003
驱动牛犊
驱动牛犊
  • 注册日期2003-04-26
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-15 05:55
根据你的描述我猜想:你和我的需求相似,前一段时间,我花钱求购了一个可以自由修改封包内容的框架源代码,由自己写函数去组装封包并转发(当然可以改写IP),当然,为了对人家劳动的保护,代码是不能给的。但我建议你从Passthru的例子入手,实现你的目的不是很遥远!
dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-15 12:03
你只要从Packet里面得到ip头就好了。先用NdisGetFirstBufferFromPacket/NdisGetNextBuffer从Packet里面得到NDIS_BUFFER指针。然后再用NdisQueryBuffer从buffer里面得到实际的包的数据。以太网的数据包格式是:

EthernetHeader+IPHeader+xxx

EthernetHeader为14字节,IPheader长度不定,一般20字节
xxx根据ip头部信息决定相应结构

[编辑 -  6/15/03 by  dshadow79]
davidwong
驱动牛犊
驱动牛犊
  • 注册日期2003-06-12
  • 最后登录2010-02-22
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望26点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-16 15:55
call NdisGetFirstBufferFromPacketSafe instead of NdisGetFirstBufferFromPacket
[img]http://www.danasoft.com/vipersig.jpg[/img] [img]http://www.cmecl.net/gif/4.gif[/img][img]http://www.cmecl.net/gif/4.gif[/img][img]http://www.cmecl.net/gif/4.gif[/img]
dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-16 17:38
why? safe只是在出错的时候产生个bugcheck,反正如果失败的话访问内存也会出错,也会bugcheck,有没有safe无所谓的
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-30 13:51
取得IP数据有以下几种可能(前提是你 收到的是TCP/IP包):
1。在ptreceive中当NDIGETPACKET==NULL时,并且packetsize<=
lookaheadbuffersize时,所有的数据那么你要的IP数据就在
lookaheadbuffer中
2。ptreceive中,当NDIGETPACKET==NULL时,但packetsize>lookaheadbuffersize时,那么你要先tranferdata
然后把lookaheadbuffer中的内容和transferdata的内容组合起来
就是你要IP数据了
3。ptreceive中当NDISGETPACKET!=NULL,这种情况是因为系统
内存不足,这是得到的packet实际数据没上来,如果要修改数据
我想可能还有自己copydata。
4,ptreceivepacket中,这个数据是底层copy上来的,可以直接修改。
第3中情况可能不对,我也不太确定。
具体的数据在packet中位置是:
packet->private.head的buffer描述符链表的systemva(这个拼写有误),具体记得不是很清楚。你自己看看就可以了
放弃瘟草,现吃李草
游客

返回顶部