阅读:1816回复:7
哪有IP数据包过滤程序的示例代码
我需要IP包过滤程序的源代码,越简单的越好,最好是一个C文件的,不需要GUI,只要能过滤IP包就行了
|
|
最新喜欢:happyb... |
沙发#
发布于:2003-07-28 12:23
please refer DDK: PacketFilterExtensionPtr
|
|
板凳#
发布于:2003-07-29 17:23
我不太懂驱动程序开发,想要一个简单包过滤程序的完整的C文件代码,这样我就只要修改包过滤规则那部分了
|
|
地板#
发布于:2003-07-30 23:02
世界上那有这么好的事,完整源代码很费心血的,你说要就要了,
实在想要的话。。。。。。。。。 去翻gjpland和fracker的旧帖子吧 |
|
|
地下室#
发布于:2003-07-31 01:26
谢谢啊!那我去找找看
我觉得这种程序是有通用性的,因为我并不关心驱动程序的问题,只是关心IP包过滤部分的代码。如果没有范例代码的话,实际上也是开发者的重复劳动了 |
|
5楼#
发布于:2003-08-01 08:11
部分代码:
: //--------------------------------------------------------- int PacketSize; PUCHAR pPacketContent; PUCHAR pBuf; UINT BufLength; MDL * pNext; UINT i; //把数据包内容从Packet拷贝到pPacketContent NdisQueryPacket( Packet,NULL,NULL,NULL,&PacketSize); Status= NdisAllocateMemory( &pPacketContent, 2000, 0,HighestAcceptableMax); if (Status!=NDIS_STATUS_SUCCESS ) return Status; NdisZeroMemory (pPacketContent, 2000); NdisQueryBufferSafe(Packet->Private.Head, &pBuf, &BufLength, 32 ); NdisMoveMemory(pPacketContent, pBuf, BufLength); i = BufLength; pNext = Packet->Private.Head; for(;;) { if(pNext == Packet->Private.Tail) break; pNext = pNext->Next; //指针后移 if(pNext == NULL) break; NdisQueryBufferSafe(pNext,&pBuf,&BufLength,32); NdisMoveMemory(pPacketContent+i,pBuf,BufLength); i+=BufLength; } //数据拷贝完毕 //--------------------------------------------------------- |
|
|
6楼#
发布于:2003-08-01 08:12
。
//--------------------------------------------------------- //规则标志位(1表示过滤,0表示放行,你可以通过改这个数值来配置规则) UINT ICMP = 1; //ICMP数据报规则 UINT IGMP = 0; //IGMP数据报规则 UINT TCP = 0; //TCP数据报规则 UINT UDP = 0; //UDP数据报规则 //规则判断 if (ICMP == 1) { if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 1) { DbgPrint(\"ICMP被拦截!\\n\"); NdisFreeMemory(pPacketContent, 2000, 0); return NDIS_STATUS_NOT_ACCEPTED; } } if (IGMP == 1) { if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 2) { DbgPrint(\"IGMP被拦截!\\n\"); NdisFreeMemory(pPacketContent, 2000, 0); return NDIS_STATUS_NOT_ACCEPTED; } } if (TCP == 1) { if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 6) { DbgPrint(\"TCP被拦截!\\n\"); NdisFreeMemory(pPacketContent, 2000, 0); return NDIS_STATUS_NOT_ACCEPTED; } } if (UDP == 1) { if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 17) { DbgPrint(\"UDP被拦截!\\n\"); NdisFreeMemory(pPacketContent, 2000, 0); return NDIS_STATUS_NOT_ACCEPTED; } } //规则判断结束 //--------------------------------------------------------- |
|
|
7楼#
发布于:2003-08-01 08:18
上面的代码是当在ptreceive中NDISGETRECEIVEPACKET!=NULL
还有ptreceivepacket中的处理。 当ptreceive中NDISGETRECEIVEPACKET为NULL空时:又分两种情况 1。要transferdata,把剩余数据传上来在分析。 2。不要transferdata, 如果只要过滤特定协议的话,剩余的数据不传上来也可以。 只要把HEADERBUFFER和lookaheadbuffer中的内容组合起来就可以了 上面的代码是ZT,并且也有点垃圾。呵呵 |
|
|