阅读:1573回复:6
请教怎样才能把封包过滤?
用DriverStudio编写中间层包过滤驱动程序。
现在在OnSend中能看到,包的信息如ip类型等。但是不知怎样才能把 不要的包过滤。简单一点如所有的包都被过滤。 请指教。 |
|
沙发#
发布于:2003-05-09 16:18
用DriverStudio编写中间层包过滤驱动程序。 不要的包将它丢掉吧! 在让函数返回 return NDIS_STATUS_NOT_ACCEPTED 就可以了 (我没用过DriverStudio,在passthru的MPSendOnePacket()里可以这么做) |
|
|
板凳#
发布于:2003-05-09 16:52
这样试了, 最后返回 NDIS_STATUS_NOT_ACCEPTED。用ping进行测试还是能ping通其他机器。
|
|
地板#
发布于:2003-05-09 17:31
ping 发送 ICMP包 你看看有没拦截
|
|
|
地下室#
发布于:2003-05-09 17:33
这样试了, 最后返回 NDIS_STATUS_NOT_ACCEPTED。用ping进行测试还是能ping通其他机器。 要拦载ICMP的。 应该行的,在我的程序里就可以,你试着把所有的包都丢,看看还行不行。 |
|
|
5楼#
发布于:2003-05-09 17:40
ping 发送 ICMP包 你看看有没拦截 你可以在程序里这么判断是否不ICMP包 if(p_ip->H_frame_type == 8 && p_ip->L_frame_type == 0 && p_ip->proto == 1) 满足这一条件为ICMP包. 其中p_ip为P_IP_PACKET typedef struct _IP_PACKET { // Ethernet unsigned char targ_hw_addr[6]; // 目的地址,6字节。 unsigned char src_hw_addr[6]; // 源地址,6字节。 unsigned char H_frame_type; unsigned char L_frame_type; // IP unsigned char h_verlen; //4位首部长度,4位IP版本号 unsigned char tos; //8位服务类型TOS unsigned short total_len; //16位总长度(字节) unsigned short ident; //16位标识 unsigned short frag_and_flags; //3位标志位和13位偏移 unsigned char ttl; //8位生存时间 TTL unsigned char proto; //8位协议 (1->ICMP, 2->IGMP, 6->TCP, 17->UDP) unsigned short checksum; //16位IP首部校验和 unsigned int sourceIP; //32位源IP地址 unsigned int destIP; //32位目的IP地址 }IP_PACKET, *P_IP_PACKET; 这是我程序里定义的ip包头结构, 我也是参考别人的代码,给你作为参考吧! |
|
|
6楼#
发布于:2003-05-09 20:02
用户被禁言,该主题自动屏蔽! |
|