




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 网络信息安全课程设计 河南理工大学计算机科学与技术学院课程设计报告2014 2015学年第一学期课程名称 网络信息安全 设计题目 网络嗅探器设计与实验 姓 名 赵万星 学 号 311209040332 专业班级 网络1203 指导教师 刘 琨 2015 年 1月5日 前 言 网络中的每一台算机如同一座城堡,在这些城堡中,有的对外完全开放,有的却是紧锁城门。入侵者们是如何找到,并打开它们的城门的呢?这些城门究竟通向城堡的何处呢?在网络技术中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。一般来说,扫描端
2、口有如下目的: ·判断目标主机上开放了哪些服务; ·判断目标主机的操作系统; 端口是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用IP端口来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向A端口就可以实现通信了。可见,端口与进程是一一对应的,如果某个
3、进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。 如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵,本课程设计将会通过用JAVA语言实现一个小的端口扫描软件,详细描述端口扫描的原理,分析端口扫描所涉及的问题,以便更加清楚地了解入侵者如何扫描目标主机的端口,同时掌握如何确保本机的安全性,为将来设计更为安全的系统打下牢固基础。 目录一 .课程设计的目的.二.课程设计的要求.三.端口扫描器相关知识. 3.1:端口的基本概念.3.2:常见的端口介绍.3.3:端口扫描
4、器基本原理.3.4:端口扫描常用技术.四.实验流程. 4.1:基本步骤. 4.2:按主机名扫描. 4.3 按IP地址扫描.5. 常用端口.6. 实验结果.七:总结.八:源程序.九. 参考文献.一:课程设计的目扫描器是网络信息收集的一种方法,从功能上可分为漏洞扫描器和端口扫描器。通过此次课程设计,能够掌握漏洞、端口的基础知识,握扫描器的基本原理并设计实现端口扫描和漏洞扫描程序。二:课程设计要求本课程设计的目标是设计并实现一个网络扫描器,它通过与目标主机TCP/IP端口建立连接并请求某些服务,记录目标主机的应答,分析目标主机相关信息,从而发现目标主机某些内在的安全弱点。扫描器通常分两类:漏洞扫描器
5、和端口扫描器。端口扫描器用来扫描目标机开放的服务端口以及端口相关信息。漏洞扫描器检查目标中可能包含的大量已知的漏洞,如果发现潜在的漏洞可能性,就报告给扫描者。网络漏洞端口扫描器对目标系统进行检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。在分析总结目前现有的扫描软件,在掌握扫描器的原理基础上,首先设计、实现一种
6、端口扫描程序,存储扫描结果。在此基础上,有余力的同学对已经开放的重要端口有具体漏洞分析检测。程序具体要求实现以下任一程序:高效端口扫描器设计与实现:参照常见端口扫描器,在局域网内,能对所有计算机进行常用端口的高速扫描,给出扫描结果。另外根据配置不同的网段,实现正对校园网络的基于网段的高速扫描。高效的漏洞扫描器的设计与实现:设计网络漏洞扫描仪的结构,建立常见的漏洞库,并基于该漏洞库,实现高效的基于网段的漏洞扫描器。主机脆弱性分析系统:将漏洞和端口扫描结合起来,实现针对主机的脆弱性分析系统。三:端口扫描器相关知识 3.1.端口的基本概念: 我们这里所说的端口,不是计算机硬件的i/o端口,而是软件形
7、式上的概念。服务器可以向外提供多种服务,比如,一台服务器可以同时是web服务器,也可以是ftp服务器,同时,它也可以是邮件服务器。为什么一台服务器可以同时提供那么多的服务呢?其中一个很主要的方面,就是各种服务采用不同的端口分别提供不同的服务。 根据提供服务类型的不同,端口分为两种,一种是tcp端口,一种是udp端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用tcp协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用udp协议。对应这两种协议的服务提供的端口,也就分为tcp端口和udp端口。那么,如果攻击
8、者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。3.2常见端口介绍 端口:21 服务:FTP 说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。 端口:23 服务:Telnet 说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的*作系统。还有使用其他技术,入侵者也会找到密码。木马Tiny
9、 Telnet Server就开放这个端口 端口:25 服务:SMTP 说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口 端口:80 服务:HTTP 说明:用于网页浏览。木马Executor开放此端口。3.3端口扫描器功能简介: 服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对
10、目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。 扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。3.4.常用端口扫描技术: 1、TCP connect()扫描: 这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用
11、的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被察觉,并且被防火墙将扫描信息包过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。 2、TCP SYN扫描: 这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个
12、SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信息表示端口处于侦听状态:返回RST表示端口没有处于侦听态。如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺点是必须要有root权限才能建立自己的SYN数据包。 3、TCP FIN 扫描: SYN扫描虽然是“半开放”方式扫描,但在某些时候也不能完全隐藏扫描者的动作,防火墙和包过滤器会对管理员指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包在扫描过程中
13、却不会遇到过多问题,这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系,有的系统不管端口是否打开都会回复RST,在这种情况下此种扫描就不适用了。另外这种扫描方法可以非常容易的区分服务器是运行Unix系统还是NT系统。 4、IP段扫描: 这种扫描方式并不是新技术,它并不是直接发送TCP探测数据包,而是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但必须小心:一些程序在处理这些小数据包时会有些麻烦。 5、TCP 反向 ident扫描: ident 协议允许(
14、rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。例如扫描者可以连接到http端口,然后用identd来发现服务器是否正在以root权限运行。这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。 6、FTP 返回攻击: FTP协议的一个有趣的特点是它支持代理(proxy)FTP连接,即入侵者可以从自己的计算机和目标主机的FTP server-PI(协议解释器)连接,建立一个控制通信连接。然后请求这个server-PI激活一个有效的server-DTP(数据传输进程)来给Internet上任何地方发送文件。对于一个User-DTP,尽管RF
15、C明确地定义请求一个服务器发送文件到另一个服务器是可以的,但现在这个方法并不是非常有效。这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服务器造成打击,用尽磁盘,企图越过防火墙”。四:实验流程4.1.基本步骤: 1.先输入想要扫描的网段; 2.然后将输入的网段转化为可排序的ip数组3.建立多个线程,每个线程扫描一个ip。每个线程内先建立数据流套接字,然后绑定 ip端口进行扫描。将扫描端口保存到g_map_ScanResult4.清理结束后进程,输出结果。 5.计算所用时间。 程序中主要的函数: int main()/主函数 InitProc();/初始化 UserInput();/输入
16、 ScanIp(g_startIp,g_endIp,g_map_ScanResult);/开始扫描 CleanProc();/清理结束后进程 OutPutScanInfo();/输出结果 DWORD WINAPI ThreadFunc(LPVOID th_para)/扫描线程每一个ip unsigned long InvertIp(unsigned long srcIp) /将ip化为可比较的 int GetIpToScan(const string &StartIp, const string &EndIp, vector<unsigned long> &
17、vec_ip)/将所有ip排序放在一个数组内4.2、按主机名扫描当用户选中按主机名扫描时,需要输入将要扫描的主机名,默认是本机localhost,用户也可以自己填写相关主机。之后点击“开始扫描”。4.3、按IP地址扫描当用户选中按IP地址扫描时,需要输入将要扫描的主机的IP,默认是。之后点击“开始扫描”。如果用户输入的端口范围太大,这样会导致程序扫描时间很长,这时可以点击“停止扫描”来中止扫描。五.常用端口5.1工作窗口当用户操用不当,例如输入的IP地址超过255,或者端口范围大于65535时,用户点击“开始扫描”按钮都会抛出相应的异常,并提示错误原因。如下图示例:5.2系统默认
18、会识别一部分常用端口,对常用端口系统将扫描出来,并随之打印端口功能,对未能识别的开放端口,系统将随之打印“UnknownPort:Open”。代码如下:switch(i)case 21:porttype = "(FTP)"break;case 23:porttype = "(TELNET)"break;case 25:porttype = "(SMTP)"break; case 80:porttype = "(HTTP)"break;case 110:porttype = "(POP)"brea
19、k;case 139:porttype = "(netBIOS)"break;case 1433:porttype = "(SQL Server)"break;case 3389:porttype = "(Terminal Service)"break;case 443:porttype = "(HTTPS)"break;case 1521:porttype = "(Oracle)"break;default :porttype = "(UnknownPort:Open)"b
20、reak;5.3、窗口核心代码public class ThreadScanpublic static JFrame main=new JFrame("网络与信息安全课程设计·端口扫描器·赵万星");public static void main(String args)Submit.addActionListener(new SubmitAction();Stop.addActionListener(new StopAction();Cancel.addActionListener(new CancleAction();OK.addActionList
21、ener(new OKAction();/实现保存功能saveItem.addActionListener(new java.awt.event.ActionListener() );/实现退出功能exitItem.addActionListener(new java.awt.event.ActionListener() /实现帮助功能helpItem.addActionListener(new java.awt.event.ActionListener() saveButton.addActionListener(new java.awt.event.ActionListener() );m
22、ain.setVisible(true);六.实验结果七:总结通过这次端口扫描器的实验深化了信息对抗,信息安全的意识。对于网络扫描器有了整体上的认识。了解了socket函数的基本用法和端口扫描的基本原理,更加熟练掌握了c+语言。在这次设计中在处理线程上遇到了很大麻烦,不过通过上网查找和书本,基本解决,还有就是刚开始在socket的运用上很是不懂,经过上网查找也顺利解决。总之这次设计,不仅是对以前只是的巩固,也学习到了许多新知识。在这次课程设计中,我遇到了不少的困难。大多数是对程序的设计相关,当然还是因为知识点不全,技术不成熟造成的。不过,这个过程却使我学习了不少新的知识。包括对信息安全更深层的
23、解理。我自认为这是一次比较成功的课程设计。不过我不知道为什么,我写的程序中还一点小BUG,就是在扫描过程中如果把窗口缩下去,再拉上来可能会导致窗口布局变乱,但这也不是经常发生的,所以不学对系统造成太大影响。由于时间关系,我不想再花时间查找原因了。但是以后有空时我会在复习这个程序时把问题解决掉。八:源程序源程序:#include <winsock2.h>/*windows socket的头文件,系统定义的*/#include <windows.h>#include <ws2tcpip.h>#include <stdio.h>#include <
24、;stdlib.h>#pragma comment(lib,"ws2_32.lib")/*链接API相关连的Ws2_32.lib静态库*/#define MAX_HOSTNAME_LAN 255#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)#define MAX_ADDR_LEN 16struct ipheader unsigned char ip_hl:4;/*header length(报头长度)*/unsigned char ip_v:4;/*version(版本)*/unsigned char ip_tos;/*type os
25、 service服务类型*/unsigned short int ip_len;/*total length (总长度)*/unsigned short int ip_id;/*identification (标识符)*/unsigned short int ip_off;/*fragment offset field(段移位域)*/unsigned char ip_ttl;/*time to live (生存时间)*/unsigned char ip_p;/*protocol(协议)*/unsigned short int ip_sum;/*checksum(校验和)*/unsigned i
26、nt ip_src;/*source address(源地址)*/unsigned int ip_dst;/*destination address(目的地址)*/;/* total ip header length: 20 bytes (=160 bits) */typedef struct tcpheader unsigned short int sport;/*source port (源端口号)*/unsigned short int dport;/*destination port(目的端口号)*/unsigned int th_seq;/*sequence number(包的序列号
27、)*/unsigned int th_ack;/*acknowledgement number(确认应答号)*/unsigned char th_x:4;/*unused(未使用)*/unsigned char th_off:4;/*data offset(数据偏移量)*/unsigned char Flags;/*标志全*/unsigned short int th_win;/*windows(窗口)*/unsigned short int th_sum;/*checksum(校验和)*/unsigned short int th_urp;/*urgent pointer(紧急指针)*/TC
28、P_HDR;typedef struct udphdr unsigned short sport;/*source port(源端口号)*/unsigned short dport;/*destination port(目的端口号)*/unsigned short len;/*udp length(udp长度)*/unsigned short cksum;/*udp checksum(udp校验和)*/UDP_HDR;void main()SOCKET sock;WSADATA wsd;DWORD dwBytesRet;unsigned int optval = 1;unsigned char
29、 *dataudp,*datatcp;int i,pCount=0,lentcp, lenudp;SOCKADDR_IN sa,saSource, saDest;struct hostent FAR * pHostent;char FAR nameMAX_HOSTNAME_LAN;char szSourceIPMAX_ADDR_LEN, szDestIPMAX_ADDR_LEN,RecvBuf65535 = 0;struct udphdr *pUdpheader;struct ipheader *pIpheader;struct tcpheader *pTcpheader;WSAStartup
30、(MAKEWORD(2,1),&wsd);if (sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)=SOCKET_ERROR)exit(1);gethostname(name, MAX_HOSTNAME_LAN);pHostent = gethostbyname(name);sa.sin_family = AF_INET;sa.sin_port = htons(6000);memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list0, pHostent->h_length);b
31、ind(sock, (SOCKADDR *)&sa, sizeof(sa);/*bind()设定自己主机的IP地址和端口号*/if (WSAGetLastError()=10013)exit(1);WSAIoctl(sock, SIO_RCVALL, &optval, sizeof(optval), NULL, 0, &dwBytesRet, NULL, NULL);pIpheader = (struct ipheader *)RecvBuf;pTcpheader = (struct tcpheader *)(RecvBuf+ sizeof(struct ipheade
32、r );pUdpheader = (struct udphdr *) (RecvBuf+ sizeof(struct ipheader );while (1)memset(RecvBuf, 0, sizeof(RecvBuf);recv(sock, RecvBuf, sizeof(RecvBuf), 0);saSource.sin_addr.s_addr = pIpheader->ip_src;strncpy(szSourceIP, inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN);saDest.sin_addr.s_addr = pIpheader
33、->ip_dst;strncpy(szDestIP, inet_ntoa(saDest.sin_addr), MAX_ADDR_LEN);lentcp =(ntohs(pIpheader->ip_len)-(sizeof(struct ipheader)+sizeof(struct tcpheader); lenudp =(ntohs(pIpheader->ip_len)-(sizeof(struct ipheader)+sizeof(struct udphdr); if(pIpheader->ip_p)=IPPROTO_TCP&&lentcp!=0)p
34、rintf("*n");pCount+; datatcp=(unsigned char *) RecvBuf+sizeof(struct ipheader)+sizeof(struct tcpheader);printf("-TCP-n");printf("n目的IP地址:%sn",szDestIP);printf("n目的端口:%in",ntohs(pTcpheader->dport);printf("datatcp address->%xn",datatcp);printf(&q
35、uot;size of ipheader->%in",sizeof(struct ipheader);printf("size of tcpheader->%in",sizeof(struct tcpheader);printf("size of the hole packet->%in",ntohs(pIpheader->ip_len);printf("nchar Packet%i %i="",pCount,lentcp-1);for (i=0;i<lentcp;i+)printf("x%.2x",*(datatcp+i);if (i%10=0)printf(""n"");pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- MySQL数据库应用技术课件:数据库的基本操作
- 现代教育技术与高中生物教学深度融合的实践与研究
- 职业资格-计算机基础及MS Office应用真题库-1
- 职业资格-房地产经纪专业基础真题库-23
- 财务管理考生心声试题及答案
- 社会行为中的价值观与信念研究试题及答案
- 师德期末考试试题及答案
- 德育职称试题库及答案
- 医疗卫生考试试题及答案
- 大学面试题目及答案
- 计算机程序设计员国家职业技能标准
- 《人民调解法》讲解
- 新加坡员工合同范本
- 《无人机测绘技能训练模块》课件-模块9:无人机解析空中三角测量
- DB3210T 1175-2024 农民田间学校运行管理规范
- 小学六年级下册数学期中考试试卷分析
- 2024年宁波金融开发投资控股集团有限公司招聘笔试冲刺题(带答案解析)
- AQ-T 2073-2019 金属非金属矿山在用高压开关设备电气安全检测检验规范
- 中外政治思想史-形成性测试三-国开(HB)-参考资料
- 河北省课程思政示范课程、教学名师和团队申报书
- 2024年浙江湖州市城市投资发展集团招聘笔试参考题库含答案解析
评论
0/150
提交评论