beckzp
驱动牛犊
驱动牛犊
  • 注册日期2004-07-02
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1263回复:2

问一个关于网络IP包分析的问题

楼主#
更多 发布于:2004-07-07 16:54
我现在在做一个NDIS驱动,需要在驱动中实现诸如禁止FTP,禁止DHCP等等的服务,可我不知道如何分析数据包,请问从哪里可以当这些基于NDIS驱动程序的对数据包分析的源代码?

谢谢!
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-08 11:28
看相关协议,再分析包,很简单的,只要你看了!~
jzyhummel
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2007-07-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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(发送的数据)

好了,请高手指点 :)
游客

返回顶部