端口扫描器的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与工程学院

课程设计报告

题目全称:

课程:

学生学号:班号:姓名:

指导老师:职称:

指导老师评语:

签字:课程设计成绩:

前言

网络中的每一台计算机如同一座城堡,在这些城堡中,有的对外完全开放,有的却是紧锁城门。入侵者们是如何找到,并打开它们的城门的呢?这些城门究竟通向城堡的何处呢?在网络技术中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。一般来说,扫描端口有如下目的:

·判断目标主机上开放了哪些服务;

·判断目标主机的操作系统;

如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵,本课程设计将会通过用JAVA语言实现一个小的端口扫描软件,详细描述端口扫描的原理,分析端口扫描所涉及的问题,以便更加清楚地了解入侵者如何扫描目标主机的端口,同时掌握如何确保本机的安全性,为将来设计更为安全的系统打下牢固基础。

目录

一、网络基础知识 (4)

1、端口的基本概念 (4)

2、端口的分类 (4)

二、端口扫描的基本原理 (4)

1、基本原理 (4)

2、基于JA V A语言实现的核心代码 (5)

三、端口扫描器视图 (6)

1、工作窗口 (6)

2、异常窗口 (6)

3、窗口核心代码 (6)

四、多线程快速扫描 (7)

1、多线程机制 (7)

2、多线程核心代码 (8)

五、用户使用方法 (9)

1、页面说明 (9)

2、按主机名扫描 (9)

3、按IP地址扫描 (9)

六、常用端口 (9)

七、异常检测 (10)

结语 (13)

一、网络基础知识

1、端口的基本概念

“端口”在计算机网络领域中是个非常重要的概念。它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。如果有需要的话,一台计算机中可以有上万个端口。

端口是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用IP端口来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向A端口就可以实现通信了。

可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。

2、端口的分类

端口是一个16 bit的地址,用端口号进行标识不同作用的端口,参见表2-2和表2-3。端口一般分为两类。

■熟知端口号:范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP服务,80端口分配给HTTP 服务,135端口分配给RPC服务等等

■动态端口号:动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如8080端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。

二、端口扫描的基本原理

1、基本原理

端口扫描的原理其实非常简单,只是简单的利用JA V A提供库函数Socket进

行调用,与每一个感兴趣的目标计算机的端口进行连接。如果对方端口处于监听状态,那么连接就能成功。否则,这个端口不能用,既没有提供服务。这个技术的一个最大的优点是,不需要任何权限,系统中的任何用户都有权利使用这个调用。

引入多线程机制,利用多线程扫描的好处就是速度快,如果对每个目标端口以线性的方式使用单独的连接调用,那么将会花费相当长的时间。多线程同时打开多个套接字,从而加速扫描。在本设计中用户可以自定义线程的个数。此处用户还可以自定义扫描方式。

2、基于JAVA语言实现的核心代码

//在多线程的控制下,利用for循环对端口逐一扫描

for (i =XXXXXX; i

try{

theTCPsocket=new Socket(hostAddress,i);

theTCPsocket.close();

//判断端口的类别

switch(i){

case 21:

……

//对相应开放端口识别。

}

//将开放端口内容添加到显示区域,并加锁使各处同步关系。

synchronized (ThreadScan.Result) {

ThreadScan.Result.append(" "+i);

ThreadScan.Result.append(":"+porttype+"\n");

}

//对相应开放端口和没有开放即连接失败的端口作记录,放入显示区。

catch (IOException e){

//同时也对程序加锁防止出现序。

synchronized (ThreadScan.ResultAll) {

//将所有端口内容添加到显示区域

ThreadScan.ResultAll.append(" "+i);

ThreadScan.ResultAll.append(":Closed"+"\n");

}

}

}

相关文档
最新文档