nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1512回复:8

怎样处理数据包再放到ip层?(20分已放送)

楼主#
更多 发布于:2004-04-01 14:04
    我需要写一个驱动,把UDP,TCP的数据进行一些处理再送给ip层,windows下面好像有一个tcpip.sys实现了\Device\Rawip,\Device\UDP,\Device\Tcp,\DeviceIp,\Device\Multicast。我是把自己的驱动IoAttachToDeviceStack到\Device\Ip吗?我在网上和DDK里看到packet filter driver只有有限的几种:ndis intermediate driver(介于protocol driver和NIC driver之间);ndis hook;TDI driver(位于tcp udp上面);winsock hook。
    我看最适合我的是TDI,可是我能够挂到\Device\Ip吗,然后我对传下来的数据包进行加头和去头该怎么处理呢,我是只有那些函数可以调用,谢谢

[编辑 -  4/7/04 by  nicklezhang]
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-01 14:16
标准的TDI功能,这样的例子很多呀。
// DD_TCP_DEVICE_NAME : 系统设备名称,我们将挂接自己设备到这个设备之上
// TDIH_TCP_DEVICE_NAME : 自己的设备名称

RtlInitUnicodeString( &uniNtNameString, DD_TCP_DEVICE_NAME );

status = IoGetDeviceObjectPointer(
               IN &uniNtNameString,
               IN FILE_READ_ATTRIBUTES,
               OUT &pTargetFileObject,  
               OUT &pTargetDeviceObject
               );
RtlInitUnicodeString( &uniNtNameString, TDIH_TCP_DEVICE_NAME );

status = IoCreateDevice(
               IN DriverObject,
               IN sizeof( TDIH_DeviceExtension ),
               IN &uniNtNameString,
               IN pTargetDeviceObject->DeviceType,
               IN pTargetDeviceObject->Characteristics,
               IN FALSE,                
               OUT &pFilterDeviceObject
               );
nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-04-01 17:33
问题是能attach到TCP或者UDP上,能attatch到IP上吗,没见到啊
start
驱动小牛
驱动小牛
  • 注册日期2001-11-05
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-01 17:44
我也关注,做什么项目,非要attach ip
second
nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-04-02 08:57
TDI驱动(attach到tcp udp的例子很多,ddk里就有)和ndis intermediate driver的例子很多,而且ddk里还有详细的文档说明,可是我要在ip层之前截获,ddk里面没有相关的文档,一是有点无从下手。
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-02 09:09
ip层之前呀,那就IMD 了。
nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-04-02 11:40
我的理解是IMD位于protocol driver和miniport driver之间,tdi位于udp/tcp之上,接受tdi client的数据。我需要截获发往ip层的数据,可是ddk上没有这方面的说法,firewall hook?
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-02 12:45

IMD把IP头去了,不就是发到IP layer的数据包吗。
nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-04-02 13:53
我要做的是:在发往ip层的数据包前复制tcp/udp并再加到数据包上,修改一些内容。你说的IMD来实现,那看看ip包是最方便的,或者可以写一个ip filter hook(windows2000 or later)更方便。感谢asmsys的回答

ddk文档里没找到在ip层之前截获数据包,所以还是决定用imd实现,其实也多不了多少代码:复制增加tcp/udp头之后再修改ip header中的相应字节。开始编码喽,感谢各位的帮助,放分。


[编辑 -  4/7/04 by  nicklezhang]
游客

返回顶部