网络课设端口扫描与抓包分析报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“端口扫描与抓包分析”。
CENTRAL SOUTH UNIVERSITY
计算机网络课程设计报告题目端口检测与数据包捕获解析 学生姓名 班级学号 指导教师刘丽敏 设计时间 2015年9月
网络课设 | 39 网络课设
目录
CENTRAL SOUTH UNIVERSITY.....................................................................1 第一章设计目的、任务与要求....................................................................................3
1.1设计的目的.......................................................................................................3 1.2设计的任务与要求...........................................................................................3 第二章系统总体分析设计............................................................................................4
2.1 总体需求分析..................................................................................................4 2.2 实验环境..........................................................................................................4 第三章端口扫描模块分析设计....................................................................................4
3.1 端口的基本概念..............................................................................................4 3.2 常见端口了解..................................................................................................5 3.3 扫描端口的基本原理......................................................................................6 3.4 扫描端口的常用技术......................................................................................6 3.5功能设计与流程图...........................................................................................8 第四章端口扫描模块实现............................................................................................8
4.1 输入要扫描的网段并将其排序......................................................................8 4.2 ScanIP扫描......................................................................................................9 4.3 清理结束后进程............................................................................................10 4.4 输出结果........................................................................................................10 4.5 计算时间........................................................................................................11 第五章抓包模块分析设计..........................................................................................11
5.1 IP包知识........................................................................................................11 5.2 功能设计与流程图........................................................................................13 第六章抓包模块实现..................................................................................................15
6.1 数据结构的定义............................................................................................15 6.2 初始化工作....................................................................................................16 6.3 套接字的创建和设置....................................................................................17 6.4 数据包的捕获与分析....................................................................................18 6.5 信息的输出....................................................................................................19 第七章程序运行结果与分析......................................................................................20 第八章心得体会..........................................................................................................25 参考文献......................................................................................................................26 附录程序源代码..........................................................................................................27| 39
网络课设
第一章设计目的、任务与要求
1.1设计的目的现今,计算机网络已经彻彻底底地改变了人们的生活。大量的数据都是经过计算机网络传输的,而TCP/IP协议是计算机网络中最重要的协议之一。计算机网络中绝大多数数据都是以IP数据包的形式发送和接受的。所以IP数据包的捕获是很多计算机安全技术的基础。在本次课程实际中,通过编程实现网卡截取标准IP包,并解析IP数据包,以了解IP包结构中各个字段的含义与用途,更好掌握网络层的基本原理,这是第一点。
本课程设计的另一个目的是运用漏洞、端口的基础知识,设计并实现一个网络扫描器,它通过与目标主机TCP/IP端口建立连接并请求某些服务,记录目标主机的应答,分析目标主机相关信息,从而发现目标主机某些内在的安全弱点。
1.2设计的任务与要求
本次实验的要求在网络环境,实现端口检测以及捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:
l)实现本机以及局域网内计算机的端口监控。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)形成记录结果的日志文件。| 39
网络课设
第二章系统总体分析设计
2.1 总体需求分析
可以将本实验分为两个独立的模块来解决,具体两个模块的设计实现在后面单独章节里详述,从总体而言,可以设计一个界面,将两个功能整合到一起,然后让用户选择所要实验的功能。而对于扫描本机端口,用自己写的端口扫描器也可以完成,但速度较cmd指令慢,所以将其单独出来作为一项功能。其中,cmd中查本机端口号指令为netstat –no。总体系统功能如下图:
开始菜单、接收键盘输入多分支IF1、抓包分析
2、扫本机端口
3、扫局域网端口
4、退出
2.2 实验环境
本实验采用Windows操作系统平台,利用Windows提供的Windows Sockets API实现IP数据包的捕获与分析。采用WinSock 2.2版本,编程语言选用C++,编程开发采用Code::Blocks 13.12。
第三章端口扫描模块分析设计
3.1端口的基本概念
我们这里所说的端口,不是计算机硬件的i/o端口,而是软件形式上的概念。服务器可以向外提供多种服务,比如,一台服务器可以同时是web服务器,也可| 39
网络课设
以是ftp服务器,同时,它也可以是邮件服务器。为什么一台服务器可以同时提供那么多的服务呢?其中一个很主要的方面,就是各种服务采用不同的端口分别提供不同的服务。根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。
3.2 常见端口了解
端口是一个16 bit的地址,用端口号进行标识不同作用的端口。端口一般分为两类。
熟知端口号:范围从0到1023,这些端口号一般固定的分配给一些服务,所以,这些端口分别对应哪些服务也是我们要关注的,以下是一些常见的熟知端口号的介绍:
1)端口:21 服务:FTP 说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。
2)端口:23 服务:Telnet 说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的*作系统。还有使用其他技术,入侵者也会找到密码。木马Tiny Telnet Server就开放这个端口 3)端口:25 服务:SMTP 说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、Email Paword Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口 4)端口:80 服务:HTTP 说明:用于网页浏览。木马Executor开放此端口。| 39
网络课设
动态端口号:动态端口的范围从1024到65535,这些端口号一般不固定的分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如8080端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
3.3 扫描端口的基本原理
端口分为源端口和目的端口,源端口是本机打开的,目的端口是在和本机通信的另一台计算机的端口。端口是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用IP端口来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向A端口就可以实现通信了。可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描[5],能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。
扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。
3.4 扫描端口的常用技术
1、TCP connect()扫描:
这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的| 39
网络课设
connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被察觉,并且被防火墙将扫描信息包过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。
2、TCP SYN扫描:
这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信息表示端口处于侦听状态:返回RST表示端口没有处于侦听态。如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺点是必须要有root权限才能建立自己的SYN数据包。
3、TCP FIN 扫描:
SYN扫描虽然是“半开放”方式扫描,但在某些时候也不能完全隐藏扫描者的动作,防火墙和包过滤器会对管理员指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包在扫描过程中却不会遇到过多问题,这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系,有的系统不管端口是否打开都会回复RST,在这种情况下此种扫描就不适用了。另外这种扫描方法可以非常容易的区分服务器是运行Unix系统还是NT系统。
4、IP段扫描:
这种扫描方式并不是新技术,它并不是直接发送TCP探测数据包,而是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但必须小心:一些程序在处理这些小数据包时会有些麻烦。
5、TCP 反向 ident扫描:
ident 协议允许(rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。例如扫描者可以连接到http端口,然后用identd来发现服务器是否正在以root权限运行。这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。
6、FTP 返回攻击:
FTP协议的一个有趣的特点是它支持代理(proxy)FTP连接,即入侵者可以从自己的计算机self.com和目标主机target.com的FTP server-PI(协议解释器)连接,建立一个控制通信连接。然后请求这个server-PI激活一个有效的| 39
网络课设
server-DTP(数据传输进程)来给Internet上任何地方发送文件。对于一个User-DTP,尽管RFC明确地定义请求一个服务器发送文件到另一个服务器是可以的,但现在这个方法并不是非常有效。这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服务器造成打击,用尽磁盘,企图越过防火墙”。
3.5功能设计与流程图
开始初始化输入IP段ScanIP扫描计算时间结束 第四章端口扫描模块实现
4.1 输入要扫描的网段并将其排序
//功能: 输入一个IP段,输出该IP段内的端口开放情况信息
int ScanIp(const string &start_Ip, const string multimap&ouputMap){ //分解IP段内的IP到全局数组中去
GetIpToScan(start_Ip,endIp,g_vec_IpToScan);int scanNum = g_vec_IpToScan.size();//线程总数
g_runThreadNum = scanNum;
&endIp,| 39 网络课设
cout
for(int i = 0;i
4.2ScanIP扫描
建立多个线程,每个线程扫描一个ip。每个线程内先建立数据流套接字,然后绑定ip端口进行扫描。将扫描端口保存到g_map_ScanResult。//保存IP扫描的结果
multimap g_map_ScanResult;//线程函数,扫描每一个IP DWORD WINAPI ThreadFunc(LPVOID th_para){ //获取需要扫描的IP //char *pStrIp =(char*)th_para;unsigned long ulScanIp = *(unsigned long*)th_para;int index = 0;//端口索引 SOCKET link_sock;//SOCKET FD_SET set_flag;//SOCKET描述 short select_ret;//select异步返回值
short port;//正在扫描的端口 while(index
| 39
网络课设
ReleaseMutex(g_ThreadNumMutex);//cout
4.3 清理结束后进程
//清理
void CleanProc(){ //线程都执行完后清理socket相关信息 while(1){ WaitForSingleObject(g_ThreadNumMutex,INFINITE);if(g_runThreadNum == 0){ break;} ReleaseMutex(g_ThreadNumMutex);Sleep(100);} //清理socket相关信息 WSACleanup();} 4.4输出结果
//输出扫描结果 int OutPutScanInfo(){
cout
multimap::iterator iter = g_map_ScanResult.begin();
ofstream out(“out.txt”);
cout
for(;iter!=g_map_ScanResult.end();++iter)
{
out second
cout second
| 39
网络课设
} return 0;} 4.5 计算时间
//计算程序运行时间
end_time = clock();
cost_time =(double)(end_timeulStartIp;
for(int i = 0;i
//功能: 输入一个IP段,输出该IP段内的端口开放情况信息
| 39
网络课设
int ScanIp(const string &start_Ip, const string &endIp, multimap&ouputMap){ //分解IP段内的IP到全局数组中去
GetIpToScan(start_Ip,endIp,g_vec_IpToScan);int scanNum = g_vec_IpToScan.size();
//线程总数
g_runThreadNum = scanNum;cout
cout
for(int i = 0;i
//输出扫描结果
int OutPutScanInfo(){
cout ::iterator iter = g_map_ScanResult.begin();
ofstream out(“out.txt”);cout second second
| 39
网络课设
void UserInput(){ system(“CLS”);
cout
cout> g_startIp;cout> g_endIp;
cout
//初始化相关信息 void InitProc(){ //初始化socket相关信息 int ws_result;ws_result = WSAStartup(MAKEWORD(2,2),&g_wsadata);
if(ws_result!= 0){ cout
//清理
void CleanProc(){ //线程都执行完后清理socket相关信息 while(1)
| 39
网络课设
{ WaitForSingleObject(g_ThreadNumMutex,INFINITE);if(g_runThreadNum == 0){ break;} ReleaseMutex(g_ThreadNumMutex);Sleep(100);} //清理socket相关信息 WSACleanup();}
int main(int argc, char **argv){ cout
int sz;cin>>sz;if(sz==1){ if(argc!= 2){ //cout
//初始化winsock的动态链接库 WSADATA wsa_data;
if(WSAStartup(MAKEWORD(2, 2), &wsa_data)!= 0){ cerr
| 39 网络课设
//建立一个原始套接字
SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);if(s == INVALID_SOCKET){ WSACleanup();cerr
//设置套接字 set_socket(s);
//打开日志文件
ofstream fout(argv[1]);if(!fout){ cerr
//捕获数据包,并进行解析
//将结果写入标准输出和日志文件中 char buf[MAX_IP_LEN];for(;;){ int n_recv = recv(s, buf, sizeof(buf), 0);SYSTEMTIME cur_time;GetLocalTime(&cur_time);//获得捕获数据包的时间
if(n_recv > 0){ IPHead *lp_iphead =(IPHead *)buf;
char buf[20];sprintf(buf, “%02d:%02d:%02d:%03d”, cur_time.wHour, cur_time.wMinute, cur_time.wSecond, cur_time.wMilliseconds);
//输出到标准输出
cout
//输出到文件
| 39
网络课设
fout
ScanIp(g_startIp,g_endIp,g_map_ScanResult);//开始扫描 CleanProc();//清理结束后进程 OutPutScanInfo();//输出结果 //计算程序运行时间 end_time = clock();cost_time =(double)(end_time-start_time)/ CLOCKS_PER_SEC;cout
struct sockaddr_in hostaddr;hostaddr.sin_family = AF_INET;hostaddr.sin_port = htons(0);hostaddr.sin_addr.s_addr = gethostid();if(bind(s,(sockaddr *)&hostaddr, sizeof(sockaddr))!= 0)
| 39
网络课设
{ closesocket(s);WSACleanup();cerr
//将s设置为接受所有IP数据包 DWORD in_buffer = 1, n_returned;int ret = WSAIoctl(s, SIO_RCVALL, &in_buffer, sizeof(in_buffer), NULL, 0, &n_returned, NULL, NULL);if(ret!= 0){ closesocket(s);WSACleanup();cerr
struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(IPPORT_ECHO);addr.sin_addr.s_addr = inet_addr(“128.127.50.1”);
connect(s,(sockaddr*)&addr, sizeof(sockaddr));
struct sockaddr_in hostaddr;//本机地址 int n_addr = sizeof(sockaddr);getsockname(s,(sockaddr*)&hostaddr, &n_addr);
closesocket(s);
| 39
网络课设
return hostaddr.sin_addr.s_addr;} /* **将IP数据包信息输出到out流
**ip_iphead为指向IPHead类型的指针 */ void output_ip(IPHead *lp_iphead, ostream &out){ out version ihl * 4)tos len id
u_short unserved =(lp_iphead->off)>> 15;u_short DF =((lp_iphead->off)>> 14)& 0x0001;u_short MF =((lp_iphead->off)>> 13)& 0x0001;out off)& 0x1fff)
out ttl protocol;map::const_iterator it = IP_PROTOCOL.find(lp_iphead->protocol);if(it!= IP_PROTOCOL.end())out second
out cksum saddr)daddr)
| 39
基于C/S结构的套接字程序设计----通过socket实现服务端功能学 院: 信息技术工程学院 _ 专 业: 计算机科学与技术 _ 班 级: *班 _ 姓 名: 陈*** 学 号: 0123456789 指导老师: ***......
武汉理工大学《财务会计》课程设计说明书财务会计手工模拟实验及感悟1 概述1.1实务背景 作为一名未来的会计人员,我们现在才刚刚起步,为了更好的掌握会计学知识,我们进行了财务......
华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告课程设计报告题目:华科校园导航课程名称:数据结构课程设计 专业班级: 学号: 姓名: 指导教师: 报告日期:计算......
数据库上机实习数 据 库 课 程 设 计 题目 《数据库》课程设计 学号 201007084201 姓名 马伟华 班级 电气102 指导老师 刘秀敏 1 数据库上机实习 目录一 、概述„„„......
武汉理工大学《财务会计课程设计》报告书13年我们一起做的财务会计课程设计财务会计课程设计,是我的第三次专业课程设计,说实话做起来应该轻车熟路,但实际却不是如此。在刚开始......