本地监听与远程端口扫描的设计与开发论文.docx

上传人:b****6 文档编号:7740299 上传时间:2023-01-26 格式:DOCX 页数:23 大小:291.09KB
下载 相关 举报
本地监听与远程端口扫描的设计与开发论文.docx_第1页
第1页 / 共23页
本地监听与远程端口扫描的设计与开发论文.docx_第2页
第2页 / 共23页
本地监听与远程端口扫描的设计与开发论文.docx_第3页
第3页 / 共23页
本地监听与远程端口扫描的设计与开发论文.docx_第4页
第4页 / 共23页
本地监听与远程端口扫描的设计与开发论文.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

本地监听与远程端口扫描的设计与开发论文.docx

《本地监听与远程端口扫描的设计与开发论文.docx》由会员分享,可在线阅读,更多相关《本地监听与远程端口扫描的设计与开发论文.docx(23页珍藏版)》请在冰豆网上搜索。

本地监听与远程端口扫描的设计与开发论文.docx

本地监听与远程端口扫描的设计与开发论文

本地监听与远程端口扫描的设计与开发

摘要

随着Internet的不断发展,信息技术已成为社会进步的巨大推动力。

不管是存储于服务器里还是流通于Internet上的信息都已成为一个关系事业成败的关键,这就使保证信息的安全变得格外重要。

本地监听与远程端口扫描程序就是在基于Internet的端口扫描的基础上,开发的一个基于java的本地监听和远程端口扫描的小程序。

该程序主要包括四个功能模块:

显示当前系统信息;显示网络状态;显示当前进程;扫描计算机。

其中当前系统信息和网络状态可以反应出当前计算机的系统配置和网络设置,让用户可以直观便捷的了解主机状况。

而本地监听实现对正在运行进程的监听和进程分析。

远程端口扫描用来对本机或远程主机的端口开放状态进行检测。

通过使用以上四个功能可以使用户对本机的安全程度有更好认识,也可以对目标主机的开放状况有更直观的了解。

关键词:

端口扫描;Java;进程

 

DesignandImplementationofLocalMonitoringandRemotePortScan

Abstract

Withthedevelopmentofinternet,informationtechnologyhasbeenahugepushtosocialadvancement.InformationstoredinserverorflowinginInternethasbeenakeyrelatedtotheaccomplishmentofwork.Soitbecomesespeciallyimportanttoassuresecurityofinformation.Locallisteningandremoteportscanprogramisdevelopedinjavalanguage.

Thisprogramincludesfourfunctionmodules——currentsysteminformationshowingmodule,currentnetworkingstateshowingmodule,currentprogressshowingmoduleandcomputerscanningmodule.Modulesofsysteminformationshowingandnetworkingstateshowingcandisplaycomputer'ssystemconfigurationandnetworkingsetting,whichcanhelpusergetthestateofthecomputer.Locallisteninglistenstoandanalyzesrunningprogress.Remoteportscancantestportstatesoflocalmachineandremotemachine.Byusingthefollowingfourfunctions,usercanknowdeeplyinthesafestateofhost,andknowmoreaboutgoalmachine'sstatedirectly.

Key words:

portscanning;Java;process

 

目录

论文页数:

19页

1引言1

1.1课题背景1

1.2课题研究意义1

1.3与以往的程序的区别1

2基本理论2

2.1TCP/IP协议和IP地址2

2.2用TCP/IP进行通信的示意图3

2.3端口3

2.4JAVASocket类3

3系统功能模块设计与实现4

3.1体系结构与功能介绍4

3.1.1体系结构4

3.1.2功能大体介绍4

3.2程序主界面5

3.3当前系统信息界面6

3.4网络状态程序界面7

3.5本地监听7

3.6远程端口扫描8

3.6.1Socket类编程机制8

3.6.2功能详解10

4系统关键点测试14

结论17

参考文献17

致谢18

声明19

 

1引言

1.1课题背景

互联网与生俱有的开放性、交互性和分散性特征使人类所憧憬的信息共享、开放、灵活和快速等需求得到满足。

网络环境为信息共享、信息交流、信息服务创造了理想空间,网络技术的迅速发展和广泛应用,为人类社会的进步提供了巨大推动力。

然而,正是由于互联网的特性,产生了许多安全问题。

本地监听与远程端口扫描统互相配合,能够有效提高网络的安全性。

通过对计算机的扫描,管理员可以了解主机的安全配置和运行的进程,及时发现安全漏洞,客观评估本地主机的风险性。

管理员根据扫描和监听的结果,对存在的漏洞进行重新修复。

在黑客进行攻击前防范。

如果防火墙和网络监控是被动的防御手段,那么本地监听和远程端口扫描则是主动防御手段,可以有效阻止黑客的攻击,做到防患于未然。

1.2课题研究意义

网络中的每一台计算机如同一座城堡,在这些城堡中,有的对外完全开放,有的却是紧锁城门。

入侵者们是如何找到,打开城门的呢?

这些城门究竟通往何处呢?

在网络技术中,把这些城堡的“城门“称之为计算机的端口,端口扫描是入侵者搜集信息的常用手法之一。

扫描端口的目的如下:

判断目标主机上开放了那些端口。

判断目标主机的这些端口进行什么服务。

掌握了这些信息后,入侵者能够使用相应的手段实现入侵。

本程序即可以对本机正在运行的进程进行监听,并对自身的主机扫描,对结果进行分析,找出漏洞,从而为之后的重新配置做好准备。

利用平时所学的知识,将这个程序的各个功能实现。

通过实践也可以进一步把所学的东西掌握牢固,找出其中不足的地方,在今后的学习生活中一步步的完善。

1.3与以往的程序的区别

本程序与以往的程序的最大的区别主要是该程序是使用Java语言编译的。

而决大部分该类似程序都是运用VB或者VC语言编写的。

而用平时自己自学的Java语言编写该程序对自身来说是一个挑战,也是检验知识掌握程度的一件工作。

对于选择Java编译,主要是它有以下一些优点:

1)面向对象性:

面向对象是Java最重要的特性。

跟新一代程序设计语言相比,Java的面向对象性更加彻底,所有的Java小程序和applet均是对象,其封装性实现了模块化和信息隐藏,继承性实现了代码的复用,使用户可以建立自己的类库。

2)平台无关性:

Java的编译程序生成一种高级的、与机器独立的“机器码”(字节代码)它是针对由Java解释程序和运行时系统实现的虚拟机器而生成的,可以在任何支持Java解释器的操作系统平台上运行。

因此,如果软件开发人员采用Java,就没有必要为不同平台编写、编译并测试代码,从而可以大大节省开销;同样,用户在考虑购置字处理和出版软件时,也不必考虑软件制造商提供了什么支持环境。

3)简洁性:

Java是一种面向对象的高级程序设计语言,它特别注重简洁性,这个原则在电脑界被称为KISS(KeepItSmallandSimple)。

它没有预处理程序、#define及相关的成份、首部(header)文件,且Java中无危险的指针运算,既减少了程序的复杂性,又增加了安全性。

Java语言与C++/C有许多相似之处,但却比C++/C简单得多,不但易读易懂,而且代码的修改和重用也很容易;Java语言无结构(structure)和联合(Union)这样的复杂数据类型,可以利用类的实例变量达到同样的效果;Java语言也没有函数(function),函数的功能可以通过定义一个类及为这个类建立方法来实现。

4)可移植性:

序被编译后生成的并不是机器代码,而是生成字节代码(ByteCode)。

字节代码是以Java虚拟环境(JavaVirtualMachine)为基础的,Java对每一个可能和系统软硬件相关的部分都作了明确的定义,这就消除了C++/C语言中数据类型的不确定性(例如整数类型int在不同的系统中可能会有16bit,32bit或64bit等不同的长度)。

Java语言环境本身也容易移植到新的体系结构和操作系统,其编译程序也是用Java语言编写的,它运行时的系统是用ANSIC编写的,带有清晰的可移植边界。

5)安全性:

Java语言摒弃了C++/C中大量过于复杂、容易导致编程错误和影响系统安全的部分,例如不再支持在C++/C中常用的指针操作、内存动态(malloc和free)分配等功能。

Java程序在执行时会对自身作严格的检查以防止任何非法的修改,因而它具有良好的防病毒和防止网络非法入侵的能力。

2基本理论

2.1TCP/IP协议和IP地址

进入Internet联结的计算机必须根据网络要求遵循有关通信协议全球的Internet网就是基于TCP/IP协议,在网络中的各个计算机通信存在最基本问题就是如何识别与之通信的计算机,像城市中的街道内各户编号一样,IP地址是TCP/IP中用于唯一标识一台计算机的编号,IP地址提供对网络中计算机的标识以及它所在的网络。

2.2用TCP/IP进行通信的示意图

在TCP/IP的应用层协议使用的是客户-服务器方式。

客户(Client)和服务器(Server)都是指通信中所涉及的两个应用进程。

客户-服务器方式所描述的是进程之间服务和被服务的关系。

当A进程需要B进程的服务时就主动呼叫B进程,在这种情况下,A是客户而B是服务器。

这里最重要的特征就是:

客户是服务请求方,服务器是服务提供方。

客户与服务器的通信关系一旦建立,通信就可是双向的,客户和服务器都可以发送和接收信息,如图1所示:

图1TCP/IP通信方式

当TCP/IP数据包到达目的地后,计算机首先去掉地址标志,利用TCP的装箱单检查数据在传输中是否有损失,如果接收方发现有损坏的数据包,就要求发送端重新发送被损坏的数据包,确认无误后再将各个数据包重新组合成原文件。

就这样,Internet通过TCP/IP协议实现了全球通信的功能。

2.3端口

通常因特网中的某种服务对应某个协议,并与某个惟一的端口号关联在一起。

端口由一个16位二进制整数表示,应用进程必须与该端口号绑定才能进行通信。

1024以下端口号保留为系统服务,其他为用户一般应用服务。

2.4JAVASocket类

Socket是著名的网络应用编程接口(API)之一,而Java语言是网络编程的主要语言,提供了强大和独特的网络通讯支持机制和能力。

在Java网络编程中,Socket层次,即传统网络编程经常采用的方式,通过在Client/Server(客户机/服务器)结构的应用程序之间建立Socket套接字连接,然后在连接之上进行数据通信,是一种经常采用的通信模式。

套接字类型Socket根据其传输数据类型的不同,可以分为以下三种类型:

1)字节流套接字(Socket-stream),提供了一个双向的、面向连接的、可靠的、无差错的字节流通信,无重复的发送且按发送顺序接收。

内设流量控制,避免数据流超限;不保持信息边界。

实现这种特性的通信协议在收到差错时将重传信息,若在连接已经切断后再发数据则返回错误信息,FTP协议即采用流式套接字。

2)数据报套接字(SocketDgram);提供了一个无连接服务,每个数据包都有地址。

数据包以独立包形式被发送,但不保证顺序,不保证可靠或不重复。

网络文件系统NFS使用数据报式套接字。

3)原始数据套接字(SocketRaw),该接口允许对较低层次协议,如IP、ICMP直接访问。

这不是给普通用户使用的,而是给要开发新协议或对低层协议有兴趣的人使用。

3系统功能模块设计与实现

3.1体系结构与功能介绍

3.1.1体系结构

设计C/S模式的本地监听和远程端口扫描。

C/S模式本地监听远程扫描系统共有6个Java源文件和1个form文件组成,form文件是主类的窗口文件,由IDEnetbeans自动生成。

主类MainJFrame.java主要完成本地进程的实时枚举,相关开放端口的枚举功能;ThreadScan.java主要完成多线程的远程主机扫描。

其他的几个类文件主要是辅助类,以及方法实现类,用来完成响应的业务操作。

3.1.2功能大体介绍

该程序有以下功能模块:

本地监听:

主要实现实时查看操作系统当前运行进程,并根据进程查看本机响应端口和远程计算机连接情况。

用户可以实时枚举当前系统所有运行的进程,根据进程id和端口开放的关系,查找开放的TCP及UDP端口。

由于java工作的虚拟机之上的,所以java并不能直接获得操作系统进程的句柄。

这些操作只能通过操作系统API或者提供的接口程序运行,本次设计考虑到java本地接口和Runtime类运行操作系统自己提供的shell/命令行(windows)两种方式。

远程扫描:

远程端口Javasocket类与远程主机给定的端口范围,采用多线程逐个连接。

如果能够连接上表示对方相应的端口开放,如果不能视为没有开放。

暂时不考虑对方主机存在防火墙。

用户可以设定每次扫描的线程数,线程数越大,对当前扫描主机,及网络的压力就越大,扫描的速度也相对比较快。

(程序规定扫描线程数为1-200的整数,默认线程数为100)。

3.2程序主界面

图2主程序界面

MainJFrame类主要实现该程序的界面排版,将实现程序界面的所有的类封装在com.text包中。

该包中将程序主界面分为三个部分,分别用不同的组件去实现,它包括菜单栏,滚动窗格,以及消息提示框的文本区控件,程序主界面如图2所示。

每一部分所使用的类以及对象如表1所示。

表1组件以及类对照表

名称

对象

菜单条

menu

JMenuBar

菜单

文件,操作

JMenu

菜单项

本机信息,net,exit,当前进程信息,扫描计算机

JMenuItem

滚动窗格

Pane13,tipPane

JScrollBar

文本区

psInfo

JTextArea

表格

table

JTable

首先在主窗体内创建轻量组件,如menu=newjavax.swing.JMenuBar()定义了整个菜单条对象,如文件=newjavax.swing.JMenu(),操作=newjavax.swing.JMenu()则是创建的菜单对象,菜单对象之下的菜单项对象如当前系统信息=newjavax.swing.JMenuItem();网络状态=newjavax.swing.JMenuItem();当前进程信息=newjavax.swing.JMenuItem();扫描计算机=newjavax.swing.JMenuItem()则是可以发生ActionEvent事件,通过鼠标点击实现该程序的两个主要功能:

本地监听与远程端口扫描。

3.3当前系统信息界面

图3当前系统信息

在Java应用程序运行时,特别是需要在跨平台工作环境下运行时,需要确定操作系统类型、用户JDK版本和用户工作目录等随工作平台变化的信息,来保证程序正确运行。

一般情况下,可以利用JDK提供的系统属性类(Properties)中的方法,快速地获取工作环境信息。

另外,程序开发人员还可以定义与应用程序相关的系统属性文件,在用户程序执行过程中动态地加载程序员定义的属性文件来控制程序运行。

主要功能显示操作系统的各种信息,以上的操作系统信息,系统版本,Java,jre安装路径,当前用户名都是通过使用System.getProperty()方法得到的,然后输出到创建的文本区中。

比如获得系统名,可以通过调用方法System.getProperty(“os.name”);系统版本通过调用方法System.getProperty("os.version")获得。

String[]headers={"操作系统","系统版本","java虚拟机版本","jre安装路径","当前用户名"};

Propertiesprop=newProperties(System.getProperties());

//在标准输出中输出系统属性的内容

//prop.list(System.out);

StringBuffersys=newStringBuffer();

contents[0][0]=System.getProperty("os.name");

contents[0][1]=System.getProperty("os.version");

contents[0][2]=System.getProperty("java.vm.version");

contents[0][3]=System.getProperty("java.home");

contents[0][4]=System.getProperty("user.name");

contents[0][5]=System.getProperty("os.name");

dm.setDataVector(contents,headers);

table.setModel(dm);

3.4网络状态程序界面

图4网络状态界面

该功能主要显示当前网络的各种配置信息,如主机名,物理地址,ip地址,子网掩码等数据。

通过调用系统本身的可执行程序ipocnfig.exe,nbtstat.exe来实现网络状态的功能。

而实现对系统程序的调用则离不开Java本身丰富的类。

Prcess是java.Lang包中的一个类,可以使用该包中的Runtime类调用其静态方法exec得到Process的一个实例,exec方法可以运行一个可执行文件,即启动一个进程(如ipconfig与nbtstat命令),exec方法返回一个Process对象。

一个Process对象可以使用个getInputStream()方法获得该进程的输入流。

利用Process中的流,获得该网络的信息。

//Processpp=Runtime.getRuntime().exec("nbtstat-a"+ipAddress);

Processpp=Runtime.getRuntime().exec("ipconfig/all");

InputStreamReaderir=newInputStreamReader(pp.getInputStream());

LineNumberReaderinput=newLineNumberReader(ir);

for(Stringstr=input.readLine();str!

=null;str=nextLines)//str对象通过readLine()方法读取文本行,一直读取文本行的内容直到并显示内容直到下一文本行为空。

{

if(str!

=null)

netInfo.append(str+"\n");

3.5本地监听

它也可以显示当前进程的运行情况,如图5所示:

图5本地监听界面

由于java工作的虚拟机之上的,所以java并不能直接获得操作系统进程的句柄。

这些操作只能通过操作系统API或者提供的接口程序运行。

当要执行本机上的可执行文件时,如tasklist.exe时,这里使用java.lang包中的Runtime类。

对象process调用exec(“tasklist/v”)方法打开本机上上的可执行文件,然后将结果输入到文本区中。

而这里read()方法只读取其中的进程名称与进程号内容。

String[]headers={"进程名称","进程号"};…….

……………

Strings1="tasklist";

Processprocess=Runtime.getRuntime().exec("tasklist/v");//通过Tasklist命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具。

BufferedReaderbufferedreader=newBufferedReader(newInputStreamReader(process.getInputStream()));//BufferReader方法可以把一个流(对象)接到另一个流上,从中连续读取内容。

也就是读完一个进程的进程名后接着读取它的进程号。

StringnextLine;

3.6远程端口扫描

主要扫描远端主机给定端口范围的开放情况,可指定ip及端口扫描范围,扫描线程数,线程范围现规定范围为0-200,因为线程数过大会给当前主机造成过大压力,可能造成主机死机。

3.6.1Socket类编程机制

随着计算机技术的发展,现在的操作系统多同时运行多个进程(或线程)。

Socket机制成功的解决了两台主机不同进程之间的通信问题。

下图是一个典型的面向连接的Socket通信机制示意图。

它采用客户服务器模式,由服务器方先建立自己的半相关(建立Socket并将Socket联编到某个端口上),并进入监听状态,同时监听是否有与自己端口相对应的连接请求。

连接是客户方发送的这里户方在建立自己的半相关后,向服务器发起连接(调用方法accept());这样就建立起来一个完整的连接。

该程序则是机制中的客户端,只要知道目的主机的地址,就可以进行端口扫描。

(不考虑防火墙)。

下面介绍两个主机之间通信是如何建立的。

服务器端:

主进程1)创建一个Socket,将其绑定到服务器本地址和一个已知协议端口上。

让该端口保持非连接状态。

2)将该端口设置为被动式。

3)主进程守候在这个指定的端口上,等待收接客户机的连接请求。

4)当有来自客户端的连接请求时,向客户机发送应答并创建一个新的从进程来处理响应。

返回3),5)退出。

从进程:

1)由于接收到连接请求而被创建,即用于连接的Socket。

2)根据用户的连接请求,决定利用该连接与客户机进行交互。

3)交互结束,关闭连接并退出。

客户机端:

1)创建一个用于远程通信的Socket。

代码如下所示:

SockettheTCPsocket;

2)发起一个到服务器进程的主动连接.

theTCPsocket=newSocket(hostAddress,i);hostAddress输入目标主机的IP或域名。

3)利用该连接与服务器进程进行通信。

4)通信结束,关闭连接并退出。

本应用程序就是这个通信机制中的客户端。

theTCPsocket.close();机制如图6所示:

 

 

图6 Socket通信机原理

Socket和ServerSocket类库位于包中。

ServerSocket用于服务器端,Socket是建立网络连接时使用的,本应用程序就是一个客户端。

3.6.2功能详解

连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。

对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。

不管是Socket还是ServerSocket它们的工作都是通

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1