毕业设计.docx
- 文档编号:10747772
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:57
- 大小:1.41MB
毕业设计.docx
《毕业设计.docx》由会员分享,可在线阅读,更多相关《毕业设计.docx(57页珍藏版)》请在冰点文库上搜索。
毕业设计
1引言
1.1课题的来源、意义和目的
随着科学技术的发展,21世纪的人类已经生活在信息时代,计算机技术与网络技术已经深入到人类社会的各个方面。
近年来网络的迅速发展,给人们的生活带来了新的感受,同时人类社会对于网络的依赖性也越来越强。
信息技术的飞速发展给人们带来了极大的便利,同时也引入了巨大的安全隐患。
因此,网络安全问题越来越引起人们的广泛关注,并成为当今网络技术领域研究的重点。
目前,大多数的网络攻击,如:
黑客攻击、木马、病毒都是通过安全漏洞侵入目标主机的。
如果我们能够根据具体的应用环境,尽可能早地通过网络扫描来发现这些漏洞,并及时采取适当的措施进行修补,就可以预防安全威胁的发生。
因此,网络安全管理者需要一套工具能够发现网络主机的脆弱性。
端口、漏洞扫描技术能够检测出网络中潜在的安全漏洞,从而使网络管理者一目了然,了解自身网络系统存在的问题。
根据当前网络安全现状和现有扫描技术的不足,本文提出了基于多线程的端口、漏洞扫描器的设计,来实现端口扫描、漏洞扫描、弱口令破解、日志分析等一系列功能,辅助网络管理者了解自身系统的安全现状。
1.2完成的内容与设计结果
1.2.1设计内容
本系统是根据当今网络中主机的脆弱性进行需求分析后,再开发设计的,具体实现的功能和要求如下:
(1)对本地主机的进程进行监控,并能够管理;
(2)对本地主机的实时信息做全面收集,并呈现出来;
(3)利用多线程技术,对远程主机的端口进行扫描,包括:
基本端口扫描、自定义端口扫描、网段存活扫描;
(4)对远程主机的弱口令进行猜解,包括:
FTP弱口令扫描、POP3弱口令扫描;
(5)对远程主机的常见威胁、漏洞进行扫描评估;
(6)对扫描结果进行存储,提供丰富的日志分析;
(7)对猜解字典能够管理;
(8)系统界面要简洁,操作起来应简单;
(9)扫描效率要比较高。
1.2.2设计结果
本系统要求具有如下功能:
(以下分四大模块)
系统菜单模块:
菜单界面,网络管理者可以使用系统扫描、DOS工具集、字典管理、系统介绍四项功能;
系统扫描模块:
网络管理者通过菜单界面选中系统扫描后,可以对本地系统进程、本地系统信息进行全面地管理。
同时还可以对远程系统进行端口扫描、漏洞扫描、弱口令猜解、日志分析等。
DOS工具集模块:
用于对远程系统扫描的辅助测试,包含:
ping、tracert、nslookup三个命令,用于远程系统连通性测试。
字典功能模块:
网络管理者可对用于暴力猜解的字典进行管理,包括:
修改、备份、恢复功能。
2总体设计与实施方案
2.1总体设计
2.1.1设计目标
通过对本地系统的监控以及对远程系统的安全扫描,来发现网络中主机的脆弱性,以便于及时发现问题再做出相应的响应措施。
系统安全扫描工具致力于对系统安全的脆弱性评估,应满足漏洞扫描、端口扫描、弱口令扫描、日志分析等功能,本系统在设计时应该满足以下几个目标。
(1)对本地主机的进程进行监控,并能够管理;
(2)对本地主机的实时信息做全面收集,并呈现出来;
(3)利用多线程技术,对远程主机的端口进行扫描,包括:
基本端口扫描、自定义端口扫描、网段存活扫描;
(4)对远程主机的弱口令进行猜解,包括:
FTP弱口令扫描、POP3弱口令扫描;
(5)对远程主机的常见威胁、漏洞进行扫描评估;
(6)对扫描结果进行存储,提供丰富的日志分析;
(7)对猜解字典能够管理;
(8)系统界面要简洁,操作起来应简单;
(9)扫描效率要比较高。
2.1.2系统结构
图2.1系统结构图
2.2实施方案
2.2.1开发平台和工具的选择
本系统开发运行需要以下几个条件。
硬件平台:
ThinkpadX201i笔记本
CPU:
i32.5GHz
内存:
2G
操作系统:
WindowsXP/Windows2000/Windows7
开发工具包:
JDKVersion1.6
开发环境:
Myeclipse8.0
浏览器:
IE7.0
显示器分辨率:
1280×800
2.2.2方案实施步骤
(1)了解当前的网络现状,分析问题所在。
(2)了解用户的需求,反馈系统工具设计的可行性。
(3)设计出系统工具的大致界面,进行功能可行性分析。
(4)着手编程设计,具体实现需求分析中的各个功能。
(5)进行系统测试,完善功能并修复BUG。
2.2.3关键技术介绍
(1)Socket编程概述
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链
的句柄。
应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以JDK-1.6为例,Socket和ServerSocket类库位于包中。
ServerSocket用于服务器端,Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
重要的SocketAPI:
.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.6文档。
Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。
"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。
getOutputStream方法连接的另一端将得到输入同时返回一个OutputStream对象实例。
其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
(2)多线程技术概述
在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。
多线程处理一个常见的例子就是用户界面。
利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
线程是在同一时间需要完成多项任务的时候实现的。
Java语言的多线程需要操作系统的支持。
Java虚拟机允许应用程序并发地运行多个执行线程。
Java语言提供了多线程编程的扩展点,并给出了功能强大的线程控制API。
在Java中,多线程的实现有两种方式:
扩展java.lang.Thread类
实现java.lang.Runnable接口
本设计利用的为扩展java.lang.Thread类方式来实现多线程。
(3)cmd命令行概述
cmd是command的缩写,即命令行。
在Windows老版本系统下输入command就可以打开命令行。
而在NT系统上可以输入cmd来打开,在windows2000后被cmd替代,利用CMD命令查询系统的信息或者是判断网络的好坏。
对于本次毕业设计,用到的主要命令有:
Ping、Nslookup、Tracert、Tasklist、Taskkill、Netuse、Systeminfo等。
3系统的实现
3.1准备阶段
1.开发环境准备
本系统的开发环境采用Myeclipse8.0以及JDK1.6。
2.测试环境准备
为了测试系统的部分功能实现,需要额外的搭建一些系统、服务来进行测试,以达到验证结果的目的:
虚拟机:
VMwareWorkstation7.0
操作系统:
WindowsServer2000SP1
POP3:
IIS5.0
SMTP:
IIS5.0
FTP:
ServU6.0
3.2主要功能、界面的设计
系统文件及其功能图如图3.1、图3.2所示:
图3.1系统文件及其功能
(1)
图3.2系统文件及其功能
(2)
3.2.1系统菜单界面、功能的设计
系统菜单是网络管理者使用该工具运行后,最先进入的界面。
该界面包含了系统的各个模块的连接,连接通过button按钮实现,包括:
扫描系统、DOS工具集、字典管理、关于本系统的介绍等。
此外还包含了作者以及版本号的相关信息。
运行结果如图3.3所示:
图3.3系统菜单界面
连接的核心代码如下:
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==jb1){
if(flag1==true)
{f1=newLoad();
flag1=false;}
else
{flag1=true;
f1.dispose();}
}
if(e.getSource()==jb2){
if(flag2==true)
{f2=newDos();
flag2=false;}
else
{flag2=true;
f2.dispose();}
}
if(e.getSource()==jb3){
if(flag3==true)
{f3=newDictionary();
flag3=false;}
else
{flag3=true;
f3.dispose();}
}
if(e.getSource()==jb4){
if(flag4==true)
{f4=newAbout();
flag4=false;}
else
{flag4=true;
f4.dispose();}
}
if(e.getSource()==jb5){
System.exit(0);
}
}
3.2.2扫描系统界面、功能的设计
扫描系统界面包含了该设计的大部分功能界面,大致可分为以下五个方面:
1、本地网络监控
2、端口扫描
3、弱口令猜测
4、漏洞扫描
5、日志查询
扫描系统的界面菜单主要采用了树模型结构,用户通过鼠标点击而进入相应的界面。
简洁的界面使用户使用起来十分方便。
此外,每一个功能还附带了功能介绍以及扫描时间,大大提高了用户使用的灵活度。
扫描系统总体界面设计如图3.4:
图3.4扫描系统模块界面
树结构模型菜单的实现:
publicvoidAtree(){
MouseListenerml=newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
intselRow=a.getRowForLocation(e.getX(),e.getY());
TreePathselPath=a.getPathForLocation(e.getX(),e.getY());
if(selRow!
=-1){
if(e.getClickCount()==1){
mySingleClick(selRow,selPath);
}elseif(e.getClickCount()==2){
myDoubleClick(selRow,selPath);
}}}
privatevoidmyDoubleClick(intselRow,TreePathselPath){
if(selPath.getLastPathComponent().toString()==(""))
System.out.println(11);}
privatevoidmySingleClick(intselRow,TreePathselPath){
if(selPath.getLastPathComponent().toString()==("系统安全检测工具")){
initp2();}
if(selPath.getLastPathComponent().toString()==("进程监控")){
newTaskList();}
if(selPath.getLastPathComponent().toString()==("本地系统查看")){
newProgress();
Systeminfo.ja1.setVisible(false);
threadprogress2s1=newthreadprogress2();
newThread(s1).start();}
if(selPath.getLastPathComponent().toString()==("FTP")){
newFtp();}
if(selPath.getLastPathComponent().toString()==("POP3")){
newPop3();}
if(selPath.getLastPathComponent().toString()==("多线程扫描")){
newThreadscanner();}
if(selPath.getLastPathComponent().toString()==("自定义扫描")){
newCustomscanner();}
if(selPath.getLastPathComponent().toString()==("网段存活扫描")){
newNetworkalive();}
if(selPath.getLastPathComponent().toString()==("IPC$")){
newIpcgui();}
if(selPath.getLastPathComponent().toString()==("Unicode")){
newUnicodegui();}
if(selPath.getLastPathComponent().toString()==("常见威胁扫描")){
newAllleaksgui();
if(selPath.getLastPathComponent().toString()==("端口日志")){
newPortlog();}
if(selPath.getLastPathComponent().toString()==("漏洞日志")){
newLeakslog();}
if(selPath.getLastPathComponent().toString()==("弱口令日志")){
newSimplepasswordlog();}
if(selPath.getLastPathComponent().toString()==("本地网络监控")){
title1();}
if(selPath.getLastPathComponent().toString()==("端口扫描")){
title2();}
if(selPath.getLastPathComponent().toString()==("弱口令猜测")){
title3();}
if(selPath.getLastPathComponent().toString()==("漏洞扫描")){
title4();}
if(selPath.getLastPathComponent().toString()==("日志查询")){
title5();}
}
};
a.addMouseListener(ml);
}
用户选择左侧菜单时,鼠标左键单击将选中对应模块,鼠标左键双击将展开/折叠该模块。
界面设计交互性强、大方美观,功能已完全实现。
3.2.3端口扫描模块设计
端口扫描模块为本设计的核心部分,基于用户的需求分析,提供了多线程扫描、自定义扫描、网络存活扫描三种方式。
多线程扫描模块的界面设计,包含了:
主机名、端口范围、线程数、扫描、停止、主机/IP转换、存储日志、过程结果输出显示的模块。
界面使用JAVA中的Swing布局。
用到的组件包括:
JLabel、JTextField、JButton、JTextArea以及JScrollPane等组件。
多线程扫描模块中涉及到的功能主要有:
多线程扫描、存储日志、主机/IP转换。
多线程扫描的原理是与目标主机建立起Socket连接。
因为socket连接包含了源地址、目的地址、源端口、目的端口、协议这样一个五元组,根据所带参数,发起socket服务端与代理端的连接,如果socket建立成功,则表示目的主机的对应端口开放,以验证端口存活。
为了提高扫描速率,同时采用多线程技术,来大大提高系统的资源利用率。
多线程端口扫描模块界面设计与测试结果如图3.5所示:
图3.5多线程扫描
测试的远程系统是本人搭建的虚拟机,操作系统为WindowsServer2000SP1。
端口扫描范围为0到4000,线程数为了考虑到计算机的性能,设为100。
在端口范围和线程数上设定了合法性判断。
若端口范围不在0到65535,则会提示端口错误;若线程数不在1到200之间,则会提示线程数应为1-200的整数。
多线程端口扫描的核心代码如下:
if(!
Threadscanner.jt1.getText().equals("")){
//判断主机名称的有效性
try{TCPThread.hostAddress=InetAddress.getByName(Threadscanner.jt1.getText());
}
catch(UnknownHostExceptione){
Threadscanner.ja2.append("错误的域名或地址不可达!
");
Threadscanner.jb1.setEnabled(true);//设置开始扫描按钮可用。
return;
}
}
//判断端口号的有效性
try{
minPort=Integer.parseInt(Threadscanner.jt2.getText());
maxPort=Integer.parseInt(Threadscanner.jt3.getText());
maxThread=Integer.parseInt(Threadscanner.jt4.getText());
}
catch(NumberFormatExceptione){
Threadscanner.ja2.append("错误的端口号或线程数!
端口号和线程数必须为整数!
");
Threadscanner.jb1.setEnabled(true);//设置开始扫描按钮可用。
return;
}
//判断最小端口号的有效范围
if(minPort<0||minPort>65535||minPort>maxPort){
Threadscanner.ja2.append("最小端口必须是0-65535并且小于最大端口的整数!
");
Threadscanner.jb1.setEnabled(true);//设置开始扫描按钮可用。
return;
}
else{
TCPThread.MIN_port=minPort;
}
//判断最大端口号的有效范围
if(maxPort<0||maxPort>65535||maxPort Threadscanner.jb1.setEnabled(true);//设置开始扫描按钮可用。 Threadscanner.ja2.append("最大端口必须是0-65535并且大于最小端口的整数! "); return; } else{ TCPThread.MAX_port=maxPort; } //判断线程数量的有效范围 if(maxThread<1||maxThread>200){ Threadscanner.ja2.append("线程数为1-200的整数! "); Threadscanner.jb1.setEnabled(true);//设置开始扫描按钮可用。 return; } Threadscanner.ja1.append("线程数"+Threadscanner.jt4.getText()+"\n"); //启动线程 for(inti=0;i newTCPThread("T"+i,i).start();//多线程 } } for(i=MIN_port+threadnum;i Threadscanner.StopFlag;i+=i1) {try{ theTCPsocket=newSocket(hostAddress,i); theTCPsocket.close(); switch(i){ case21: porttype="(FTP)"; break; case23: porttype="(TELNET)"; break; case25: porttype="(SMTP)"; break; case80: porttype="(HTTP)"; break; case110: porttype="(POP)"; break; case139: porttype="(netBIOS)"; break; case1433: porttype="(SQLServer)"; break; case3389: porttype="(TerminalService)"; break; cas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计