实验五 端口扫描器实验报告(付代码)

合集下载

端口扫描与设计实验报告

端口扫描与设计实验报告

北京理工大学珠海学院课程设计说明书2013—2014学年第1学期题目: 端口扫描器的设计与实现学院:计算机专业班级:计算机科学与技术4班学号: ************/019学生姓名:官广昌黄晨豪指导教师:***成绩:时间: 2013年12月28北京理工大学珠海学院课程设计任务书2013 ~2014 学年第1 学期学生姓名:官广昌黄晨豪专业班级: 11计算机科学与技术4班指导教师:刘玉仙工作部门:计算机学院一、课程设计题目端口扫描器的设计与实现二、课程设计内容对ip端口进行扫描,分析结果。

三、进度安排(1)1-4学时,选定题目、分析需求、理解需求;(2)5-8学时,制定设计方案;(3)9-16学时,编写程序、调试、测试;(4)17-20学时,编写设计报告;(5)21-24学时,答辩。

四、基本要求1.网络安全设计方案具有实用价值;2.根据指导教师给出的题目进行分配,每个题目最多不超过2个人完成。

3.题目可以相同,但参数要求不同,每人必须独立完成。

4、写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。

课程负责人签名:年月日课程设计成绩评定表分工:端口扫描器的设计与实现摘要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。

端口扫描技术是发现安全问题的重要手段之一。

本程序是在Windows系统中使用C语言完成的一个端口扫描程序。

此程序主要完成了ip端口的扫描功能。

扫描能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。

扫描结果以列表的形式直观地展现出来。

通过对扫描结果的分析知道了,有哪些端口是开放的。

关键词:端口扫描 ip端口网络安全 ip扫描目录第一章课程设计的目的 (2)1.1、课题的背景及意义 (2)1.2、端口扫描现状 (2)第二章功能模块与系统结构 (2)第三章相关知识 (3)3.1、端口的基本概念 (3)3.2、常见端口介绍 (4)第四章实验流程 (6)4.1、步骤 (6)4.2、流程图 (6)第五章结果 (7)第六章源程序 (10)参考文献 (19)心得体会 (19)附件 (20)第一章课程设计的目的1.1、课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。

端口扫描报告

端口扫描报告

杭州电子科技大学软件学院网络工程试验报告端口扫描报告09109146王子龙1.端口及端口扫描技术简介 (2)2.对现有端口扫描工具程序的理解 (2)主界面 (3)3.核心代码 (6)4.个人总结 (13)1.端口及端口扫描技术简介根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。

计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。

对应这两种协议的服务提供的端口,也就分为TCP 端口和UDP端口。

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。

主机不只是靠IP地址来区分网络服务,因为IP 地址与网络服务的关系是一对多的关系。

实际上是通过“IP地址+端口号”来区分不同的服务的。

一个端口就是一个潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息。

进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。

在手工进行扫描时,需要熟悉各种命令。

对命令执行后的输出进行分析。

用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。

通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。

2. 对现有端口扫描工具程序的理解该程序是有C++编写的。

C++是一种使用非常广泛的计算机编程语言。

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

该程序能够扫描主机IP的某一个端口,或者是扫描该主机IP某一范围内的端口。

并且提供多次扫描功能。

如果要扫描的端口很多,在扫描过程中可以暂停扫描。

扫描结果在界面的下方显示。

主要显示内容有IP地址、端口号、端口状态、连接次数及备注。

网络安全实验报告[共五篇]

网络安全实验报告[共五篇]

网络安全实验报告[共五篇]第一篇:网络安全实验报告实验一:网络扫描实验【实验目的】了解扫描的基本原理,掌握基本方法,最终巩固主机安全【实验内容】1、学习使用Nmap的使用方法2、学习使用漏洞扫描工具【实验环境】1、硬件 PC机一台。

2、系统配置:操作系统windows XP以上。

【实验步骤】1、端口扫描1)解压并安装ipscan15.zip,扫描本局域网内的主机2)解压nmap-4.00-win32.zip,安装WinPcap运行cmd.exe,熟悉nmap命令(详见“Nmap详解.mht”)。

3)试图做以下扫描:扫描局域网内存活主机,扫描某一台主机或某一个网段的开放端口扫描目标主机的操作系统试图使用Nmap的其他扫描方式,伪源地址、隐蔽扫描等2、漏洞扫描解压X-Scan-v3.3-cn.rar,运行程序xscan_gui.exe,将所有模块选择扫描,扫描本机,或局域网内某一台主机的漏洞【实验背景知识】1、扫描及漏洞扫描原理见第四章黑客攻击技术.ppt2、NMAP使用方法扫描器是帮助你了解自己系统的绝佳助手。

象Windows 2K/XP 这样复杂的操作系统支持应用软件打开数百个端口与其他客户程序或服务器通信,端口扫描是检测服务器上运行了哪些服务和应用、向Internet或其他网络开放了哪些联系通道的一种办法,不仅速度快,而且效果也很不错。

Nmap被开发用于允许系统管理员察看一个大的网络系统有哪些主机以及其上运行何种服务。

它支持多种协议的扫描如UDP,TCP connect(),TCP SYN(half open), ftp proxy(bounce attack),Reverse-ident, ICMP(ping sweep), FIN, ACK sweep,Xmas Tree, SYN sweep,1 和Null扫描。

可以从SCAN TYPES一节中察看相关细节。

Nmap还提供一些实用功能如通过tcp/ip来甄别操作系统类型、秘密扫描、动态延迟和重发、平行扫描、通过并行的PING侦测下属的主机、欺骗扫描、端口过滤探测、直接的RPC扫描、分布扫描、灵活的目标选择以及端口的描述。

端口扫描程序设计(详细的报告+源代码)

端口扫描程序设计(详细的报告+源代码)

五、 考核方式
1. 平时成绩+验收答辩+实验报告; 2. 五级分制。
学生姓名: 指导教师: 2009 年 6月8 日
一、综合实验的目的与要求 1.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程 技术和方法,建立网络编程整体概念,加深对JAVA编程语言的使 用,促进编程能力的提高,同时为网络编程打下一个比较好的基 础。同时对实验的过程要有完全的了解。 2. 要求:熟悉有关定义、概念和实现算法,设计出程序流程框图 和数据结构,编写出完整的源程序,基本功能完善,方便易用,操 作无误。 二、综合实验正文 1.编程语言的选择 针对编写的是端口扫描的程序,所以我选择了JAVA编程,因为要简 单而方便的试验端口扫描的功能。 2.端口扫描实现的功能是:显示某个IP或某段IP的计算机的某一个 或某些端口是否正在工作 2.1 如何选择IP段和端口 创建socket,通过socket的connect方法来连接远程IP地址以及对应的 端口。而我使用的是socket函数来实现端口的扫描和IP地址的选择扫 描。 2.2 如何实现快速扫描端口 通过实现多线程,当一个IP或者一个端口同时分配多个线程进行扫 描,速度会比单线程扫描快许多。
输入主机名文本框publldhostnamenewjtextfilocalhos地址前3位的输入框romip1newjtextfi地址46位的输入框publromip2newjtextfi地址79位的输入框publromip3newjtextfi地址最后4位的输入框publromip4newjtextfi地址最后4位的输入框publipnewjtextfi输入最小端口的输入框publldminportnewjtextfield输入最大端口的输入框publldmaxportnewjtextfield1000输入最大线程数量的输入框publldmaxthreadnewjtextfild100错误提示框publjdialogdlgerrornewjdialogmainjlabeldlginfonewjlabelypenewjlabel扫描类型publjradiobuttonnewjradiobuttonip地址

端口实验报告

端口实验报告

端口实验报告端口实验报告一、实验介绍计算机网络中的端口是指网络通信中的通道,用于区分不同的应用程序或服务。

在本实验中,我们将学习和探索端口的基本概念、分类以及其在网络通信中的作用。

二、端口的基本概念端口号是一个16位的整数,范围从0到65535。

其中,0到1023的端口号被称为“Well-known Ports”(众所周知的端口),用于一些常见的网络服务,如HTTP(端口号80)、FTP(端口号21)等。

1024到49151的端口号被称为“Registered Ports”(注册端口),用于一些已注册但尚未广泛使用的服务。

而49152到65535的端口号则被称为“Dynamic and/or Private Ports”(动态和/或私有端口),用于一些临时的、私有的网络通信。

三、端口的分类根据端口的使用方式和功能,可以将端口分为以下几类:1. 传输层端口传输层端口是指在传输层协议(如TCP和UDP)中使用的端口。

TCP和UDP是两种常见的传输层协议,它们通过使用不同的端口号来实现不同的功能。

TCP端口用于可靠的、面向连接的通信,而UDP端口用于不可靠的、无连接的通信。

2. 服务器端口服务器端口是指在服务器上监听连接请求的端口。

服务器通常会监听一些特定的端口,以便接收客户端的连接请求,并提供相应的服务。

例如,Web服务器通常监听80端口,用于提供HTTP服务;FTP服务器监听21端口,用于提供文件传输服务。

3. 客户端端口客户端端口是指在客户端上用于与服务器进行通信的端口。

当客户端向服务器发起连接请求时,会随机选择一个可用的端口作为源端口,并将该端口与目标服务器的端口进行配对,以建立通信通道。

四、端口的作用端口在网络通信中起到了至关重要的作用。

通过使用不同的端口号,我们可以实现不同的应用程序或服务之间的通信和交互。

端口号的使用使得网络通信更加灵活和高效,不同的应用程序可以同时运行在同一台计算机上,彼此之间不会冲突。

端口扫描程序设计详细的报告+源代码

端口扫描程序设计详细的报告+源代码
//输入主机名文本框
public static JTextField hostname=new JTextField("localhost",8);
//输入ip地址前3位的输入框
public static JTextField fromip1=new JTextField("0",3);
//输入ip地址4~6位的输入框
图1-4
3.5增加的保存及快捷键功能
图1-5
4.扫描的整个过程
4.1填写IP地址192、168、1、100—192、168、1、120
4.2填写端口扫描的范围为1—300
4.3线程数选择为100
4.4扫描结果如下
图1-6
三.端口扫描的主要部分程序如下
import java、net、*;
import java、io、*;
2、要求:熟悉有关定义、概念与实现算法,设计出程序流程框图与数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。
二、综合实验正文
1.编程语言的选择
针对编写的就是端口扫描的程序,所以我选择了JAVA编程,因为要简单而方便的试验端口扫描的功能。
2.端口扫描实现的功能就是:显示某个IP或某段IP的计算机的某一个或某些端口就是否正在工作
网络综合实验
任务书
一、目的与要求
1.性质:设计性实验。
2.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。
3.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术与方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制与调试网络程序的能力。
4.要求:熟悉有关定义、概念与实现算法,设计出程序流程框图与数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

扫描器实验报告

扫描器实验报告

一、实验目的1. 了解扫描器的基本原理和结构。

2. 掌握扫描器的操作方法。

3. 学会使用扫描器进行图像采集和处理。

二、实验原理扫描器是一种将纸质、图片等平面图像转换为数字图像的设备。

它通过光学扫描原理,将图像信息转换成数字信号,然后通过计算机软件进行处理,最终生成数字图像。

扫描器主要由光学系统、机械系统、电路系统和接口组成。

光学系统负责将图像转换为电信号;机械系统负责驱动扫描器的移动;电路系统负责将电信号转换为数字信号;接口负责将数字信号传输到计算机。

三、实验器材1. 扫描仪一台2. 计算机一台3. 扫描软件一套4. 图像采集卡一个5. 电源线、数据线等四、实验步骤1. 连接设备将扫描仪、计算机和图像采集卡连接好,确保连接稳定。

2. 安装驱动程序根据扫描仪型号,在官方网站下载相应的驱动程序,安装到计算机中。

3. 配置扫描软件打开扫描软件,进行以下配置:(1)选择扫描仪:在软件界面中选择对应的扫描仪。

(2)设置扫描分辨率:根据需要选择合适的分辨率,分辨率越高,图像质量越好,但文件大小也越大。

(3)设置扫描区域:根据需要选择扫描区域,可全选或自定义。

(4)设置扫描模式:选择黑白、灰度或彩色模式。

4. 扫描图像将需要扫描的图像放置在扫描仪上,按下扫描按钮,开始扫描。

扫描过程中,确保图像与扫描仪平铺,避免因图像歪斜导致扫描效果不佳。

5. 图像处理扫描完成后,打开图像处理软件,对图像进行以下处理:(1)调整亮度和对比度:使图像更加清晰。

(2)裁剪图像:去除多余部分。

(3)旋转图像:调整图像方向。

(4)保存图像:选择合适的保存格式和路径,保存处理后的图像。

五、实验结果与分析1. 实验结果本次实验成功地将纸质图像转换为数字图像,并进行了简单的图像处理。

扫描得到的图像清晰、色彩还原度高,满足实验要求。

2. 实验分析(1)扫描仪的质量对图像质量有很大影响。

选择性能优良的扫描仪,可以保证图像质量。

(2)扫描分辨率的选择应根据实际需求确定。

实训端口扫描软件实习报告

实训端口扫描软件实习报告

实习报告实训项目:端口扫描软件实习实习时间:2023年2月24日实习地点:XX公司网络实验室一、实习目的通过本次实习,了解端口扫描软件的作用和原理,掌握端口扫描软件的使用方法,提高对网络安全的认识,为公司的网络安全保驾护航。

二、实习内容1. 学习端口扫描软件的基本概念、作用和原理。

2. 学习端口扫描软件的使用方法,包括安装、配置和操作。

3. 进行实际操作,对公司的网络进行端口扫描,分析扫描结果。

4. 根据扫描结果,提出改进网络安全的建议。

三、实习过程1. 学习端口扫描软件的基本概念、作用和原理端口扫描软件是一种网络安全工具,用于扫描目标计算机上的开放端口,以发现可能存在的网络安全风险。

端口是计算机网络通信中,用于区分不同服务或应用程序的逻辑概念。

每个端口都对应着一种服务或应用程序,当端口处于开放状态时,表示相应的服务或应用程序正在运行。

通过端口扫描,可以了解目标计算机上运行的服务,发现可能的安全漏洞,从而采取措施进行防护。

2. 学习端口扫描软件的使用方法在实习过程中,我们使用了XX公司提供的端口扫描软件。

首先,我们需要安装软件,然后根据提示进行配置。

配置包括选择扫描的目标IP地址、端口范围、扫描方式等。

最后,开始扫描,等待扫描完成。

3. 进行实际操作,分析扫描结果根据配置,我们对公司的网络进行了端口扫描。

扫描结果显示,公司网络中存在一些开放端口,其中一些端口对应的服务是已知的安全风险。

我们对扫描结果进行了分析,发现以下问题:(1)部分服务器端的端口安全配置不当,存在被攻击的风险。

(2)部分员工计算机的端口开放,可能存在非法外联的情况。

(3)部分设备的端口处于关闭状态,但未进行安全防护,可能存在潜在风险。

4. 提出改进网络安全的建议针对扫描结果,我们提出了以下建议:(1)加强服务器端口的安全配置,关闭不必要的端口,对于必须开放的端口,采用安全策略进行防护。

(2)对员工计算机进行安全检查,关闭不必要的端口,防止非法外联。

网络安全 网络端口扫描_更正版

网络安全 网络端口扫描_更正版

《计算机网络安全实验》实验报告实验名称:网络端口扫描年级: 2010级专业:网络工程专业班级:网络工程二班姓名:陈绪群学号: 1025111017成绩:指导教师: 卢正添提交报告时间:2013年5月10日一、实验目的掌握使用端口扫描器的技术,了解端口扫描器的原理。

二、实验环境局域网环境,Nmap扫描系统,主机系统为windows XP,被扫描主机为windows 2000(VMware workstation中)。

拓扑图:三、实验步骤与实验结果(1)各种扫描模式与参数①nmap 10.8.12.115②TCP 同步(SYN)端口扫描,(-sS参数) 命令: nmap –sS 10.8.12.115③UDP端口扫描(-sU参数) 命令:nmap –sU 10.8.12.115④Ping扫描(-sP参数) 命令:nmap –sP 10.8.12.115(2)操作系统扫描命令:nmap –O 10.8.12.115(3)更进一步的应用①随机主机扫描:nmap –iR 20②扫描特定的端口范围:nmap –p0-65535 10.8.12.115③长数据显示:nmap -vv 10.8.12.115④nmap –sT –O –oN "E:\\cxq\\test.txt" 10.8.12.115-118(4)图形用户界面操作: nmap -sS 10.8.12.115四、分析与讨论1.描述使用Nmap对系统进行网络端口扫描的过程。

答:Nmap对系统进行网络端口扫描有两种基本的方式:一种是目标端口扫描,扫描特定的端口,另一种是端口扫除,即对所有的可能端口进行扫描。

扫描过程相似,就是向目标主机的端口发送请求数据包,希望建立“连接”,根据目标主机的回应判断其端口是否开放。

2.使用实验验证Nmap实验参数,并分析各自的技术原理和优缺点。

答:-sTTCP connect()扫描:这是最基本的TCP扫描方式。

端口扫描实验报告

端口扫描实验报告

端口扫描实验报告网络端口扫描实验报告姓名:刘俊峰学号:11054114班级:11052411课程:网络攻防技术老师:张旻一、网络端口扫描简介TCP/IP协议在网络层是无连接的,而“端口”,就已经到了传输层。

端口便是计算机与外部通信的途径。

一个端口就是一个潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息。

进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。

在手工进行扫描时,需要熟悉各种命令,对命令执行后的输析出进行分,效率较低。

用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。

通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。

扫描工具根据作用的环境不同可分为:网络漏洞扫描工具和主机漏洞扫描工具。

前者指通过网络检测远程目标网络和主机系统所存在漏洞的扫描工具。

后者指在本机运行的检测本地系统安全漏洞的扫描工具。

本实验主要针对前者。

端口是TCP协议中定义的,TCP协议通过套接字(socket)建立起两台计算机之间的网络连接。

它采用【IP地址:端口号】形式定义,通过套接字中不同的端口号来区别同一台计算机上开启的不同TCP和UDP连接进程。

端口号在0~~65535之间,低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。

这些常见的服务可以划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。

端口与服务进程一一对应,通过扫描开放的端口就可以判断计算机中正在运行的服务进程。

二、实验目的1.了解熟悉MFC及的基本原理和方法。

2.加深对tcp的理解,学习端口扫描技术和,原理熟悉socket编程。

3.通过自己编程实现简单的IP端口扫描器模型。

4.通过端口扫描了解目标主机开放的端口和服务程序。

三、实验环境Windows操作系统VC++6.0开发环境四、实验设计实验原理通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程,如果端口处于侦听状态,那么connect()就可以成功返回,否则这个端口不可用,即没有提供服务。

端口扫描实验

端口扫描实验

端口扫描实验【实验环境】本地主机(WindowsXP)、Windows实验台【实验步骤】本机IP地址为172.20.1.178/16,Windows实验台IP地址为172.20.3.178/16(在实验中应根据具体实验环境进行实验),实验工具WinNmap在实验工具箱中可下载。

不带任何命令行参数运行Nmap,显示命令语法,如图3.5.1-10所示。

图3.5.1-10 不带任何命令行参数运行Nmap扫描类型:主要有以下几种。

-sT:扫描TCP数据包以建立的连接connect()-sS:扫描TCP数据包带有SYN数据的标记-sP:以ping方式进行扫描-sU:以UDP数据包格式进行扫描-sF,-sX,-sN:以Fin,Xmas,Null方式扫描(1)Nmap扫描试验中,由于扫描工具的本身的局限性不能在物理网卡上设置多个ip地址,请确保单IP环境,如下图。

图3.5.1-11(2)nmap –sP 172.20.3.178Nmap给每个扫描到的主机发送一个ICMP echo和一个ACK,主机对任何一种的响应都会被Nmap得到。

可用来检测局域网内有哪些主机正在运行。

运行结果分析:在局域网内有哪些机器正在运行,而且可以显示机器的MAC以及机器的品牌,如图3.5.1-12所示。

图3.5.1-12 nmap –sP 172.20.3.178(3)nmap –sT 172.20.3.178Nmap将使用connect()系统调用打开目标机上相关端口的连接,并完成三次TCP握手。

如图3.5.1-13所示。

图3.5.1-13 nmap –sT 172.20.3.178(4)nmap –sS 172.20.3.178使用半开SYN标记扫描,在一定程度上防止被扫描目标主机识别和记录。

-sS命令将发送一个SYN扫描探测主机或网络。

通过发送一个SYN包(是TCP协议中的第一个包)开始一次SYN的扫描。

任何开放的端口都将有一个SYN|ACK响应。

端口扫描系统实践心得

端口扫描系统实践心得

端⼝扫描系统实践⼼得*本⽂作者:Humou0,本⽂属 FreeBuf 原创奖励计划,未经许可禁⽌转载。

端⼝扫描对任何⼀名⽹络安全从业者来说都不陌⽣,但作为⼀名⼩⽩,在甲⽅做扫描系统时踩了不少坑,在⽹络上找相关资料时没有发现太多相关的⽂章,于是想写下这篇⽂章和⼤家分享⼀下代码,顺便讨教⼀下主机存活判断和指纹识别的问题,欢迎⼤佬们批评和指正。

0×00 ⽬的对于外⽹,能够监控对外开放端⼝情况,并及时的发现向外暴露的⾼危端⼝,以便安全⼈员进⾏响应处理。

对于内⽹,⽇常的端⼝扫描以及指纹识别,不仅能够帮助梳理公司资产,并且能够帮助进⾏后续内⽹的漏洞扫描。

0×01 存活主机判断开始做端⼝扫描时,所考虑的第⼀步便是存活主机判断。

最初的设想便是使⽤nmap的-sP参数,对IP地址进⾏存活判断。

代码如下:def ip_alive_check(ip_str):cmd = "/usr/bin/nmap -sP "+ip_stroutput = os.popen(cmd).readlines()flag = Falsefor line in list(output):if not line:continueif str(line).lower().find("1 host up") >= 0:flag = Truebreakreturn flag但随后便发现这个办法存在问题,引⽤Nmap官⽅⽂档如下:-sP选项在默认情况下,发送⼀个ICMP回声请求和⼀个TCP报⽂到80端⼝。

如果⾮特权⽤户执⾏,就发送⼀个SYN报⽂ (⽤connect()系统调⽤)到⽬标机的80端⼝。

当特权⽤户扫描局域⽹上的⽬标机时,会发送ARP请求(-PR),,除⾮使⽤了–send-ip选项。

-sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使⽤以达到更⼤的灵活性。

⼀旦使⽤了任何探测类型和端⼝选项,默认的探测(ACK和回应请求)就被覆盖了。

端口扫描技术调查报告

端口扫描技术调查报告

端口扫描技术调查报告一.端口扫描技术介绍根据扫描所采用的类型可以分为TCP扫描、UDP扫描、ICMP扫描等扫描。

☆TCP扫描TCP是面向连接的协议,一个成功的TCP连接一般都会完成完整的三次握手过程,一般的网络编程接口都会对这个过程进行封装,所以实现起来也就没那么难,但对方很容易查出来,高级TCP扫描也就是完成一个非正常的三次握手,或是根本就没有完成整个三次握手,但此时,黑客己从其中获得了必要的信息。

◇TCP CONNECT扫描这是最基木的TCP扫描。

其基本原理是直接使用完整的三次握手,这项技术在几乎具有网络编程能力的语言里都有体现,一般是调用由操作系统提供的CONNECT函数。

这项扫描技术的一个最大的优点是,你不需要任何权限。

因为它是正常的连接建立过程,系统中的任何用户都有权利使用这个调用。

它的缺点是速度慢,如果对每个日标端口以线性的方式使用单独的CONNECT调用,那么将会花费相当长的时间,在多线程的操作系统中可以通过同时打开多个套接字进行扫描,唯一的缺点是:这种方法很容易被对方发觉,或是被对方的防火墙过滤掉。

目标主机的日志文件也会记录下这一连串的连接和连接出错的服务消息,并且能很快的使它关闭。

比如TCP Wrapper可以对连接请求进行控制,能够阻止来自不明主机的全连接。

◇TCP SYN扫描这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。

扫描程序发送的是一个SYN数据包,好像准备打开一个实际的连接并等待反应一样( 参考TCP的三次握手建立一个TCP连接的过程) 。

一个SYN|ACK的返回信息表示端口处于侦听状态。

一个RST包返回,表示端口没有处于侦听态。

如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。

这种扫描技术的优点在于一般不会在日标计算机上留下记录,有的办法即使在用在netstart命令上也根本显示不出来。

但这种方法的一个缺点是,必须要有root权限才能建立自己的SYN数据包。

端口扫描程序设计(详细的报告+源代码)

端口扫描程序设计(详细的报告+源代码)

搜集概括真验之阳早格格创做任务书籍一、手段与央供1.本量:安排性真验.2.任务:安排并真止一个端心扫描步调,检测某个IP大概某段IP的估计机的端心处事情况.3.手段:加深对付课堂道授知识的明白,流利掌握基础的搜集编程技能战要领,建坐搜集编程真足观念,使得教死发端具备钻研、安排、体例战调试搜集步调的本领.4.央供:认识有闭定义、观念战真止算法,安排出步调过程框图战数据结构,编写出完备的源步调,基础功能完备,便当易用,支配无误.5.教死央供人数:1人.两、主要真量1.编写一个端心扫描步调,不妨隐现某个IP大概某段IP 的估计机的某一个大概某些端心是可正正在处事.基础处事历程如下:(1) 设定佳一定的端心扫描范畴;(2) 设定每个端心扫描的次数,果为有大概有的端心一次扫描大概短亨;(3) 创制socket,通过socket的connect要领去对接近程IP天面以及对付应的端心;(4) 如果返回false,表示端心不开搁,可则端心开搁.三、进度计划四、安排成果央供1.完毕确定的真验任务,保量保量;2.完毕概括真验报告,央供要领典型,真量简直而翔真,应体现自己所干的处事,注沉对付真验思路的归纳战对付问题办理历程的归纳.五、考核办法1.通常结果+查支问辩+真验报告;2.五级分制.教死姓名:指挥西席:2009 年 6月8 日一、概括真验的手段与央供1.手段:加深对付课堂道授知识的明白,流利掌握基础的搜集编程技能战要领,建坐搜集编程真足观念,加深对付JA V A编程谈话的使用,促进编程本领的普及,共时为搜集编程挨下一个比较佳的前提.共时对付真验的历程要有真足的相识.2.央供:认识有闭定义、观念战真止算法,安排出步调过程框图战数据结构,编写出完备的源步调,基础功能完备,便当易用,支配无误.两、概括真验正文1.编程谈话的采用针对付编写的是端心扫描的步调,所以尔采用了JA V A编程,果为要简朴而便当的考查端心扫描的功能.2.端心扫描真止的功能是:隐现某个IP大概某段IP的估计机的某一个大概某些端心是可正正在处事2.1 怎么样采用IP段战端心创制socket,通过socket的connect要领去对接近程IP天面以及对付应的端心.而尔使用的是socket函数去真止端心的扫描战IP天面的采用扫描.2.2 怎么样真止赶快扫描端心通过真止多线程,当一个IP大概者一个端心共时调配多个线程举止扫描,速度会比单线程扫描快许多.2.3 隐现扫描截止不妨正在使用JA V A编写的时间,不妨通过使用JScrollPane控件真止隐现截止.2.4 真止央供功能之余好化中瞅3.创制应用步调界里3.1 建坐主窗体,“JA V A端心扫描器”图1-13.2 IP天面的输进部分图1-23.3 端心部分,其中包罗指定的端心战指定扫描的端心范畴图1-33.4 多线程的真止战延时的统制部分图1-43.5 减少的保存及快速键功能图1-54.扫描的所有历程4.1 挖写IP天面—4.2 挖写端心扫描的范畴为1—3004.3 线程数采用为1004.4 扫描截止如下图1-6三.端心扫描的主要部分步调如下import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;/**真止扫描的主体步调*/public class ThreadScan{public static JFrame main=new JFrame("JA V A端心扫描器");//隐现扫描截止public static JTextArea Result=new JTextArea("",4,40);//滑动条里板publicstaticJScrollPaneresultPane=newJScrollPane(Result,JScroll Pane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPa ne.HORIZONTAL_SCROLLBAR_AS_NEEDED;//输进主机名文本框public static JTextField hostname=newJTextField("localhost",8);//输进ip天面前3位的输进框public static JTextField fromip1=new JTextField("0",3);//输进ip天面4~6位的输进框public static JTextField fromip2=new JTextField("0",3);//输进ip天面7~9位的输进框public static JTextField fromip3=new JTextField("0",3);//输进起初ip天面末尾4位的输进框public static JTextField fromip4=new JTextField("0",3);//输进目标ip天面末尾4位的输进框public static JTextField toip=new JTextField("0",3);//输进最小端心的输进框public static JTextField minPort=new JTextField("0",4);//输进最大端心的输进框public static JTextField maxPort=new JTextField("1000",4);//输进最大线程数量的输进框public static JTextField maxThread=new JTextField("100",3);//过得提示框public static JDialog DLGError=new JDialog(main,"过得!");public static JLabel DLGINFO=new JLabel("");public static JLabel type=new JLabel("请采用:");//扫描典型public static JRadioButton radioIp = new JRadioButton("IP天面:");public static JRadioButton radioHost = new JRadioButton("主机名:",true);//单选框组public static ButtonGroup group = new ButtonGroup();public static JLabel P1=new JLabel("端心范畴:");public static JLabel P2=new JLabel("~");public static JLabel P3=new JLabel("~");public static JLabel Pdot1 = new JLabel(".");public static JLabel Pdot2 = new JLabel(".");public static JLabel Pdot3 = new JLabel(".");public static JLabel TNUM=new JLabel("线程数:");public static JLabel RST=new JLabel("扫描截止: ");public static JLabel con=new JLabel(" ");//定义按钮public static JButton OK = new JButton("决定");public static JButton Submit = new JButton("开初扫描");public static JButton Cancel = new JButton("退出");public static JButton saveButton = new JButton("保存扫描截止");//菜单栏public static JMenuBar myBar = new JMenuBar();public static JMenu myMenu = new JMenu("文献(F)");public static JMenuItem saveItem = new JMenuItem("保存扫描截止(S)");public static JMenuItem exitItem = new JMenuItem("退出(Q)");public static void main(String[] args){main.setSize(500,400);main.setLocation(300,300);main.setResizable(false);main.setLayout(new GridBagLayout());main.setDefaultClo搜索引擎劣化peration(JFrame.EXIT_ON_CLOSE);DLGError.setSize(300,100);DLGError.setLocation(400,400);//增加“菜单栏”myMenu.add(saveItem);myMenu.add(exitItem);myBar.add(myMenu);main.setJMenuBar(myBar);//树坐热键myMenu.setMnemonic('F');saveItem.setMnemonic ('S');//为“另存为”组件树坐快速键为ctrl+s (KeyEvent.VK_S,InputEvent.CTRL_MASK));exitItem.setMnemonic('Q');(KeyEvent.VK_E,InputEvent.CTRL_MASK));//采与表格包型筹备Container mPanel = main.getContentPane();GridBagConstraints c = new GridBagConstraints();c.insets = new Insets(10,0,0,10);c.gridx = 0;c.gridy = 0;c.gridwidth = 10;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(type,c);group.add(radioIp);group.add(radioHost);c.gridx = 0;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(radioIp,c);c.gridx = 1;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(fromip1,c);c.gridx = 2;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(Pdot1,c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip2,c);c.gridx = 4;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(Pdot2,c);c.gridx = 5;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip3,c);c.gridx = 6;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(Pdot3,c);c.gridx = 7;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip4,c);c.gridx = 8;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(P2,c);c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(toip,c);c.gridx = 0;c.gridy = 2;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(radioHost,c);c.gridx = 1;c.gridy = 2;c.gridwidth = 3;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(hostname,c);c.gridx = 0;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(P1,c);c.gridx = 1;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(minPort,c);c.gridx = 2;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(P3,c);c.gridx = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(maxPort,c);c.gridx = 0;c.gridy = 4;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(TNUM,c);c.gridx = 1;c.gridy = 4;c.gridwidth = 3;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(maxThread,c);c.gridx = 0;c.gridy = 5;c.gridwidth = 3;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER; mPanel.add(Submit,c);c.gridx = 6;c.gridy = 5;c.gridwidth = 4;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER; mPanel.add(Cancel,c);c.gridx = 0;c.gridy = 6;c.gridwidth = 10;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER; mPanel.add(RST,c);//树坐文本天区不妨换止Result.setLineWrap(true);//树坐文本天区不可编写Result.setEditable(false);c.gridx = 0;c.gridy = 7;c.gridwidth = 10;c.gridheight = 4;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER;mPanel.add(resultPane,c);Container dPanel = DLGError.getContentPane();dPanel.setLayout(newFlowLayout(FlowLayout.CENTER));dPanel.add(DLGINFO);dPanel.add(OK);Submit.addActionListener(new SubmitAction());Cancel.addActionListener(new CancleAction());OK.addActionListener(new OKAction());//真止退出功能exitItem.addActionListener(newjava.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent e) {System.exit(0);}});//真止助闲功能saveButton.addActionListener(newjava.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent e) {JFileChooser fc=new JFileChooser();int returnVal=fc.showSaveDialog(null);//面打“保存”if(returnVal == 0){File saveFile=fc.getSelectedFile();try {FileWriter writeOut = new FileWriter(saveFile);writeOut.write(ThreadScan.Result.getText());writeOut.close();}catch (IOException ex) {System.out.println("保存波折");}}//面打“与消”elsereturn;}});main.setVisible(true);}}/**真止“与消”功能*退出步调*/class CancleAction implements ActionListener{public void actionPerformed (ActionEvent e){ System.exit(0);}}/**真止“决定”功能*完毕扫描*/class SubmitAction implements ActionListener{public void actionPerformed (ActionEvent a){int minPort;int maxPort;int maxThread;int ip1 = 0;int ip2 = 0;int ip3 = 0;int ipstart = 0;int ipend = 0;String ipaddress = "";String hostname = "";ThreadScan.Result.setText("");//将"决定"按钮树坐成为不可用if(ThreadScan.Submit.isEnabled()){ThreadScan.Submit.setEnabled(false);}/**推断搜索的典型*依照ip天面扫描:type = 0*依照主机称呼扫描:type = 1*/if(ThreadScan.radioIp.isSelected()){TCPThread.type = 0;//推断ip的前3位是可为int型try{ip1=Integer.parseInt(ThreadScan.fromip1.getText());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的ip!");ThreadScan.DLGError.setVisible(true);return;}//推断ip的4~6位是可为int型try{ip2=Integer.parseInt(ThreadScan.fromip2.getText());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的ip!");ThreadScan.DLGError.setVisible(true);return;}//推断ip的7~9位是可为int型try{ip3=Integer.parseInt(ThreadScan.fromip3.getText());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的ip!");ThreadScan.DLGError.setVisible(true);return;}//推断起初ip的末尾4位是可为int型try{ipstart=Integer.parseInt(ThreadScan.fromip4.getText());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的ip!");ThreadScan.DLGError.setVisible(true);return;}//推断目标ip的末尾4位是可为int型try{ipend=Integer.parseInt(ThreadScan.toip.getText());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的目标ip!");ThreadScan.DLGError.setVisible(true);return;}//推断起初ip是可精确//推断条件:大于0且小于等于255if(ip1<0 || ip1>255||ip2<0 || ip2>255||ip3<0 || ip3>255||ipstart<0 || ipstart>255){ThreadScan.DLGINFO.setText(" ip天面为0-255的整数! ");ThreadScan.DLGError.setVisible(true);return;}else{TCPThread.ip1 = ip1;TCPThread.ip2 = ip2;TCPThread.ip3 = ip3;TCPThread.ipstart = ipstart;}//推断目标ip是可精确//推断条件:大于0且小于等于255if(ipend<0 || ipend>255){FO.setText("目标ip天面为0-255的整数! ");ThreadScan.DLGError.setVisible(true);return;}else{TCPThread.ipend = ipend;}ipaddress = "" + ip1 + ip2 + ip3 + ipstart;/**推断ip天面的灵验性*/try{TCPThread.hostAddress=InetAddress.getByName(ipaddress);}catch(UnknownHostException e){ThreadScan.DLGINFO.setText(" 过得的IP大概天面不可达! ");ThreadScan.DLGError.setVisible(true);return;}}//根据主机名举止端心扫描if(ThreadScan.radioHost.isSelected()){TCPThread.type = 1;/**推断主机称呼的灵验性*/try{TCPThread.hostAddress=InetAddress.getByName(Thread Scan.hostname.getText());}catch(UnknownHostException e){ThreadScan.DLGINFO.setText("过得的域名大概天面不可达! ");ThreadScan.DLGError.setVisible(true);return;}}/**推断端心号的灵验性*/try{minPort=Integer.parseInt(ThreadScan.minPort.getText());maxPort=Integer.parseInt(ThreadScan.maxPort.getText());maxThread=Integer.parseInt(ThreadScan.maxThread.getT ext());}catch(NumberFormatException e){ThreadScan.DLGINFO.setText("过得的端心号大概线程数!端心号战线程数必须为整数!");ThreadScan.DLGError.setVisible(true);return;}/**推断最小端心号的灵验范畴*推断条件:大于0且小于65535,最大端心应大于最小端心*/if(minPort<0 || minPort>65535 || minPort>maxPort){ThreadScan.DLGINFO.setText("最小端心必须是0-65535而且小于最大端心的整数!");ThreadScan.DLGError.setVisible(true);return;}else{TCPThread.MIN_port=minPort;}/**推断最大端心号的灵验范畴*推断条件:大于0且小于65535,最大端心应大于最小端心*/if(maxPort<0 || maxPort>65535 || maxPort<minPort){ThreadScan.DLGINFO.setText("最大端心必须是0-65535而且大于最小端心的整数!");ThreadScan.DLGError.setVisible(true);return;}else{TCPThread.MAX_port=maxPort;}/**推断线程数量的灵验范畴*推断条件:大于1且小于200*/if(maxThread<1 || maxThread>200){FO.setText("线程数为1-200的整数! ");ThreadScan.DLGError.setVisible(true);return;}ThreadScan.Result.append("线程数"+ThreadScan.maxThread.getText()+"\n");//开用线程for(int i=0;i<maxThread;i++){new TCPThread("T" + i,i).start();}}}/**真止过得提示框中的“决定”按钮功能*/class OKAction implements ActionListener{public void actionPerformed (ActionEvent e){ ThreadScan.DLGError.dispose();}}多线程类文献:import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class TCPThread extends Thread{public static InetAddress hostAddress;//最小的端心号public static int MIN_port;//最大的端心号public static int MAX_port;//线程总数private int threadnum;//查询办法:0为ip;1为主机名public static int type;//ip天面前3位public static int ip1;//ip天面4~6位public static int ip2;//ip天面7~9位public static int ip3;//起初ip天面的末尾4位public static int ipstart;//中断ip天面的末尾4位public static int ipend;//完备的ip天面public static String ipAll;//扫描的主机称呼大概ipString hostname = "";//端心的类型String porttype = "0";/**构制函数*/public TCPThread(String name,int threadnum){ super(name);this.threadnum = threadnum;}/**运止函数*/public void run() {//ip天面int h = 0;//端心号int i = 0;Socket theTCPsocket;//根据ip天面举止扫描if(type == 0){//ip天面循环扫描for(h = ipstart; h <=ipend; h++){//组成完备的ip天面ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;hostname = ipAll;try{//正在给定主机名的情况下决定主机的 IP 天面hostAddress=InetAddress.getByName(ipAll);}catch(UnknownHostException e){}//分歧的端心循环扫描for (i = MIN_port+threadnum; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText());i += Integer.parseInt(ThreadScan.maxThread.getText())){try{theTCPsocket=newSocket(hostAddress,i);theTCPsocket.close();ThreadScan.Result.append(hostname+":"+i);//推断端心的类型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)";break;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;}//端心不特定类型if(porttype.equals("0")){ ThreadScan.Result.append("\n");}else{ThreadScan.Result.append(":"+porttype+"\n");}}catch (IOException e){}}}//扫描完毕后,隐现扫描完毕,并将“决定”按钮树坐为可用if(i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getTex t())){ThreadScan.Result.append("\n"+"扫描完毕...");//将"决定"按钮树坐成为可用if(!ThreadScan.Submit.isEnabled()){ ThreadScan.Submit.setEnabled(true);}}}//依照主机名举止端心扫描if(type == 1){for (i = MIN_port+threadnum; i < MAX_port+Integer.parseInt(ThreadScan.maxThread.getText());i += Integer.parseInt(ThreadScan.maxThread.getText())){try{theTCPsocket=newSocket(hostAddress,i);theTCPsocket.close();ThreadScan.Result.append(" "+i);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)";break;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;}//端心不特定类型if(porttype.equals("0")){ ThreadScan.Result.append("\n");}else{ThreadScan.Result.append(":"+porttype+"\n");}}catch (IOException e){}}//扫描完毕后,隐现扫描完毕,并将【决定】按钮树坐为可用if(i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getTex t())){ThreadScan.Result.append("\n"+"扫描完毕...");//将【决定】按钮树坐成为可用if(!ThreadScan.Submit.isEnabled()){ ThreadScan.Submit.setEnabled(true);}}}}}四、概括真验归纳大概论断1.通过本次真验,尔对付于JA VA编程又有了一个新的认识2.相识了IP天面扫描战端心扫描的本理.3.通过办理编程逢到的问题,普及编程火仄,聚集体味.。

端口扫描与设计实验报告

端口扫描与设计实验报告

北京理工大学珠海学院课程设计说明书2013—2014学年第1学期题目: 端口扫描器的设计与实现学院:计算机专业班级:计算机科学与技术4班学号: ************/019学生姓名:官广昌黄晨豪指导教师:***成绩:时间: 2013年12月28北京理工大学珠海学院课程设计任务书2013 ~2014 学年第1 学期学生姓名:官广昌黄晨豪专业班级: 11计算机科学与技术4班指导教师:刘玉仙工作部门:计算机学院一、课程设计题目端口扫描器的设计与实现二、课程设计内容对ip端口进行扫描,分析结果。

三、进度安排(1)1-4学时,选定题目、分析需求、理解需求;(2)5-8学时,制定设计方案;(3)9-16学时,编写程序、调试、测试;(4)17-20学时,编写设计报告;(5)21-24学时,答辩。

四、基本要求1.网络安全设计方案具有实用价值;2.根据指导教师给出的题目进行分配,每个题目最多不超过2个人完成。

3.题目可以相同,但参数要求不同,每人必须独立完成。

4、写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。

课程负责人签名:年月日课程设计成绩评定表分工:端口扫描器的设计与实现摘要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。

端口扫描技术是发现安全问题的重要手段之一。

本程序是在Windows系统中使用C语言完成的一个端口扫描程序。

此程序主要完成了ip端口的扫描功能。

扫描能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。

扫描结果以列表的形式直观地展现出来。

通过对扫描结果的分析知道了,有哪些端口是开放的。

关键词:端口扫描 ip端口网络安全 ip扫描目录第一章课程设计的目的 (2)1.1、课题的背景及意义 (2)1.2、端口扫描现状 (2)第二章功能模块与系统结构 (2)第三章相关知识 (3)3.1、端口的基本概念 (3)3.2、常见端口介绍 (4)第四章实验流程 (6)4.1、步骤 (6)4.2、流程图 (6)第五章结果 (7)第六章源程序 (10)参考文献 (19)心得体会 (19)附件 (20)第一章课程设计的目的1.1、课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。

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

实验5:端口扫描器的设计与实现姓名:学号:专业年级:(一)实验目的和内容:目的:加深对TCP的理解,学习端口扫描技术和原理,熟悉socket编程。

内容:实现一个扫描器,使用TCP connect进行端口扫描,并对扫描结果进行记录。

(二)课程设计要求:Windows或Linux环境下,程序在单机上运行;使用端口扫描器对一台主机进行扫描,并显示出结果;编程语言不限;提供友好的用户界面。

(三)端口扫描技术:“端口”是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。

“端口”是由计算机的通信协议TCP/IP协议定义的。

其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。

具体来说,就是用[IP:端口]来定位一台主机中的进程。

计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。

端口与进程是一一对应的,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。

(四)扫描端口的目的:端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。

•判断目标主机上开放了哪些服务;•判断目标主机的操作系统。

如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵。

(五)端口的分类:端口是一个16 bit的地址,用端口号进行标识不同的作用。

端口一般分为两类。

•熟知端口号(公认端口号):由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023。

•一般端口号:用来随时分配给请求通信的客户进程。

(六)扫描原理的基础知识:TCP/IP模型四层结构TCP与UDP协议TCP报文结构TCP连接和释放过程(七)TCP/IP模型四层结构:(八)TCP与UDP协议:Internet的网络通信大多是建立在这两个协议之上的,各个主机遵循着TCP/IP协议封装数据包进行通信。

传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。

TCP具有完善的错误检测与恢复、顺序控制和流量控制等功能。

注重可靠性的场合一般使用TCP协议,例如FTP、Telnet。

用户数据报协议UDP(User Datagram Protocol):UDP在传送数据之前不需要先建立连接。

远地主机的运输层在收到UDP数据报后,不需要给出任何确认。

广泛应用于只需一次的C/S模式的请求-应答查询,或者要求提供高效率数据传输的场合。

注重实时性、传输率、吞吐量的场合一般使用UDP,如QQ。

(九)TCP connect扫描:实现原理:通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程。

如果端口处于侦听状态,那么connect()就能成功返回。

否则,这个端口不可用,即没有提供服务。

优点:稳定可靠,不需要特殊的权限。

缺点:扫描方式不隐蔽,服务器日志会记录下大量密集的连接和错误记录,并容易被防火墙发现和屏蔽。

实验设计流程:1. 原理概述通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程。

如果端口处于侦听状态,那么connect()就能成功返回。

否则,这个端口不可用,即没有提供服务。

2. 运行环境本扫描软件用java语言开发,可稳定的运行在linux和windows环境下。

3.基本设计思路用户界面:使用java里面的swing包来开发用户界面;端口扫描:使用socket函数connect()连接目标计算机来判定是否目标计算机开放了要测试的端口;4..功能模块设计本软件只有一个功能模块,就是是指定主机的端口扫描。

5.程序流程及主要算法核心算法是TCP 的连接函数Socket socket = new Socket(host,port); //建立套接字if(socket.isConnected()) //判断端口号是否开放{jta.append("port: "+port+" is open !\n");list.add(String.valueOf(port));.............6.程序使用说明(1)运行程序(2)输入IP地址、开始端口号、技术端口号,点击“开始扫描”(3)可以看到开放端口号与未开放端口号,得到如下结果:7.程序分析与总结本程序使用java语言开发,可以稳定的运行在windows和linux系统下,不过程序是单线程的扫描起来比较慢。

附录- 源程序代码文件PortScanWind.javaimport java.awt.Color;import java.awt.Font;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import .InetAddress;import .Socket;import .UnknownHostException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class PortScanWind implements ActionListener,Runnable{private JFrame wind; //构建窗口private JTextField jtf, jtf2, jtf3; //3个文本private JLabel[] label = new JLabel[6]; //6个标签private int startPort, endPort; //端口private InetAddress host; //取得本机IPprivate JButton btn,stop;// 点击事件private JTextArea jta,jta2; //2个显示纯文本的多行区域private JScrollPane jspane,jspane2; //滚动条private Thread ps;private List<String> list;public PortScanWind() {wind = new JFrame("端口扫描程序");wind.setSize(400, 600);jta = new JTextArea(10,10);jta2 = new JTextArea(10,10);jspane = new JScrollPane(jta);jspane2 = new JScrollPane(jta2);//两个竖直滚动条list = new ArrayList<String>();jtf = new JTextField(20);jtf2 = new JTextField(20);jtf3 = new JTextField(20);//20个字符label[0] = new JLabel("端口扫描程序");label[1] = new JLabel("主机地址:");label[2] = new JLabel("开始端口号:");label[3] = new JLabel("结束端口号:");label[4] = new JLabel("开放端口:");label[5] = new JLabel("未开放端口:");btn = new JButton("开始扫描");stop = new JButton("停止扫描");ps =new Thread(this);label[0].setBounds(100, 35, 400, 40);//(X,Y,宽,高)端口扫描程序label[0].setFont(new Font("微软雅黑", Font.BOLD, 32));label[0].setForeground(Color.BLACK);label[1].setBounds(30, 100, 300, 30);//主机地址:jtf.setBounds(150, 100, 200, 30);label[1].setForeground(Color.BLUE); //蓝色label[2].setBounds(30, 150, 300, 30);//开始端口号:jtf2.setBounds(150, 150, 200, 30);label[2].setForeground(Color.BLUE);label[3].setBounds(30, 200, 300, 30);//结束端口号:jtf3.setBounds(150, 200, 200, 30);label[3].setForeground(Color.BLUE);label[4].setBounds(30,280,200,30);//开放端口:label[5].setBounds(220,280,200,30);//未开放端口:label[4].setForeground(Color.BLUE);label[5].setForeground(Color.BLUE);btn.setBounds(90, 250, 100, 30);//开始扫描btn.addActionListener(this);stop.setBounds(220,250,100,30);//停止扫描stop.addActionListener(this);stop.setEnabled(false);jspane.setBounds(30, 310, 150,230);//结果显示jspane2.setBounds(220,310,150,230);wind.setLayout(null);for(int i=0;i<6;i++){wind.add(label[i]);}wind.add(jtf);wind.add(jtf2);wind.add(jtf3);wind.add(btn);wind.add(jspane);wind.add(stop);wind.add(jspane2);wind.setResizable(false);wind.setLocationRelativeTo(null);wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);wind.setVisible(true);}public static void main(String[] args) {new PortScanWind();}@SuppressWarnings("deprecation")@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==btn){jta.setText("");jta2.setText("");stop.setEnabled(true);//获取用户输入的地址和端口号String ip=jtf.getText();String sport = jtf2.getText();String eport = jtf3.getText();//对用户的输入进行验证if(ip.equals("")||ip==null){JOptionPane.showMessageDialog(wind, "请输入主机地址!");return ;}else{try {host =InetAddress.getByName(ip);} catch (UnknownHostException e1) {JOptionPane.showMessageDialog(wind, "请输入有效的主机地址!");System.out.println("host初始化失败");return;//e1.printStackTrace();}}if(sport.equals("")||sport==null){JOptionPane.showMessageDialog(wind, "请输入开始扫描的端口号!");return ;}else{startPort = Integer.parseInt(sport);}if(eport.equals("")||eport==null){JOptionPane.showMessageDialog(wind, "请输入结束扫描的端口号!");return ;}else{endPort = Integer.parseInt(eport);if(endPort<startPort){JOptionPane.showMessageDialog(wind, "您输入的结束端口号太小,请重新输入!");return ;}}//jta.append("开始扫描端口了。

相关文档
最新文档