阅读:3364回复:18
关于防火墙过滤IP的问题。
各位高手:
现在有一开发工作要实现:防火墙过滤IP的功能, 翻看了很多文章和BBS上的论题,还是满头雾水,只是对WDM驱动 开发的大概流程了解了一些。 已经一个多月了,痛苦万分! 刚装上了DRIVER STDIO,用它的自动生成工具生成了个TEST驱动,编译被告知错误,不知如何是好。 客户端的程序倒是可以成功编译(VC6。0),事实在在的知道了驱动开发的复杂性,不是写过些通讯系统的我能轻易拿的下来的。 只希望各位高手帮帮手,给个最简单的过滤IP的实现原代码看看。 让我还能有些希望继续努力! 再次谢谢各位高手的帮助! saki |
|
最新喜欢:raphye...
|
沙发#
发布于:2001-09-21 13:22
希望大家多回帖,那怕只有一小段代码也好啊。
|
|
|
板凳#
发布于:2001-09-21 17:15
如果仅仅是过滤ip,用im倒是听简单的,不过有个缺点,nt,2000下的立志不能自动安装。
|
|
地板#
发布于:2001-09-24 09:24
多谢zjb的回复!!!!
IM的技术实现具体是怎样的? 希望多多指教。 如果可以的话,能否拿出些代码具体指导一下? 实在是很感谢,因为心里很着急,希望不会被炒了,如果还没有进展的话。。。 再次感谢! |
|
|
地下室#
发布于:2001-09-25 09:47
请大家热烈发言啊 !!
每天刷新几十遍,都没人回复! 实在是急! 只见有人问,不见人回复!! 斑竹!!!!!!!!!!!! 你到哪里去了????? 你出来说句话来。 在哪里~~~~~~~? |
|
|
5楼#
发布于:2001-09-25 09:55
你可以看一下DDK中的一个例子,passthru,这个IM(中间层)驱动,这对你有些帮助。作驱动不是一朝一夕就成的,也没什么速成,静下心,看程序,并自已添加一些功能。
|
|
6楼#
发布于:2001-09-25 10:19
多谢blue的回复!!!!!
(流着热泪,热烈握手!!!!) DDK中的一个例子,passthru,这个IM(中间层)驱动,是防火墙过滤IP的功能吗? 期待着你的回复! 另: 实在是很感谢你的指导! saki |
|
|
7楼#
发布于:2001-09-25 11:37
他们本身并不能过滤ip,但是你可以利用他们来实现你的要求
|
|
8楼#
发布于:2001-09-25 13:38
再次请问:是否是以下代码?
能简单介绍一下吗? ///////////////////////////////////////////////////////// /*++ Copyright (c) 1992 Microsoft Corporation Module Name: passthru.c Abstract: Ndis Intermediate Miniport driver sample. This is a passthru driver. Author: Environment: Revision History: --*/ #include "precomp.h" #pragma hdrstop #pragma NDIS_INIT_FUNCTION(DriverEntry) NDIS_PHYSICAL_ADDRESS HighestAcceptableMax = NDIS_PHYSICAL_ADDRESS_CONST(-1, -1); NDIS_HANDLE ProtHandle = NULL; NDIS_HANDLE DriverHandle = NULL; NDIS_MEDIUM MediumArray[3] = { NdisMedium802_3, // Ethernet NdisMedium802_5, // Token-ring NdisMediumFddi // Fddi }; PADAPT pAdaptList=NULL; NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++ Routine Description: Arguments: Return Value: --*/ { NDIS_STATUS Status; NDIS_PROTOCOL_CHARACTERISTICS PChars; NDIS_MINIPORT_CHARACTERISTICS MChars; PNDIS_CONFIGURATION_PARAMETER Param; NDIS_STRING Name; NDIS_HANDLE WrapperHandle; // // Register the miniport with NDIS. Note that it is the miniport // which was started as a driver and not the protocol. Also the miniport // must be registered prior to the protocol since the protocol's BindAdapter // handler can be initiated anytime and when it is, it must be ready to // start driver instances. // NdisMInitializeWrapper(&WrapperHandle, DriverObject, RegistryPath, NULL); NdisZeroMemory(&MChars, sizeof(NDIS_MINIPORT_CHARACTERISTICS)); MChars.MajorNdisVersion = 4; MChars.MinorNdisVersion = 0; MChars.InitializeHandler = MPInitialize; MChars.QueryInformationHandler = MPQueryInformation; MChars.SetInformationHandler = MPSetInformation; MChars.ResetHandler = MPReset; MChars.TransferDataHandler = MPTransferData; MChars.HaltHandler = MPHalt; // // We will disable the check for hang timeout so we do not // need a check for hang handler! // MChars.CheckForHangHandler = NULL; MChars.SendHandler = MPSend; MChars.ReturnPacketHandler = MPReturnPacket; // // Either the Send or the SendPackets handler should be specified. // If SendPackets handler is specified, SendHandler is ignored // // MChars.SendPacketsHandler = MPSendPackets; Status = NdisIMRegisterLayeredMiniport(WrapperHandle, &MChars, sizeof(MChars), &DriverHandle); ASSERT(Status == NDIS_STATUS_SUCCESS); NdisMRegisterUnloadHandler(WrapperHandle, PtUnload); // // Now register the protocol. // NdisZeroMemory(&PChars, sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); PChars.MajorNdisVersion = 4; PChars.MinorNdisVersion = 0; // // Make sure the protocol-name matches the service-name under which this protocol is installed. // This is needed to ensure that NDIS can correctly determine the binding and call us to bind // to miniports below. // NdisInitUnicodeString(&Name, L"SFilter"); // Protocol name PChars.Name = Name; PChars.OpenAdapterCompleteHandler = PtOpenAdapterComplete; PChars.CloseAdapterCompleteHandler = PtCloseAdapterComplete; PChars.SendCompleteHandler = PtSendComplete; PChars.TransferDataCompleteHandler = PtTransferDataComplete; PChars.ResetCompleteHandler = PtResetComplete; PChars.RequestCompleteHandler = PtRequestComplete; PChars.ReceiveHandler = PtReceive; PChars.ReceiveCompleteHandler = PtReceiveComplete; PChars.StatusHandler = PtStatus; PChars.StatusCompleteHandler = PtStatusComplete; PChars.BindAdapterHandler = PtBindAdapter; PChars.UnbindAdapterHandler = PtUnbindAdapter; PChars.UnloadHandler = NULL; PChars.ReceivePacketHandler = PtReceivePacket; PChars.PnPEventHandler= PtPNPHandler; NdisRegisterProtocol(&Status, &ProtHandle, &PChars, sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); ASSERT(Status == NDIS_STATUS_SUCCESS); NdisIMAssociateMiniport(DriverHandle, ProtHandle); return(Status); } |
|
|
9楼#
发布于:2001-09-25 23:22
有人在这么热烈的呼唤斑竹,似乎我只好跳出来说点什么了。
我还没有见过你这么夸张的人,我建议还是先好好看看ddk 吧。否则对你对我都没有什么好处。我不喜欢重复一些废话。 大家都是成年人,我不喜欢瞪着一双毫不可爱的大眼睛, 说“这个我什么也不懂,什么是ddk啊?”,我也不喜欢别 的成年人这样对我,ppmm除外。 有刷新十几遍的时间,还不如好好学习学习c语言或者别的, 就是看电视,也要有帮助的多啊。 |
|
|
10楼#
发布于:2001-09-26 09:02
翻看了你以前的答贴,理解上好了很多。
实际上,发现你还是很乐于帮助后进的。 有没有这类的原代码,简单点没有关系,希望能放上来,供大家一起来学习参考一下。(我假公济私了。。呵呵 (: ) 觉的IP的动能对NDIS而言,是很多人都会遇到的问题,希望斑竹多多指教。 |
|
|
11楼#
发布于:2001-09-26 09:56
passthru,imd就是最好的源代码,你看懂以后,你的问题就不是问题了
|
|
12楼#
发布于:2001-09-26 15:37
再次请问大峡!
上面我贴的代码,是否就是passthru的实现驱动程序? |
|
|
13楼#
发布于:2001-09-26 16:54
看明白了一些。
passthru 包含目录中的五份程序文件。 其中miniport.c 是针对下层驱动的,就是发包的程序。 MPSEND 就是关于发包的函数。 passthru.c程序文件是passthru驱动的总文件。 同理,如果我要写过滤IP的程序,应该在 PtReceive 函数中进行改造,对符合要求的IP包过滤掉。 粗浅的理解,望各位高手多指导,是否理解有误? 如果是在PtReceive函数中进行改造,具体应该如何入手呢? |
|
|
14楼#
发布于:2001-09-27 13:41
请高手指教。
|
|
|
15楼#
发布于:2001-09-27 14:41
IM作用有3:
1.To translate between different network media For example, the function of an intermediate driver layered between Ethernet and Token Ring transports and an ATM miniport is to map Ethernet and Token Ring packets to ATM packets and vice versa. 2.To filter packets A packet scheduler is an example of an intermediate driver used as a filter driver. A packet scheduler reads priority information in each send packet passed down by a transport for transmission and each receive packet indicated up by a miniport. The packet scheduler then schedules each packet for transmission or reception based on its priority. 3.To balance packet transmission across more than one NIC A load balancing driver exposes one virtual adapter to overlying transport protocols but distributes send packets across more than one NIC. |
|
16楼#
发布于:2001-09-27 17:17
老大,这不是DDK中的话吗?
我刚看过,又看到你的..... 这不是我要问的问题,与本主题也没有太大关系。 |
|
|
17楼#
发布于:2001-09-29 08:49
用imd实现包过滤需要讨论这么多吗,需要吗?不需要吗?需要吗?不需要吗?大家研究研究!呵呵
|
|
18楼#
发布于:2001-09-29 15:03
[QUOTE]原本由 saki 发表
[B]各位高手: 现在有一开发工作要实现:防火墙过滤IP的功能, 翻看了很多文章和BBS上的论题,还是满头雾水,只是对WDM驱动 开发的大概流程了解了一些。 已经一个多月了,痛苦万分! 刚装上了DRIVER STDIO,用它的自动生成工具生成了个TEST驱动,编译被告知错误,不知如何是好。 客户端的程序倒是可以成功编译(VC6。0),事实在在的知道了驱动开发的复杂性,不是写过些通讯系统的我能轻易拿的下来的。 只希望各位高手帮帮手,给个最简单的过滤IP的实现原代码看看。 让我还能有些希望继续努力! 再次谢谢各位高手的帮助! saki [/B][/QUOTE] 在应用DriverStudio之前,应先对其库做编译工作,不和你碰到的是什么问题? 关于编译方法,其手册中有描述。 Matt Wu |
|
|