阅读:1263回复:2
问一个关于网络IP包分析的问题
我现在在做一个NDIS驱动,需要在驱动中实现诸如禁止FTP,禁止DHCP等等的服务,可我不知道如何分析数据包,请问从哪里可以当这些基于NDIS驱动程序的对数据包分析的源代码?
谢谢! |
|
沙发#
发布于:2004-07-08 11:28
看相关协议,再分析包,很简单的,只要你看了!~
|
|
板凳#
发布于:2004-07-08 14:17
我斗胆来回答一下,如果说错了,请不要骂我,我也是新手,我们先来看看各种包头:
typedef struct _tcphdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 unsigned int th_seq; //32位序列号 unsigned int th_ack; //32位确认号 unsigned char th_lenres; //4位首部长度/6位保留字 unsigned char th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER; typedef struct _udphdr //定义UDP首部 { unsigned short uh_sport; //16位源端口 unsigned short uh_dport; //16位目的端口 unsigned short uh_len; //16位长度 unsigned short uh_sum; //16位校验和 }UDP_HEADER; 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; ========================================================== 好了,现在来说说,截获的包假如就是以太包,那么包的头14个字节就是以太头,6位目标MAC+6位源MAC+2位协议码,协议码表示是IP或是ARP 紧接在14字节后面的是IP头,IP头后面的是TCP或UDP头,如果写过原始套接字的话,就知道构建一个套接字包时,先memcpy(IP头),然后memcpy(UDP头),然后memcpy(发送的数据) 好了,请高手指点 :) |
|