阅读:1512回复:8
怎样处理数据包再放到ip层?(20分已放送)
我需要写一个驱动,把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] |
|
沙发#
发布于: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 ); |
|
板凳#
发布于:2004-04-01 17:33
问题是能attach到TCP或者UDP上,能attatch到IP上吗,没见到啊
|
|
地板#
发布于:2004-04-01 17:44
我也关注,做什么项目,非要attach ip
|
|
|
地下室#
发布于:2004-04-02 08:57
TDI驱动(attach到tcp udp的例子很多,ddk里就有)和ndis intermediate driver的例子很多,而且ddk里还有详细的文档说明,可是我要在ip层之前截获,ddk里面没有相关的文档,一是有点无从下手。
|
|
5楼#
发布于:2004-04-02 09:09
ip层之前呀,那就IMD 了。
|
|
6楼#
发布于:2004-04-02 11:40
我的理解是IMD位于protocol driver和miniport driver之间,tdi位于udp/tcp之上,接受tdi client的数据。我需要截获发往ip层的数据,可是ddk上没有这方面的说法,firewall hook?
|
|
7楼#
发布于:2004-04-02 12:45
靠
IMD把IP头去了,不就是发到IP layer的数据包吗。 |
|
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] |
|