5.3 系统主要功能介绍 从5.2中可以看出如何截获数据包和如何对数据包进行分析是此系统的核心成分下面对这2个部分进行介绍: paper51.com (1)截获数据包 http://www.paper51.com
在进行监听之前要先加载sock,如果没连接网上就会显示加载失败,不能进行监听。 http://www.paper51.com 这里需要说明的是加载sock,建立原始套节字,设置套节字选项和把网卡置于混杂模式获取IO操作的相关信息是引用的固定代码。具体流程如图5-2所示。 内容来自www.paper51.com (2)IP数据包分析 copyright paper51.com 先将截获到的数据包转为IP头结构,然后得到包中的协议,在对协议分析,得到源地址和目的地址,得到TTL,得到头长度,然后对其分析,判断出是TCP数据包,UDP数据包还是ICMP数据包,然后把判断的结果显示出来。 内容来自论文无忧网 www.paper51.com
分解这环节甚为重要。TCP,UDP和ICMP每个的首部格式都不一样,不加以 区分会很浑浊。也会使使用者对所截获的数据包认识不深。此工具一个主要目的就是使截获的结果明朗化。 内容来自www.paper51.com 下面是IP包分解流程图。如图5-3所示:注意是在接受到数据包以后开始分析 copyright paper51.com 为了让流程图直观些我把原本在得到包中协议就可以分出TCP,UDP和ICMP的部分放在了流程的末尾。 内容来自论文无忧网 www.paper51.com 需要指出在将协议int转字符串存m_szProtocol的这部分,有一个存放数组的函数叫ProtoMap。具体如表5-1所示。 copyright paper51.com
内容来自www.paper51.com
表5-1存放协议数组 http://www.paper51.com 0 内容来自论文无忧网 www.paper51.com TCP paper51.com
1 copyright paper51.com UDP paper51.com 2 copyright paper51.com ICMP http://www.paper51.com … paper51.com
… 内容来自www.paper51.com
内容来自论文无忧网 www.paper51.com
http://www.paper51.com
假如现在接受到一个协议用CheckProtocol转化为字符串以后,然后在利用其算法在ProtoMap数组中找到与之相对应的协议,然后输出。其具体算法如图5-4所示。 paper51.com
内容来自www.paper51.com
http://www.paper51.com paper51.com 下面列出主要功能实现所用到的类和方法:如表5-2所示: http://www.paper51.com 表5-2 主要功能用到的类与方法 内容来自论文无忧网 www.paper51.com
功能 http://www.paper51.com 用到的类与方法 paper51.com 接受IP包 内容来自论文无忧网 www.paper51.com
RecvIpPro 内容来自www.paper51.com 加载SOCK http://www.paper51.com CListenDlg::InitSock paper51.com 建立原始套接字 copyright paper51.com
CListenDlg::CreateSock paper51.com 分解IP包 paper51.com CListenDlg::SplitIpPack 内容来自论文无忧网 www.paper51.com 将协议int转为字符串 copyright paper51.com CListenDlg::CheckProtocol 内容来自www.paper51.com 5.4 实例分析 copyright paper51.com 图5-5是此工具的主页面以及在某一时刻截获的数据包: 内容来自论文无忧网 www.paper51.com 图 5-5 某一时刻截获的数据包 paper51.com
所截获的是TCP数据包,它显示的是由202.108.42.190端口号是80向本机192.168.0.13端口号是3170所截获的并对其首部信息做了分析: 内容来自论文无忧网 www.paper51.com 前面的000000 000010 000020是标号。其中45 0000 28 71 E2 40 00 30 06 23 0ECA 6C 2A BEC0 A8 00 0D显示的是IP数据包的首部。可以对照表5-7进行分析,版本号4,以后依次类推。需要指出的是它的目的地址和源地址是先地位再高位,那么次IP数据包的源地址为BE 2A6C CA,目的地址为0D 00 A8C0。 内容来自www.paper51.com
后面显示的就是所需要的TCP数据包首部内容,对照表5-8进行分析:00 50为16为源端口,0C 62为16为目的端口,17 2C4C 35为32位序列号,14 B938 0F为32位确认号,50 11为4位首部长度+6位保留字+6位标志位总共为16为,后面的FF FF3D 18 00 00分别为16位校验和 ,16位紧急数据偏移量。 copyright paper51.com UDP和ICMP都一样都是先接到IP数据包首部的内容,然后分解出相应的协议首部。 http://www.paper51.com 5.5 数据包首部解析 内容来自论文无忧网 www.paper51.com 表5-3 IP数据包首部解析表 copyright paper51.com
unsigned char h_lenver http://www.paper51.com 4位首部长度+4位IP版本号 内容来自论文无忧网 www.paper51.com
unsigned char tos paper51.com 8位服务类型TOS copyright paper51.com unsigned short total_len 内容来自www.paper51.com
16位总长度(字节) paper51.com unsigned short ident paper51.com
16位标识 http://www.paper51.com
unsigned short frag_and_flags 内容来自论文无忧网 www.paper51.com
3位标志位 内容来自www.paper51.com unsigned char ttl copyright paper51.com 8位生存时间 TTL 内容来自论文无忧网 www.paper51.com unsigned char proto paper51.com 8位协议 (TCP, UDP 或其他) 内容来自www.paper51.com unsigned short checksum paper51.com 16位IP首部校验和 http://www.paper51.com unsigned int sourceIP 内容来自www.paper51.com
32位源IP地址 paper51.com unsigned int destIP http://www.paper51.com
32位目的IP地址 copyright paper51.com 表5-4 TCP数据包首部解析表 paper51.com USHORT th_sport 内容来自www.paper51.com 16位源端口 paper51.com
USHORT th_dport http://www.paper51.com
16位目的端口 http://www.paper51.com
unsigned int th_seq paper51.com 32位序列号 copyright paper51.com unsigned int th_ack paper51.com
32位确认号 http://www.paper51.com unsigned char th_lenres paper51.com
4位首部长度/6位保留字 内容来自www.paper51.com unsigned char th_flag http://www.paper51.com
6位标志位 copyright paper51.com USHORT th_win http://www.paper51.com 16位窗口大小 内容来自www.paper51.com USHORT th_sum paper51.com
16位校验和 copyright paper51.com USHORT th_urp 内容来自论文无忧网 www.paper51.com 16位紧急数据偏移量 http://www.paper51.com
paper51.com
copyright paper51.com
|