《网络系统》课程设计报告
学院专业
班级学号
学生姓名指导教师
课程成绩完成日期2013年6月28日
课程设计成绩评定
学院专业
班级学号
学生姓名指导教师
完成日期2013年6月28日
指导教师对学生在课程设计中的评价
指导教师对课程设计的评定意见
课程设计任务书
学院专业
编程实现简单的TCP协议分析器
学生姓名:指导老师:
摘要编程实现简单的TCP协议分析器。TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具。它从局域网中抓取IP数据包,并对它进行分析得到相对应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。运行程序平台为windows7/XP,程序通过调试运行,初步实现了设计目标,并且再经过适当完善后,将可以应用在商业中解决实际问题。TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。
关键词程序设计;TCP;局域网;指令;服务器
目录
1 引言.......................................................................................... 错误!未定义书签。
1.1问题描述........................................................................... 错误!未定义书签。
1.2基本要求........................................................................... 错误!未定义书签。2系统设计 (1)
2.1 设计思想 (1)
2.2系统结构 (2)
3程序流程 (2)
3.1 程序流程图 (2)
4 模块设计介绍 (4)
4.1 主模块 (4)
5 判断 (5)
5.1判断IP协议类型字段 (5)
5.2判断以太网字协议段类型 (12)
6 系统调试 (13)
6.1测试情况 (13)
7 结束语........................................................................................ 错误!未定义书签。附录:源程序代码 (16)
1 引言
TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。
1.1问题描述
编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。
1.2基本要求
1.利用原始套接字实现简单的TCP协议分析器。
2.系统功能包括:
2.1 原始套接字与网卡绑定,并接收流经网卡的所有数据包;
2.2 对数据包进行分析以获得源IP地址和目的IP地址;
2.3 对TCP Segment进行分析以获得其首部详细信息;
2.4 显示分析结果。
3 使用VC++。
2 系统设计
2.1设计思想
TCP协议的数据传送程序是由二个子程序组成的,也可以看成是服务器端程序和客户端程序。其中,服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请。
程序利用原始套接字抓取局域网中的IP包。Raw Socket: 原始套接字可以用它来发送和接收IP 层以上的原始数据包, 如ICMP,TCP, UDP等。
TCP协议分析器实现了sniffer的一部分功能。而sniffer的工作原理是:1. 把网卡置于混杂模式;2. 捕获数据包;3. 分析数据包。
2.2系统结构
(1)Pcap_addr描述网络接口地址;
(2)pcap_pkthdr用来描述每个捕获到的数据包的基本信息;
(3)int_pcaplookupnet获取网络地址和网络掩码;
(4)int_pcaploop循环捕获网络数据包,直到遇到错误或满足退出条件;
(5)pcap_t* pcap_open_dead构造一个libpcap句柄。
3程序流程
3.1程序流程如图1
图1数据包的分析流程
4 模块设计介绍
4.1主模块
void main()
{
pcap_t *pcap_handle;
/* Winpcap句柄*/
char error_content[PCAP_ERRBUF_SIZE];
/* 存储错误信息*/
char *net_interface;
/* 网络接口*/
struct bpf_program bpf_filter;
/* BPF过滤规则*/
char bpf_filter_string[] = "";
/* 过滤规则字符串*/
bpf_u_int32 net_mask;
/* 掩码*/
bpf_u_int32 net_ip;
/* 网路地址*/
net_interface = pcap_lookupdev(error_content);
/* 获得可用的网络接口*/
pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);
/* 获得网络地址和掩码地址*/
pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content);
/* 打开网路接口*/
pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);
/* 编译BPF过滤规则*/
pcap_setfilter(pcap_handle, &bpf_filter);
/* 设置过滤规则*/
if (pcap_datalink(pcap_handle) != DLT_EN10MB)
return ;
pcap_loop(pcap_handle, - 1, ethernet_protocol_packet_callback, NULL);
/* 注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包*/
pcap_close(pcap_handle);
/* 关闭Winpcap操作*/
}