主机端口扫描程序设计

合集下载

TCP端口的高级扫描方法及实现

TCP端口的高级扫描方法及实现

表 1 目标主机不同设置情况下的扫描结果1.引言由于每一个端口都对应了相应的服务, 支持 IP_HDRINCL 选项的设置。

扫描程序界面如图 1 所示。

TCP Connect()扫描由于不需 要 使 用 原 始 套 接 字 实 现 , 需单 独构造一个扫描线程实现, 其扫描数据包的发送过程为: 声明一 个套接字, 设置套接字选项, 设置套接字为非阻塞, 调用 connect 所以某一端口开放 也就意味着其对应的服务也在运行。

利用端口扫描的结果, 我们 可以掌握主机的运行状况, 帮助我们判断有没有后门程序在运 行, 关闭不需要的服务等提供条件。

当然, 黑客通过端口扫描也 可以发现系统的弱点, 为进一步进行攻击提供条件。

本文使用 V C6.0 作为编程工具, 在 Windows2000 平台下, 使 用 Windows 原始套接字实现带有特殊标志字段数据包的产生、 发送, 并实现对目标主机响应数据包的嗅探。

利用数据包嗅探过 程分析俘获到的响应数据包, 得到 TCP 数据单元头部的六个 1 位标志字段的内容。

通过对已知目标主机的端口状态及其响应 的分析, 进而得到一些规律, 应用这些规律可以进一步帮助我们判断目标主机端口是否开放。

2. TCP 端口扫描原理 2.1 TCP 实现原理 函数。

该扫描过程主要应用了 TCP Connect () 函数实现, connect 函数返回值判断目标端口是否开放。

根据 原始套接字扫描是一种比较复杂的扫描过程, 需要手动设 置 TCP 和 IP 的 头 部 字 段 。

Windows 系统 下 Windows2000 或 WindowsXP/S erver 2003 支持原始套接字。

构造并发送原始套接 字扫描过程如下: 声明一个原始套接字, 设置 IP_HDRINCL 选项 以构造 TCP 和 IP 的头部字段, 填充套接字 IP 首部( 在这里将目 标主机 IP 填入) , 填充 TCP 首部( 在这里将目标主机端口填入) , 计算校验和, 发送数据包。

基于Windows2000的端口扫描系统设计和实现

基于Windows2000的端口扫描系统设计和实现
维普资讯
C 3 15 / P 4 - 2 8 T
计 算机 工 程与科 学
C  ̄ 'E NG N E l OM L R E l E R NG & S I NC T CE E
20 0 2年第 2 4卷第 2期
V0 4. o 2 2 0 l2 N . .0 2
c ni sann ,U Ppr s n i ,s  ̄enBokat ka 3cp r gI a akt psi ytel a hs. g D tc nn o a g i e vr tc n a t i dt p ce as gb cl ot n a un P a s n h o 关键 词 :端 口扫描 ; 『 攻击 ;捕 获 【 玛络 P数据 包;原始套 接 卒
文献标识 码 :A
运行状 况 。国外在这 方 面的实 际产 品研 究 主要 集
1 引 言
漏洞 扫 描是 自动检 测远 端或 本地 主机 安垒 漏
中 在 N I公 司 ( e ok Asc t A Nt r soie w as
h10 |l 0 ,
Ic )和 IS公 司 (n rcScr yt 。下面 n. S It t eut Ssm) e i a y e 介绍 基于 Wi o 00操 作 系统 的端 口扫描 的设 n  ̄20 d 计和 实现 方法 。
洞的技术 ,其 中端 口扫描是 漏洞扫描 的基 础部 分 ,通 过 查 询 T PI C /P端 口,记 录 目标 的 响应 ,
探 测远 端或 本 地主机 服务 端 口的打 开状 态和所 提 供 的服务 ,收集 关 于某 些 特定 项 目的有 用信 息 。
2 端 口扫描的原理
端 口扫 描的方 法 分 为 被 动 扫描 和 主 动扫 描 。 被 动扫 描 的 方 法 主要 有 :T PeD ̄t)端 口扫 C o/e( l

Nmap简单扫描过程

Nmap简单扫描过程

Nmap简单扫描过程目录一、主机发现(HOST DISCOVERY) (2)1.探测局域网内活动主机 (2)二、端口扫描 (4)1.半开放扫描(TCP SYN S CANNING) (4)2.TCP CONNECT SCANNING (4)3.TCP ACK SCANNING (4)4.TCP FIN/X MAS/NULL SCANNING (4)5.UDP SCANNING (4)6.其他方式 (4)三、版本侦测 (4)1.版本侦测主要分为以下几个步骤: (5)四、操作系统侦测 (5)1.实现方式如下 (5)一、主机发现(Host Discovery)用于发现目标主机是否在线(Alive,处于开启状态)。

原理:与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。

1.探测局域网内活动主机例子1:扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。

命令:nmap –sn 192.168.31.100-254Starting Nmap 6.46 ( ) at 2015-06-01 17:07 CSTNmap scan report for 192.168.31.101Host is up (0.00028s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer)Nmap scan report for 192.168.31.102Host is up (0.00088s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.110Host is up (0.00047s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.157Host is up (0.00052s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.158Host is up (0.00096s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.161Host is up (0.00045s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.163Host is up (0.00027s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.165Host is up (0.00036s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.180Host is up (0.00085s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer)Nmap scan report for 192.168.31.202Host is up (0.0011s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.205Host is up (0.00074s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.209Host is up (0.00046s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for (192.168.31.111)Host is up.Nmap done: 155 IP addresses (13 hosts up) scanned in 1.14 seconds例子2:扫描局域网192.168.31.0网段下哪些IP的主机是活动的命令:nmap -sn 192.168.31.0/24Starting Nmap 6.46 ( ) at 2015-06-01 17:35 CSTNmap scan report for 192.168.31.1Host is up (0.014s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.5Host is up (0.0010s latency).MAC Address: 00:0C:29:BD:8B:91 (Realtek Semiconductor)Nmap scan report for 192.168.31.6Host is up (0.00098s latency).MAC Address: 00:0C:29:BD:8B:91 (Lanner Electronics)Nmap scan report for 192.168.31.8Host is up (0.00094s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.9Host is up (0.00080s latency).MAC Address: 00:0C:29:BD:8B:91 (Lanner Electronics) Nmap scan report for 192.168.31.25Host is up (0.00057s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.26Host is up (0.00056s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.27Host is up (0.00060s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.37Host is up (0.00040s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.40Host is up (0.00072s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.49Host is up (0.00042s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.63Host is up (0.00056s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.80Host is up (0.0017s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.81Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.82Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.83Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.90Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.101Host is up (0.00036s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.102Host is up (0.00052s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.105Host is up (0.00037s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.110Host is up (0.00092s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.157Host is up (0.00067s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.158Host is up (0.00082s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.161Host is up (0.00060s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.163Host is up (0.00047s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.165Host is up (0.00054s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.180Host is up (0.00064s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer)Nmap scan report for 192.168.31.202Host is up (0.00067s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.205Host is up (0.00061s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.209Host is up (0.00049s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for (192.168.31.111)Host is up.Nmap done: 256 IP addresses (31 hosts up) scanned in 1.33 seconds二、端口扫描用于确定目标主机的TCP/UDP端口的开放情况1.半开放扫描(TCP SYN Scanning)该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。

端口扫描程序nmap使用手册

端口扫描程序nmap使用手册
传递给-b功能选项的参数是你要作为代理的FTP服务器。语法格式为:
-b username:password@server:port。
除了server以外,其余都是可选的。如果你想知道什么服务器有这种缺陷,可以参考我在Phrack 51发表的文章。还可以在nmap的站点得到这篇文章的最新版本。
-sF -sF -sN
秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式:即使SYN扫描都无法确定的情况下使用。一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行监视,而且有些程序比如synlogger和courtney能够检测那些扫描。这些高级的扫描方式可以逃过这些干扰。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包(参考RFC 793第64页)。FIN扫描使用暴露的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。不幸的是,微软决定完全忽略这个标准,另起炉灶。所以这种扫描方式对Windows95/NT无效。不过,从另外的角度讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可以发现打开的端口,你就可以确定目标注意运行的不是Windows系统。如果使用-sF、-sX或者-sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,你可以确定目标主机可能运行的是Windwos系统。现在这种方式没有什么太大的用处,因为nmap有内嵌的操作系统检测功能。还有其它几个系统使用和windows同样的处理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在应该抛弃数据包时,以上这些系统都会从打开的端口发出复位数据包。
根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址、以及其它一些东西。

端口扫描程序的设计49681

端口扫描程序的设计49681

课程设计题目:端口扫描程序设计院、系:计算机科学与技术学院网络工程系班级:学号:姓名:同组成员:指导教师:成绩:一.系统设计的目标:扫描器是网络信息收集的一种方法,从功能上可分为漏洞扫描器和端口扫描器。

通过此次课程设计,能够掌握漏洞、端口的基础知识,掌握扫描器的基本原理并设计实现端口扫描和漏洞扫描程序。

二.系统原理:常用的端口扫描技术有以下几种:2.1 TCP connect()扫描:2.1.1简介:这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。

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

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

2.2.2优点:不需要任何权限。

系统中的任何用户都有权利使用这个调用。

另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。

使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。

2.2.3 缺点:很容易被察觉,并且被防火墙将扫描信息包过滤掉。

目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。

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

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

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

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

2.2.2优点:一般不会在目标计算机上留下记录。

2.2.3缺点:必须要有root权限才能建立自己的SYN数据包。

2.3 TCP FIN 扫描:2.3.1简介:SYN扫描虽然是“半开放”方式扫描,但在某些时候也不能完全隐藏扫描者的动作,防火墙和包过滤器会对管理员指定的端口进行监视,有的程序能检测到这些扫描。

简单端口扫描程序的实现

简单端口扫描程序的实现

计算机网络课程设计论文题目:简单端口扫描程序的实现院(部)名称:计算机科学与工程学院学生姓名:专业:学号:指导教师姓名:报告提交时间:报告答辩时间:(不填)目录一、设计要求 (3)二、开发环境与工具 (3)三、设计原理 (3)四、系统功能描述及软件模块划分 (3)五、设计步骤 (5)六、关键问题及其解决方法 (5)七、设计结果 (15)八、软件使用说明 (16)九、参考资料 (16)一、设计要求本系统实现了一个简单的端口扫描器。

1. 使用端口扫描对一台主机进行扫描.一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描.显示出一个网段内有哪些主机是开机的。

二、开发环境与工具Windows的pc机Jdk包.:具备网络环境并连入Internet。

三、设计原理IP地址和端口被称作套接字.它代表一个TCP连接的一个连接端。

为了获得TCP服务.必须在发送机的一个端口上和接收机的一个端口上建立连接。

TCP连接用两个连接端来区别.也就是(连接端1.连接端2)。

连接端互相发送数据包。

端口扫描是在应用程序运行在 TCP 或者 UDP 协议之上工作的, 这些协议是众多应用程序使用的传输机制,端口扫描是通过扫描主机确定哪一些 TCP 和UDP 端口可以访问的过程. 端口扫描常见的几种类型: TCP Connect()扫描 SYN 扫描 NULL 扫描 ACK 扫描 Xmas-Tree Dumb 扫描。

Ping命令经常用来对TCP/IP网络进行诊断。

通过目标计算机发送一个数据包.让它将这个数据包反送回来.如果返回的数据包和发送的数据包一致.那就是说你的PING命令成功了。

通过这样对返回的数据进行分析.就能判断计算机是否开着.或者这个数据包从发送到返回需要多少时间。

Tracert命令用来跟踪一个消息从一台计算机到另一台计算机所走的路径. rusers和finger 通过这两个命令.你能收集到目标计算机上的有关用户的消息。

端口扫描程序设计毕业论文答辩PPT要点

端口扫描程序设计毕业论文答辩PPT要点
端口关闭
TCP SYN扫描
原理
✓ 向目标主机的特定端口发送一个SYN包 如果应答包为RST包,则说明该端口是关闭的 否则,会收到一个SYN|ACK包。于是,发送一个 RST,停止建立连接
✓ 由于连接没有完全建立,所以称为“半开连接扫描”
原理图:
1 SYN----> <---SYN/ACK 2 端口开放
✓ 第二个模块packet.dll为win32平台提供了一个公共的接 口。不同版本的Windows系统都有自己的内核模块和用 户层模块。Packet.dll用于解决这些不同。调用 Packet.dll的程序可以运行在不同版本的Windows平台上, 而无需重新编译
✓ 第三个模块 Wpcap.dll是不依赖于操作系统的。它提供 了更加高层、抽象的函数。
3 ACK-----> 端口开放
端口关闭
TCP XMAS扫描
原理
✓ 扫描器发送的TCP包包头设置所有标志位 关闭的端口会响应一个同样设置所有标 志位的包 开放的端口则会忽略该包而不作任何响 应
原理图:
1 URG/PSH/FIN----> 端口开放
1 URG/PSH/FIN-----> <---RST 2
基于WINPCAP
端口扫描程序的设计与实现
导 师: XXX 答辩人: XXX 专 业: 信息安全
论文框架
1 研究背景 2 课题方向 3 论文要点 4 结论
研究背景
网络中每台计算机犹如一座城堡,这些城堡中 ,有些是对外完全开放的,有些却是大门紧闭的 。入侵者们是如何找到,并打开它们的城门呢? 这些城门究竟通向何处? 在网络中,把这些城堡的“城门”称之为计算 机的“端口”。端口扫描是入侵者搜索信息的几 种常用方法之一,也正是这一种方法最容易暴露 入侵者的身份和意图。 如果入侵者掌握了目标主机开放了哪些服务, 运行何种操作系统,他们就能使用相应的手段实 现入侵。而如果管理员先掌握了这些端口服务的 安全漏洞,就能采取有效的安全措施,防范相应 的入侵。

端口扫描程序的设计与实现精简版范文

端口扫描程序的设计与实现精简版范文

端口扫描程序的设计与实现端口扫描程序的设计与实现1. 简介端口扫描程序是一种用来探测目标主机开放的网络端口的工具。

它通过向目标主机发送特定的网络消息,然后根据返回的消息判断该端口是否开放。

2. 设计思路2.1 输入端口扫描程序的输入通常包括目标主机的IP地质和要扫描的端口范围。

2.2 扫描过程扫描程序通过创建一个或多个线程来并发地扫描目标主机。

每个线程都会尝试连接目标主机的一个端口,并等待一段时间来判断端口是否开放。

如果端口开放,则将其记录下来。

2.3 输出扫描完成后,程序会将扫描结果输出到一个文件中。

每行记录一个开放的端口信息,包括目标主机的IP地质和开放的端口号。

3. 实现3.1 编程语言端口扫描程序可以用各种编程语言来实现,如、Java、C等。

选择合适的语言取决于开发者的个人喜好和实际需求。

3.2 网络连接程序需要使用Socket库来进行网络连接。

通过建立TCP连接或发送UDP消息来目标主机的端口状态。

3.3 多线程为了提高扫描速度,可以使用多线程来并发地扫描目标主机的端口。

每个线程独立地连接一个端口并等待返回消息。

3.4 错误处理在程序运行过程中可能会遇到各种错误,如网络连接失败、目标主机不可达等。

为了使程序具备鲁棒性,需要对这些错误进行适当的处理。

4. 特点与应用4.1 特点端口扫描程序可以用于检测目标主机的安全性,找出可能的漏洞和攻击面。

程序具备高效、快速、并发的特点,能够在短时间内扫描大量的端口。

4.2 应用网络管理员可以使用端口扫描程序来评估网络的安全性。

渗透人员可以利用端口扫描程序来发现目标主机的弱点。

系统管理员可以使用端口扫描程序来查找网络中的活跃主机和开放端口。

以上是端口扫描程序的设计与实现的简要介绍。

希望对您有所帮助!。

实验07 端口扫描

实验07 端口扫描

端口扫描6.3.1 背景描述“端口”在计算机和网络领域中是个非常重要的概念。

它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的接口,如USB端口、网卡端口等,或者交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等。

这里所说的端口指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。

端口号是一个16bit的二进制数,用于标示不用作用的端口。

端口号分为系统默认端口号和一般端口号。

系统默认端口号由因特网指派名字和号码公司ICANN负责分配给一些常用的应用程序固定使用的熟知端口,其数值从0-1023;一般端口号则是指1024-65535这些数值。

端口扫描就是对一段端口或指定的端口进行扫描。

其基本原理是使用TCP/IP协议向远程目标主机的某一端口提出建立一个连接的请求并记录目标系统的应答,从而判断出目标系统端口的开关状态。

常用的端口扫描技术有如下几种:1.TCP connect()扫描。

系统调用connect(),向目标端口发送一个SYN数据包,等待目标机器反应。

如果目标机器返回的是SYN/ACK数据包,证明目标端口处于监听状态,发送ACK数据包;如果返回的是RST/ACK数据包,说明目标端口关闭,发送RESET数据包,完成三次握手。

2.TCP SYN 扫描。

这项技术通常称为半开扫描(half-open),发送一个SYN数据包到目的端口,等待响应,如果收到SYN|ACK(应答),表明该端口是开放监听的。

收到RST则代表该端口未被监听。

如果收到SYN|ACK的响应,则马上发送一个RST包来中断这个连接。

3.TCP FIN扫描。

向目标端口发送FIN数据包,按照rfc793,目标系统应该给所有关闭着的端口返回一个RST数据包。

4.XMAS扫描。

也称圣诞树扫描,将TCP的首部含有的六个标志位(URG、ACK、PSH、RST、SYN和FIN)都置为1,按照rfc793,目标系统应该给所有关闭着的端口发送一个RST 包。

端口扫描程序的设计与实现

端口扫描程序的设计与实现

端口扫描程序的设计与实现
端口扫描程序的设计与实现
简介
设计目标
端口扫描程序的设计目标如下:
快速:能够在最短的时间内扫描目标主机上的所有端口。

精确:能够准确判断目标主机上端口的开放与关闭状态。

轻量:具有较小的资源占用,不会对目标主机和网络造成过多负担。

可扩展:能够灵活扩展功能,满足不同场景下的需求。

设计思路
端口扫描程序的设计思路如下:
1. 确定目标主机:输入目标主机的IP地质或域名。

2. 确定扫描范围:指定要扫描的端口范围,默认为常用端口范围。

3. 并发扫描:使用多个线程扫描目标主机上的端口,提高扫描效率。

4. 端口连接:针对每个要扫描的端口,尝试建立TCP连接,判断端口是否开放。

5. 扫描结果展示:将扫描结果以可读的方式输出,包括开放的端口和关闭的端口。

实现步骤
端口扫描程序的实现步骤如下:
1. 解析参数:根据命令行参数解析目标主机和端口范围。

2. 并发扫描:创建多个线程,并发执行端口扫描任务。

3. 端口扫描:每个线程负责扫描指定范围内的端口,并判断端口是否开放。

4. 扫描结果:将扫描结果保存到一个数据结构中,包括开放的端口和关闭的端口。

实现工具
端口扫描程序可以使用语言实现,借助的socket库可以进行网络连接,使用的多线程库可以实现并发扫描。

示例代码
以下是一个简单的端口扫描程序的示例代码:
import socket
import threading target_host = \。

nmap端口扫描实验

nmap端口扫描实验

《信息安全技术与应用》课程实验实验二端口扫描与安全审计一、Nmap简介1. 基本功能与目标端口状态说明Nmap(Network Mapper)是开放源码的网络探测和端口扫描工具,具有主机发现、端口扫描、操作系统检测、服务和版本检测、逃避放火墙及入侵检测系统等功能。

可从网站/nmap/下载不同操作系统版本的源代码和可执行程序,而且提供了详细的中文使用手册(/nmap/man/zh/)。

Nmap以表格形式输出扫描目标的端口号、协议、服务名称和状态,端口状态分别用开放(open)、关闭(closed)、已过滤(filtered)和未过滤(unfiltered)表示。

其中“开放”表示应用程序正在该端口监听连接或分组;“关闭”表示没有应用程序在该端口监听;“已过滤”表示防火墙或其他过滤器封锁了该端口,Nmap无法知道该端口的状态;“未过滤”表示端口对Nmap探测有响应,但Nmap 不能确定端口是开放还是关闭。

Nmap有时也可能输出open|filtered或closed|filtered的状态组合,表示不能正确识别端口处于其中那一个状态。

2. 命令格式与帮助Nmap命令格式:nmap [ Scan Type ...] [ Options ] { target specification }Nmap命令帮助:C:\>nmap(不带命令参数运行nmap)3. 常用扫描类型(1)-sT (TCP connect() 端口扫描);(2)-sS (TCP SYN 同步扫描);(3)-sU (UDP端口扫描);(4)-sN (Null扫描 ) ;(5)-sF 扫描 (FIN)(6)-sP(Ping扫描);(7)-sX (Xmas扫描 );(8)-sA (TCP ACK扫描,探测端口是否被过滤,open和closed端口返回RST报文,表示unfiltered,否则为filtered)(9)-sM (TCP Maimon扫描, Maimon发现BSD系统探测报文FIN-ACK,响应RST ) ;(10)--scanflags (定制TCP标志位URG, ACK,PSH, RST,SYN,和FIN的任何组合设计扫描探测报文 )(11)-sW (TCP窗口扫描) ;-sI (Idlescan盲扫描) ;-sO (IP协议扫描) 等,详细内容参考Nmap 手册;(12)未指定扫描类型,默认扫描类型为TCP SYN 同步扫描。

网络安全实验NMAP扫描

网络安全实验NMAP扫描

网络安全实验NMAP扫描网络安全实验:NMAP扫描的应用与原理一、引言在网络安全领域,网络映射程序(NMAP)是一款强大的安全工具,用于发现网络中的主机和开放端口。

NMAP被广泛应用于安全审计、网络发现、版本检测和漏洞评估等任务。

本文将通过实验方式,详细介绍NMAP扫描的原理、方法和实际应用,旨在帮助读者更好地理解和掌握这一重要技术。

二、NMAP扫描原理NMAP使用不同的扫描技术来发现网络中的主机和开放端口。

这些技术包括ICMP Echo请求、TCP SYN扫描、TCP ACK扫描、UDP扫描和操作系统检测等。

NMAP通过发送网络数据包并分析响应时间、数据包大小和其他信息来推断出目标主机的操作系统类型和网络服务。

三、实验环境为了进行NMAP扫描实验,我们准备了一个包含多个主机和端口的虚拟网络。

实验设备包括一台运行Kali Linux的攻击机和一台运行Windows Server的目标主机。

四、实验步骤与结果1、打开Kali Linux,启动终端程序,使用以下命令安装NMAP:2、使用以下命令启动NMAP扫描:其中,-sT选项表示使用TCP SYN扫描,-O选项表示进行操作系统检测。

将192.168.1.1替换为目标主机的IP地址。

3、执行命令后,NMAP将开始扫描并输出结果。

根据实验环境的不同,输出结果可能包括目标主机的操作系统类型、开放端口和服务等信息。

五、实验分析通过实验,我们成功地使用NMAP扫描了目标主机,并获取了其开放端口和服务信息。

这一过程证明了NMAP的强大功能和实用性。

在现实场景中,攻击者可能会利用NMAP来扫描目标网络,寻找潜在的安全漏洞。

因此,网络安全专业人员需要熟练掌握NMAP的使用方法,以便进行有效的安全审计和防御。

六、结论与展望本文通过实验方式详细介绍了NMAP扫描的原理、方法和实际应用。

实验结果表明,NMAP是一款功能强大的网络安全工具,能够有效地发现网络中的主机和开放端口。

多线程端口扫描程序设计与实现

多线程端口扫描程序设计与实现

中南大学之五兆芳芳创作《计较机网络》课程设计陈述题目多线程端口扫描程序设计与实现学生姓名孙毅指导教师刘嫔学院信息科学与工程学院专业班级信息平安1401完成时间/10/19目录第一章需求阐发 (1)1.2 系统功效描述11.2.2本系统要实现的功效 (1)第二章总体设计 (2)2.1总体阐发 (2)2.1界面设置构想图 (2)2.3界面使用设置构想 (2)2.4后台设计构想 (3)第三章详细设计 (4)3.1界面设计 (4)3.2界面设计图 (4)3.3后台设计 (5)第四章调试阐发与运行结果 (9)4.1运行情况与要求 (9)4.2 运行程序流程图 (9)4.3运行界面 (10)错误!未指定书签。

第六章??参考文献??错误!未指定书签。

第七章附录 (15)第一章需求阐发本设计要求完成一个多线程端口扫描程序的设计与实现,具有易用、美不雅的界面.功效要求:能够对当地或远程主机进行端口扫描.能够对制定端口段进行扫描.能够扫描制定IP地址规模内哪些主机开放了特定端口,如罕有的TCP端口FTP(21)等.使用 TCP connect进行端口扫描;使用 TCP SYN 进行端口扫描;使用 ICMP echo 扫描实现IP 扫描;能把扫描结果记实保管下来.系统功效描述多线程端口扫描器是实现计较机的端口的扫描,只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入IP地址主机的开放端口,并显示在主窗体中;点击退出,则可以退出该程序.IP设置应为所在主机的IP 地址,起始端口和结束端口应为0~65535之间的一个数,且起始端口应小于结束端口的大小.线程数为0~200之间的一个数.点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕.① 端口扫描功效:扫描开放的端口,并将扫描到的开放端口号送到前台.② 图像显示功效:显示界面图形.③ 多线程功效:当客户端要求与办事器端成立连接时,办事器端就将用到多线程功效,为每一个成立起来的连接创建一个线程.④ 异常抛出功效:对于明显的错误,能提示出错误的类型并结束程序的运行.第二章总体设计本程序分为前后台系统,后台系统用于扫描主机开放端口,并把节扫描的数据送至前台窗口显示;前台要显示扫描的结果,所以应为一个窗口,这个窗口应能够设置主机的IP 地址,设置端口的开始端口、结束端口和线程数,并且还能够显示扫描的状态.在中央是显示结果的窗体.本程序还应能够有控制扫描的状态命令,附加设置最小化和封闭按钮.图1 系统构想图当出现如图所示的界面时,填写好要扫描的IP地址,需要扫描的端口规模和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕.流程图如下:图2 系统构想流程图后台系统使用Scanner和Scan类,创建前台计划和创建扫描端口、事件处理,并且能对复杂的错误进行判断,显示错误原因.调用数据处理包,处理异常情况;调用皮肤包,美化显示窗口.第三章详细设计本程序界面图形设计要能清楚显示扫描后的结果,并且能很好的体现出界面的整洁大方,但其实不失去吸引人眼球的画面,所以在做界面的时候考虑了界面的色彩,并且添加了皮肤,界面上面的字体设置和windows窗口设置一样采取宋体,界面上的按钮不设置过量的按钮,仅设置有需要的按钮便可,界面设置大方.使用的时候有默认的IP地址、需要扫描的端口和线程数,如果需要扫描其他主机,只需要填写好要扫描的主机的IP地址,需要扫描的端口规模和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕.本程序采取小窗口形式,外围大小为700mm*700mm,结果显示字幕为主机地址加开放端口.添加特性皮肤.其余地方设置按钮和扫描的主机地址、端口和线程数.设计的预计页面图形如图:图3 系统界面设计图本程序使用了为主要的Scanner2类和ScanTcpConnect类.ScanTcpConnect类的作用是创建线程扫描端口,然后把结果显示到前台.Scanner2类的作用是机关前台计划,调用ScanTcpConnect类添加事件处理,对输入进行错误判断,如果输入不在允许的规模之内则显示相关错误.在本程序中用到了网络编程的两个类,下面介绍这两个类的经常使用办法.InetSocketAddress类机关办法如下:●InetSocketAddress(InetAddress addr, int port):按照 IP 地址和端口号创建套接字地址.●InetSocketAddress(int port):创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值.●InetSocketAddress(String hostname, int port):按照主机名和端口号创建套接字地址.Socket类经常使用办法如下:●Socket():通过系统默认类型的 SocketImpl 创建未连接套接字●Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号.●void bind(SocketAddress bindpoint):将套接字绑定到当地地址.●void close():封闭此套接字.●void connect(SocketAddress endpoint):将此套接字连接到办事器.●void connect(SocketAddress endpoint, int timeout):将此套接字连接到具有指定超时值的办事器.●boolean isClosed():前往套接字的封闭状态.●boolean isConnected():前往套接字的连接状态.本程序还调用其他的一些类和包,比方软件包java.awt.color 、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*.●java.awt.color包的的描述:提供用于颜色空间的类.它包含了基于国际色彩联盟(ICC) 配置文件格局标准的颜色空间实现.它还包含了基于ICC 配置文件格局标准的颜色配置文件.用来使界面加倍具有色彩.Result.setBackground(Color.PINK);//设置窗口为粉红●java.awt.event 的描述:提供处理由AWT 组件所激起的各类事件的接口和类.事件由事件源所激起,向事件源注册的事件侦听器可接收有关特定事件类型的通知.此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写进程更加轻松的便捷类.在本程序中使用:public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();if(cmd.equals("Start"))…………}io.IOException包的描述:用来处理io的错误,不但仅是文件读写,还包含良多stream的读写,并且throws是用来放在函数定义的函数体前函数名后的,暗示这个函数将会在出现异常的书后会抛出io异常,所以在以后的程序中调用这个函数的时候就必须用try和catch来捕获异常,不然编译会报错,这主要涉及到java的平安机制.本程序中使用如下:try {minPort = Integer.parseInt(PortStart.getText());maxPort = Integer.parseInt(PortEnd.getText());threadNum = Integer.parseInt(ThreadNum.getText());} catch (NumberFormatException e1) {DLGError.setBounds(300, 280, 299, 120);DLGINFO.setText("错误的端口号或线程数!端口号和线程数必须为整数!");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;…………}●Javax.Swing荟萃描述:由所有Java图形用户界面(GUI)组件所组成,可运行在任一支持Java虚拟机(JVM)的当地平台上.由于这些组件全都是用Java语言编写的,因此它们可以提供比当地平台GUI组件更多的功效.(与抽象窗口东西箱对比).Java Swing是Java Foundation Classes(JFC)的一部分.在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的GUI 东西包.Swing是在AWT组件根本上构建的.它所提供的功效要比AWT提供的更加普遍.它也是Java技巧的一种尺度配置.Swing模型一个Java GUI通常由顶层容器、中间容器以及多个原子组件组成.每个原子组件或容器都可能触发相应事件的产生.容器是一类能够在其中容纳其他组件的特殊组件.Swing的GUI 组件类是依照类属条理以树状结构进行组织的.在这个树的最顶层,即树的根部,使一个最根本的容器类,被称为顶层容器.Swing 提供了三个通用的顶层容器类JFrame,JDialog和JApplet.JFrame提供了基于窗体的应用程序,JDialog提供对话框形式的界面,JApplet提供Java小应用程序的界面形式.在顶层容器下是中间容器,用于容纳其他的组件.通常窗格自己在显示界面中是看不到的.面板类Panel是一种中间容器,它的唯一作用是使组件更容易定位.顶层容器通过getContentPane()办法获得内部的一个内容窗格.Swing包的组成:●javax.swing:根本Swing包,包含Swing容器、组件及相关设置的类和接口.●javax.swing.border:包含与鸿沟设计相关的类和接口.●javax.swing.colorchooser:与颜色选择相关的类和接口.●javax.swing.event:包含事件处理相关的类和接口.●javax.swing.filechooser:包含对文件进行查抄选取的相关类.●javax.swing.plaf:包含一些对外不雅样式操纵的类和接口.●javax.swing.tree:包含对树形组件进行操纵的类和接口.经常使用Swing组件:●按钮:JButton●文本区:JTextArea●文本字段:JTextField在本程序中使用如下:// 设置主窗体位置和大小Frame.setSize(700, 700); //设置主窗体大小//添加窗口监听,使之可以封闭窗口Frame.addWindowListener(new WindowAdapter() {publicvoid windowClosing(WindowEvent e) {System.exit(0);}});// 设置扫描按钮和退出按钮//Tcp connect扫描按钮Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand("Tcp_connect");//设置JButton的属性值Tcp_connect.addActionListener(this);//监听按钮的行动//Tcp SYN扫描按钮Tcp_SYN.setBounds(17,363,140,30);Tcp_SYN.setActionCommand("Tcp_SYN");//设置JButton的属性值Tcp_SYN.addActionListener(this);//监听按钮的行动//Icmp echo扫描按钮ICMP_echo.setBounds(17,413,140,30);ICMP_echo.setActionCommand("ICMP_echo");//设置JButton的属性值ICMP_echo.addActionListener(this);//监听按钮的行动//退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionCommand("Exit");Exit.addActionListener(this);jvnet.substance.*:目的是提供一个流行的外不雅(look & feel). //设置窗体皮肤SubstanceAutumnLookAndFeel.setSkin(new FieldOfWheatSkin());第四章调试阐发与运行结果(1)性能要求实时性好、可靠性强、不占用系统太多的内存和存储空间.(2)设计约束开发东西:jdk1.8.0_102 Eclipse jee图四开发东西运行情况:Windows 10能实现用户所定义的各项需求.4.2 运行程序流程图图4 流程图未扫描状态:图6 运行界面未扫描状态图 在Eclipse 中右击,选择运出现程序界面设置开始端口大小,设置设置结束口,设置0~65535之 设置进程点击扫描可以结果显示是否持续扫结束程序 否,点击退出是,重新设置正常扫描后状态:图7 运行界面正常扫描状态图起始端口设置有误扫描开始后状态报错:图8 运行界面起始端口设置错误报错图结束端口设置有误扫描开始后状态报错:图9 运行界面结束端口设置错误报错图线程数设置错误报错:图10 运行界面线程数设置错误报错图正常运行:图11正常运行图正常运行后且保管扫描结果之前的文件内容:图12 保管扫描结果之前的文件内容图正常运行后且保管扫描结果之后的文件内容:图13 保管扫描结果之后的文件内容第五章课程设计总结在此次课程设计中,遇到了一些问题,如:程序功效不克不及完全实现,对于面向对象的办法了解不敷透彻,运用到实际的软件开发中存在着困难;对于Java语言,以前只学习到了一些最根本的知识,要在短时间内用Java语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感到难以动手,这标明所学的知识不克不及灵活运用到实际中.对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码.对于书上以及网站上下载的资料中的Java实例必须理解,还有多跟精通JAVA语言的老师和同学请教和交换,取其精华.对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操纵,才干有所进步.我自己感到此次课程设计做得挺成功的,通过这一次实践编程,我学到了良多有关JAVA的实际编程的知识.在这次设计开始的第一天开始,我就开始着手修改一个用JAVA编写的短线呈端口扫描的程序.我刚开始很自信自己能修改成功,但这一进程太不顺利.用了两天时间来修改那个JAVA程序,但调试的时候都没有成功.后来我请教一个班上成绩好的同学,在他的帮忙下我不竭的发明错误,并更正它们,工夫不负有心人人,我的程序最后运行成功了.在这课程设计期间我的同学和老师帮忙了我,有些东西是我们一起探讨,一起解决办法的.当然在学习Java和设计程序的进程中还得到了杭志老师的辛勤指导,为我解答了良多的疑问.同时,在刘老师身上我们学到了良多实用的东西,在此暗示衷心的感激!同时,还要感激帮忙过我的其他同学!这次课程设计令我感触感染良多.从拿到题目到改编JAVA程序;然后请教他人慢慢研究琢磨;从理论到实践;从失败到成功;忘不了我坐在电脑前苦苦思索,低温下熬夜地编程的疲惫;忘不了因沉迷于编程却耽误了吃饭时间而受饿辛酸;忘不了……这其中了良多的东西,磨砺了我的意志;同时还稳固了以前所学的知识,学到了良多书本上没有的知识;学到了良多java编程知识,并学会了复杂的使用eclipse来开发java程序的一些使用技能这次课程设计是对我本学期所学的知识的查验,由此我发明了良多的问题.可以说它给了我一次自我评估的机遇.通过设计让我知道了那些方面我仍是有欠缺的,促使我花时间弥补.临近考试,时间太紧迫,致使程序实现的功效在办法上也许不是很完美,但我以后会多向老师请教,自己也要增强对Java 的学习.努力进一步提高自己的编程水平.此次的课程设计,对我来说撰写文档似乎是一个更大的挑战.撰写文档不但要求我们要对自己程序很是熟悉:程序的总体框架,功效,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑性.因此,写完这篇文档对于我们自身来说自然是获益匪浅的.第六章参考文献1、Sharon Zakhour Scott Hommel等著. Java 语言导学.人民邮电出版社,2、耿祥义编著. Java根本教程. 清华大学出版社,3、Joe Wigglesworth Paula Lumby. Java程序设计初级主题. 北京大学出版社,4、Y.Daniel Liang著,王镁等译.Java语言程序设计根本篇.5、朱福喜等.Java项目设计与开发典范.电子产业出版社,6、李瑞民.网络扫描技巧揭秘.机械产业出版社,第七章附录带注释的源程序://多线程端口扫描程序设计与实现带有注释的源程序import java.awt.*; //抽象窗口东西包,图形界面组件类import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.*; //各类IOimport javax.swing.*; //awt根本上的一套图形界面系统import .*;//第一大类:Scanner2类publicclassScanner2extends JFrame implements ActionListener { publicstaticvoid main(String[] args){ //程序入口new Scanner2();}staticintj = 0;//主窗口的创建,new组件publicstatic JFrame Frame = new JFrame();publicstatic Label labelIPStart = new Label("起始IP");publicstatic Label labelIPEnd = new Label("结束IP");publicstatic Label labelPortStart = new Label("起始端口");publicstatic Label labelPortEnd = new Label("结束端口");publicstatic Label labelThread = new Label("线程数");publicstatic Label labelTimeOut = new Label("请求超时:");publicstatic Label labelState = new Label("扫描状态:");publicstatic Label labelResult = new Label("扫描结果:");publicstatic Label labelScanning = new Label("扫描待命");JLabel photo= new JLabel(new ImageIcon("G://图片//QQ图片0724195038.jpg")); publicstatic JTextField hostNameStart = new JTextField("127.0.0.1");publicstatic JTextField hostNameEnd = new JTextField("127.0.0.1");publicstatic JTextField PortStart = new JTextField("10");publicstatic JTextField PortEnd = new JTextField("30");publicstatic JTextField ThreadNum = new JTextField("9");publicstatic JTextField time = new JTextField("2000");publicstatic TextArea Result1 = new TextArea();publicstatic TextArea Result2 = new TextArea();publicstatic Label DLGINFO = new Label("");publicstatic JButton Tcp_connect = new JButton("Tcp connect 扫描");publicstatic JButton Tcp_SYN = new JButton("Tcp SYN 扫描");publicstatic JButton ICMP_echo = new JButton("ICMP echo 扫描");publicstatic JButton Exit = new JButton("退出扫描");publicstatic JButton save = new JButton("保管结果");//错误提示对话框publicstatic JDialog DLGError = new JDialog(Frame, "ERROR");publicstatic JButton OK = new JButton("OK");//在机关函数里进行窗口设计public Scanner2(){//设置主窗体题目Frame.setTitle("计较机网络课设:多线程端口扫描信安1401 孙毅 CSU"); Frame.setSize(700, 700); //设置主窗体大小//添加窗口监听,使之可以封闭窗口Frame.addWindowListener(new WindowAdapter() {publicvoid windowClosing(WindowEvent e) {System.exit(0);}});//设置一系列按钮和小窗口及图片//IPlabelIPStart.setBounds(17,13,50,20);hostNameStart.setBounds(67,13,90,25);hostNameStart.setHorizontalAlignment(JTextField.CENTER);//文本水平对齐方法labelIPEnd.setBounds(17,63,50,20);hostNameEnd.setBounds(67,63,90,25);hostNameEnd.setHorizontalAlignment(JTextField.CENTER);//文本水平对齐方法//起始端口labelPortStart.setBounds(17,113,50,20);PortStart.setBounds(67,113,90,25);PortStart.setHorizontalAlignment(JTextField.CENTER);//结束端口labelPortEnd.setBounds(17,163,50,20);PortEnd.setBounds(67,163,90,25);PortEnd.setHorizontalAlignment(JTextField.CENTER);//线程数labelThread.setBounds(17,213,50,20);ThreadNum.setBounds(67,213,90,25);ThreadNum.setHorizontalAlignment(JTextField.CENTER);//请求超时labelTimeOut.setBounds(17,263,50,20);time.setBounds(67,263,90,25);time.setHorizontalAlignment(JTextField.CENTER);//Tcp connect扫描按钮Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand("Tcp_connect");//设置JButton的属性值Tcp_connect.addActionListener(this);//监听按钮的行动//Tcp SYN扫描按钮Tcp_SYN.setBounds(17,363,140,30);Tcp_SYN.setActionCommand("Tcp_SYN");//设置JButton的属性值Tcp_SYN.addActionListener(this);//监听按钮的行动//Icmp echo扫描按钮ICMP_echo.setBounds(17,413,140,30);ICMP_echo.setActionCommand("ICMP_echo");//设置JButton的属性值ICMP_echo.addActionListener(this);//监听按钮的行动//退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionCommand("Exit");Exit.addActionListener(this);//保管结果按钮save.setBounds(17,513,140,30);save.setActionCommand("save");save.addActionListener(this);//扫描状态栏labelState.setBounds(180,13,50,20);labelScanning.setBounds(240,8,120,30);Result1.setBounds(180,40,210,332);Result1.setEditable(false);Result1.setBackground(Color.GREEN);//图片的显示photo.setBounds(393,13,283,360);//扫描结果栏labelResult.setBounds(180,390,50,20);Result2.setBounds(180,420,500,200);Result2.setEditable(false);Result2.setBackground(Color.GREEN);//设置错误提示框Container ErrorDisplay = DLGError.getContentPane(); ErrorDisplay.setLayout(null);ErrorDisplay.add(DLGINFO);ErrorDisplay.add(OK);OK.setActionCommand("OK");OK.addActionListener(this);//将组件添加到主窗体Frame.setLayout(null);Frame.setResizable(false);//窗口大小设置为不成变Frame.add(labelIPStart);Frame.add(labelIPEnd);Frame.add(labelPortStart);Frame.add(labelPortEnd);Frame.add(labelThread);Frame.add(labelTimeOut);Frame.add(hostNameStart);Frame.add(hostNameEnd);Frame.add(PortStart);Frame.add(PortEnd);Frame.add(ThreadNum);Frame.add(time);Frame.add(Tcp_connect);Frame.add(Tcp_SYN);Frame.add(ICMP_echo);Frame.add(Exit);Frame.add(save);Frame.add(labelState);Frame.add(labelScanning);Frame.add(Result1);Frame.add(photo);Frame.add(labelResult);Frame.add(Result2);Frame.setVisible(true);}//几个产生错误的原因@Overridepublicvoid actionPerformed(ActionEvent arg0) {// TODO Autogenerated method stubString cmd = arg0.getActionCommand(); intminPort,maxPort,threadNum;InetAddress hostAddressStart = null;InetAddress hostAddressEnd = null;try{//获得输入的相关数据minPort = Integer.parseInt(PortStart.getText());maxPort = Integer.parseInt(PortEnd.getText()); threadNum = Integer.parseInt(ThreadNum.getText());}catch(NumberFormatException e1){ DLGError.setBounds(300,280,300,200);DLGINFO.setText("靓仔,端口号、线程号必须得是整数"); DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;}//输入信息错误处理if((minPort < 0)||(maxPort > 65536)||(minPort > maxPort)){DLGError.setBounds(300,280,400,200);DLGINFO.setText("端口必须在0~65536之间,且起始端口应小于结束端口"); DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;}if((threadNum > 200)||(threadNum < 0)){DLGError.setBounds(300,280,300,200);DLGINFO.setText("线程数应是在1~200之间的整数");DLGINFO.setBounds(25,15,200,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;}//如果按了保管按钮if (cmd.equals("save")){try{BufferedWriter bw = new BufferedWriter(new FileWriter("G:\\java语言文件\\DXCDKSMQ2\\扫描结果.txt"));bw.write(ScanTcpConnect.str);bw.newLine();ScanTcpConnect.str = "";bw.close();}catch(IOException e1){e1.printStackTrace();}}//如果按了开始扫描按钮if (cmd.equals("Tcp_connect")||cmd.equals("Tcp_SYN")||cmd.equals("ICMP_echo")){ Result1.setText(null);Result2.setText(null);//相关显示,.append()的用途是将前面的字符串接到原来的字符串上面来labelScanning.setText("开始扫描......");Result1.append("正在扫描"+hostNameStart.getText()+", 线程数:"+threadNum+"\n"); Result1.append("起始端口:"+minPort+"; 结束端口: "+maxPort+"\n");//j++;try{ScanTcpConnect.hostAddress =InetAddress.getByName(Scanner2.hostNameStart.getText());ScanTcpConnect.time =Integer.parseInt(Scanner2.time.getText());}catch(UnknownHostException e1){DLGError.setBounds(300,280,300,200);DLGINFO.setText("靓仔,你的IP或域名输入仿佛有误哦");DLGINFO.setBounds(25,15,200,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;}//多线程焦点算法for(inti = minPort;i <= maxPort;){if((i+threadNum) <= maxPort){new ScanTcpConnect(i,i+threadNum).run();//引用Scan类的run()办法i += threadNum;}else{new ScanTcpConnect(i,maxPort).run();i += threadNum;}}try{Thread.sleep(1);//设置睡眠时间}catch(InterruptedException e1){e1.printStackTrace();}Result1.append("扫描完成!");labelScanning.setText("扫描完成!");}//如果按了OK按钮if(cmd.equals("OK")){DLGError.dispose();//释放资源}//如果按了退出扫描按钮if(cmd.equals("Eixt")){System.exit(0);//非正常退出正在运行中的java虚拟机}}}//第二大类:完成Tcp connect 扫描>ScanTcpConnect类class ScanTcpConnect extends Thread{staticinttime;static String str = "";intminPort,maxPort;publicstatic InetAddress hostAddress;//机关函数ScanTcpConnect(intminPort,intmaxPort){ //传递参数this.minPort = minPort;this.maxPort = maxPort;}publicvoid run(){//扫描指定端口for(inti= minPort; i < maxPort; i++){Scanner2.Result1.append("主机:"+Scanner2.hostNameStart.getText()+" TCP端口:"+i+"\n");try{belScanning.setText("正在扫描"+i+"端口");//按照主机名和端口号创建套接字地址//InetSocketAddress是SocketAddress的实现子类SocketAddress sockaddr = newInetSocketAddress(hostAddress,i);Socket socket = new Socket();//将创建的套接字连接到具有指定超时值得办事器socket.connect(sockaddr, time);Scanner2.Result2.append("主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 端口开放"+"\n");socket.close();str += "主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 端口开放" + "\n";}catch(ConnectException e){ //因端口封闭而失败的情况Scanner2.Result2.append("主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 端口封闭"+"\n");str += "主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 端口封闭" + "\n";}catch(SocketTimeoutException e){ //因请求超时而失败的情况Scanner2.Result2.append("主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 请求超时"+"\n");str += "主机:"+Scanner2.hostNameStart.getText()+" TCP端口号为:"+i+" > 请求超时" + "\n";}catch (IOException e) {// TODO Autogenerated catch blocke.printStackTrace();}}}}。

网络主机扫描程序的设计与实现

网络主机扫描程序的设计与实现

网络主机扫描程序的设计与实现网络主机扫描程序的设计与实现一、简介网络主机扫描程序是一种用于主机发现与端口扫描的工具。

它通过发送ICMP和TCP/UDP报文来探测网络上活跃的主机,还可以扫描这些主机的开放端口。

网络主机扫描程序在网络安全评估、系统管理以及漏洞扫描等领域中得到广泛应用。

二、设计目标网络主机扫描程序的设计目标主要包括:1. 快速高效:能够快速扫描大规模的网络主机,提高扫描效率。

2. 准确可靠:能够准确地识别活跃的主机和开放的端口,并提供准确的扫描结果。

3. 可扩展性:能够灵活扩展功能,满足不同用户的需求。

4. 用户友好:提供简洁易用的用户界面,方便用户使用和操作。

三、设计原理网络主机扫描程序的设计原理主要包括以下几个方面:1. 主机发现:通过发送ICMP报文来判断目标主机是否活跃。

常用的方法有发送Ping请求和发送ARP请求。

2. 端口扫描:通过发送TCP和UDP报文来判断目标主机的端口状态。

常用的方法有全连接扫描、半开放扫描和综合扫描。

3. 扫描策略:可以根据需求选择扫描的目标地质范围、端口范围、扫描速度等参数。

4. 结果输出:将扫描结果以可读形式输出,如文本、、CSV等格式。

四、实现步骤网络主机扫描程序的实现步骤包括以下几个阶段:1. 参数解析:解析命令行参数,获取扫描目标和扫描选项。

2. 主机发现:根据目标地质范围发送ICMP或ARP请求,判断目标主机是否活跃。

3. 端口扫描:根据扫描选项和目标主机的活跃状态,发送TCP/UDP报文来判断目标主机的端口状态。

4. 结果输出:将扫描结果按照指定格式输出到文件或打印到控制台。

5. 异常处理:处理网络连接超时、目标主机不可达等异常情况。

五、实现工具和技术网络主机扫描程序可以使用多种编程语言和工具来实现,如、C、Nmap等。

常用的技术包括:1. 网络编程:使用Socket库进行网络通信,发送和接收报文。

2. 多线程/多进程:利用并发编程技术提高扫描效率。

基于多线程的端口扫描工具设计

基于多线程的端口扫描工具设计

基于多线程的端口扫描工具设计作者:程承来源:《科学与财富》2016年第25期摘要:计算机网络给人们的生活带来了巨大便利,但互联网是一个面向公众的开放系统,对数据的保密性和信息的安全性考虑得并不完善,存在着诸多隐患,网络安全形势日趋严峻。

在众多入侵检测技术当中,端口信息探测技术引起了越来越多人的关注。

本文通过阐述端口扫描与多线程的原理,介绍了一种高效率的端口扫描探测工具。

关键词:网络安全;入侵检测;端口扫描;多线程;对于网络入侵而言,攻击者在选定一个目标时,首先要获取该目标的一些基本信息,如其端口开放情况,再根据该端口的安全性,选择是否为注入木马的“后门”。

在这个过程中,使用端口扫描就是其中最简单但却是最重要的步骤之一,它可以完成上述任务,为下一步攻击做准备。

但是一般而言,单一或少量的端口扫描是没有意义的,原因是计算机端口数量较多,端口扫描必须在短时间内得到结果才有攻击意义。

因此,就需要一种可以充分利用现有计算机资源的技术,那就是多线程。

1 Winsock1.1 Winsock概述Winsock是从 Berkeley Sockets 扩展而来的,其在继承 Berkeley Sockets 的基础上,又进行了新的扩充。

这些扩充主要是提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制。

Winsock由两部分组成:开发组件和运行组件。

开发组件:Windows Sockets 实现文档、应用程序接口(API)引入库和一些头文件。

运行组件:Windows Sockets 应用程序接口的动态链接库(WINSOCK.DLL)。

1.2 Winsock原理在TCP/IP网络中两个进程间的相互作用模式是客户端/服务器模式。

服务器流程如下:(1)打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。

(2)等待客户请求到达该端口。

(3)接收到重复服务请求,处理该请求并发送应答信号。

端口与漏洞的安全扫描

端口与漏洞的安全扫描

甘肃政法学院安全扫描课程设计题目:端口与漏洞的安全扫描计算机科学学院计算机科学与技术专业09 级计算机科学与技术本科班学号:__ _姓名:____ ____指导教师:_____李启南_____成绩:_______________完成时间:_2011 年 _12 月摘要:随着计算机网络和通讯技术的高速发展,利用开放的网络环境进行全球通信已成为时代发展的趋势。

但是网络在提供便利的共享资源的同时也带来了各种各样的安全风险。

因此,网络安全问题越来越引起人们的广泛关注,并成为当今网络技术研究的重点。

通常黑客和病毒是通过安全漏洞渗入目标系统的,因此只要找到并修补所有的安全漏洞,就可以抵御绝大部分的黑客攻击。

安全漏洞扫描技术能够检测网络系统潜在的安全漏洞,使网络管理者可以预先了解网络的脆弱性所在,从而确保网络系统的安全。

通常,一次成功的网络攻击,首先要收集目标网络系统的漏洞信息,然后才能进一步对目标实施有针对性的有效攻击。

而对目标系统漏洞信息的获取,目前主要是通过网络漏洞扫描工具实现的。

关键词:网络安全漏洞漏洞扫描网络攻击目录第一章绪论 (1)第2章相关理论及技术基础 (3)2.1 漏洞扫描简介 (3)2.1.1 漏洞扫描技术: (3)2.1.2 漏洞扫描技术意义: (3)2.1.3 漏洞扫描的相关定义: (3)2.2漏洞扫描基本原理 (3)2.3端口简介 (4)2.3.1端口概念 (4)2.3.2端口分类 (4)2.3.3查看端口 (5)2.3.4常用端口及漏洞 (6)第3章设计的要求与分析 (9)3.1设计目的与要求 (9)3.2设计原理 (9)3.3设计环境 (9)3.4 流光扫描软件简介 (9)第4章设计的实现 (11)4.1流光的扫描过程 (11)4.2.分析扫描结果并模拟入侵。

(17)4.3关闭139和445端口的方法 (18)4.3.1关闭139端口 (18)总结 (22)参考文献 (23)第一章绪论随着信息化科学技术的快速发展,21世纪的人们将步入一个前所未有信息时代。

端口扫描实验报告

端口扫描实验报告

综合实验报告( 2010 -- 2011 年度第二学期)名称:网络综合实验题目:端口扫描程序院系:信息工程系班级:学号:学生姓名:指导教师:鲁斌李莉王晓霞张铭泉设计周数: 2 周成绩:日期:2011年7月1日一、综合实验的目的与要求1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。

2.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。

3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

4.学生要求人数:1人。

二、综合实验正文1.端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。

扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET 服务和HTTPD服务等。

2.实验所用的端口扫描技术:端口扫描技术有TCP connect()扫描、TCP SYN扫描、TCP FIN 扫描、IP段扫描等等。

本次实验所用的技术是TCP connect()扫描,这是最基本的TCP 扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。

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

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

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

系统中的任何用户都有权利使用这个调用。

3.实验具体实现方案:编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。

网络报告实验二端口扫描实验superscan

网络报告实验二端口扫描实验superscan

运城学院实验报告专业:网络工程专业系(班):计算机科学与技术系1404班姓名:课程名称:网络安全实用技术实验项目:网络端口扫描实验superscan实验类型:设计型指导老师:杨战武实验地点:网络实验室(2506)时间:2017年 5月10日一、实验目的熟悉并掌握端口扫描工具——Superscan的使用,利用端口扫描工具Superscan对局域网中的机器实施端口扫描,获取网络中各台计算机的端口开放情况,由此来判断网络中的计算机的基本安全情况。

二、实验原理[端口扫描原理]1.端口扫描向目标主机的TCP/IP服务端口发送探测数据包,并记录目标主机的响应。

通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。

2.端口扫描主要有经典的扫描器(全连接)、SYN(半连接)扫描器、秘密扫描等。

3.全连接扫描:扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。

建立连接成功则响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。

如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。

4.半连接(SYN)扫描:若端口扫描没有完成一个完整的TCP连接,在扫描主机和目标主机的一指定端口建立连接时候只完成了前两次握手,在第三步时,扫描主机中断了本次连接,使连接没有完全建立起来,这样的端口扫描称为半连接扫描,也称为间接扫描。

5.TCP FIN(秘密)扫描:扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。

另一方面,打开的端口会忽略对FIN数据包的回复。

[综合扫描和安全评估技术工作原理]6.获得主机系统在网络服务、版本信息、Web应用等相关信息,然后采用模拟攻击的方法,对目标主机系统进行攻击性的安全漏洞扫描,如果模拟攻击成功,则视为漏洞存在。

最后根据检测结果向系统管理员提供周密可靠的安全性分析报告。

[常见的TCP端口如下]:服务名称端口号说明FTP 21 文件传输服务TELNET 23 远程登录服务HTTP 80 网页浏览服务POP3 110 邮件服务SMTP 25 简单邮件传输服务SOCKS 1080 代理服务[常见的UDP端口如下]服务名称端口号说明RPC 111 远程调用SNMP 161 简单网络管理TFTP 69 简单文件传输DNS 53 域名解析服务[常见端口的关闭方法]:1、关闭7.9等端口:关闭Simple TCP/IP Service,支持以下TCP/IP 服务:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。

实验二 网络端口扫描

实验二 网络端口扫描

实验二网络端口扫描一、实验目的通过练习使用网络端口扫描器,了解目标主机开放的端口和服务程序,从而获得系统有用的信息,发现网络系统的安全漏洞。

本实验将在Windows操作系统下使用Superscan工具进行网络端口扫描实验,在Linux操作系统下将使用综合性扫描工具Nessus进行扫描练习(暂不进行)。

通过端口扫描实验,可以增强学生在网络安全方面的防护意识。

二、实验原理在Internet安全领域,扫描器是最有效的破解工具之一,扫描器是一种自动检测远程或本地主机安全性弱点的程序。

通过使用扫描器,可以发现远程服务器是否存活、它对外开放的各种TCP端口的分配及提供的服务、它所使用的软件版本(如OS和其它Software的版本)以及所存在可能被利用的系统漏洞。

根据这些信息,可以让使用它的用户了解到远程主机所存在的安全问题。

1、扫描的类型(1)地址扫描地址扫描是最简单、最常见的一种扫描方式。

可以通过Ping来判断某一主机是否在线。

也可以通过一些工具来获得某一网络中所有在线主机的地址。

但由于现在很多的路由器与防火墙对ICMP请求进行拦截,因此这种方式也不一定很可靠。

(2)端口扫描互联网上通信的双方不仅需要知道对方的地址,还需要知道通信程序的端口号。

目前使用的IPv4协议支持16位的端号,端口号可使用的范围为0~65535,其中0~1023为熟知端口,被指定给特定的服务使用,由IANA(Internet Assigned Numbers Authority,互联网数字分配机构)管理;1024~49151为注册端口,这些端口由IANA记录并追踪;49152~65535端口叫做动态端口或专门端口,提供给专用应用程序。

在进行入侵攻击之前,首先要了解目标系统的是什么OS,是否有保护措施,运行什么服务和服务的版本,存在漏洞等,而要判断服务的方法就通过端口扫描,这是因为常用的服务是使用标准的端口,因此只要知道了端口号,就能知道目标主机上运行着什么服务,然后才能针对这些服务进行攻击。

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

主机端口扫描程序设计摘要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。

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

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

此程序主要完成了TCP connect()扫描和UDP扫描功能。

TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。

能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。

此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。

而对于UDP扫描只支持单线程,速度较慢。

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

关键词:端口扫描、TCP扫描、UDP扫描、TCP多线程扫描目录1引言 (1)1.1 课题的背景及意义 (1)1.2 端口扫描现状 (1)2系统设计 (1)2.1 系统主要目标 (1)2.2 开发环境及工具 (1)2.3 功能模块与系统结构 (2)3系统功能程序设计 (4)3.1 获取本机IP (4)3.2 分割字符串函数的实现 (4)3.3 获取待扫描的IP地址 (5)3.4 获取待扫描的端口号 (5)3.4.1 指定端口号的初始化 (6)3.4.2 指定端口号的保存 (7)3.5 TCP CONNECT()扫描 (8)3.5.1 基本原理 (8)3.5.2 扫描多个主机多端口多线程的实现 (8)3.5.3 扫描结果的显示 (9)3.6 UDP扫描 (10)3.6.1 基本原理 (10)3.6.2 计算效验和 (11)3.6.3 发送UDP数据包 (11)3.6.4 接收ICMP数据包 (12)4测试报告 (12)4.1 TCP扫描检测 (12)4.1.1扫描本机 (12)4.1.2扫描网络中其他主机 (13)4.1.3 扫描IP段 (13)4.2 UDP扫描检测 (14)4.2.1 扫描本机 (14)4.1.2扫描网络中其他主机 (15)4.3 TCP、UDP一起扫描 (16)结论 (17)参考文献 (17)1引言1.1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。

入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口”。

端口扫描是入侵者搜索信息的几种常用方法之一,也正是这一种方法最容易暴露入侵者的身份和意图。

一般说来,扫描端口有以下目的:判断目标主机上开放了哪些服务判断目标主机的操作系统如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。

而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。

1.2 端口扫描现状计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。

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

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

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

扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息,从而发现目标机的某些内在的弱点。

2系统设计2.1 系统主要目标本程序主要实现了:简易的TCP connect()扫描,支持多线程;UDP扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;2.2 开发环境及工具测试平台:Windows XP Professional使用软件:Visual C++ 6.0开发语言:C语言2.3 功能模块与系统结构作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。

对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程IP的系统服务端口进行扫描。

有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。

所以,对于选择性地对端口进行扫描也非常重要。

这当然也是扫描程序需要实现的功能之一。

用户在等待扫描的时候,往往希望知道它的工作进度。

这样用户可以更好地控制自己的操作。

站在用户的角度思考,设置进度是程序需要完成的,这样就能知道程序扫描的进度。

系统必须提供的服务是功能需求的基本,本着站在用户角度思考的原则,做出如上叙述需求,从简列举如下:扫描功能;地址选择功能;端口选择功能;进度显示功能;端口扫描程序功能模块如下图所示:程序运行流程图:3系统功能程序设计本程序主要实现了简易的TCP connect()扫描和UDP扫描功能,对TCP扫描支持多线程扫描,UDP扫描仅支持单线程。

3.1 获取本机IP首先使用winsock中的gethostname()函数获取本地主机的标准主机名,再使用函数gethostbyname()主机名字和地址信息的hostent结构指针,最后通过inet_ntoa()函数将地址转化为字符形式返回给主调函数。

if( gethostname(szHostName, 128) == 0 ){pHost = gethostbyname(szHostName);for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ ){/*对每一个IP地址进行处理*/pszAddr = inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);break;}}3.2 分割字符串函数的实现由于扫描结果是使用静态字符串保存的,所以最后显示的时候,需要用到分割字符串函数,来将字符串中扫描出的端口号分离出来显示。

本函数主要是通过Find()函数来查找用作分隔符的字符串在待查找的字符串中的位置,然后通过Add()函数将分隔符之间的字符保存进数组中,来达到分割字符的目的。

while( -1 != pos ){if( -1 == pre_pos )pos = source.Find(division,pos);elsepos = source.Find(division,(pos+1));if( -1 == pre_pos ) {iFirst = 0;if( -1 == pos )nCount = source.GetLength();elsenCount = pos;} else{iFirst = pre_pos+len;if( -1 != pos )nCount = pos - pre_pos - len;elsenCount = source.GetLength()-pre_pos-len;}dest.Add(source.Mid(iFirst,nCount));pre_pos = pos;}3.3 获取待扫描的IP地址通过判断选择的哪个Radio Button的值,来选择从对应的IP Address控件中读入用户输入的值,若是单个的IP则将开始地址StartAddr和结束地址EndAddr都赋值为IP Address控件的值;若是IP范围,则第一个IP地址赋值给StartAddr,最后一个IP 地址赋值给EndAddr。

void CPortScanDlg::setAddr(DWORD& StartAddr,DWORD& EndAddr){switch(m_conf_IP.m_IP){case 0:m_conf_IP.m_IP_Self.GetAddress(StartAddr);m_conf_IP.m_IP_Self.GetAddress(EndAddr);break;case 1:m_conf_IP.m_IP_Design.GetAddress(StartAddr);m_conf_IP.m_IP_Design.GetAddress(EndAddr);break;case 2:m_conf_IP.m_IP_Start.GetAddress(StartAddr);m_conf_IP.m_IP_End.GetAddress(EndAddr);break;default:break;}}3.4 获取待扫描的端口号首先读入用户设置的允许的最大线程数。

再通过判断选择的哪个Radio Button的值,来选择从对应的Edit Box控件中读入用户输入的值。

若是指定的端口号,则循环读入Edit Box中的端口号 (一个端口号占用一行,一次读入一行),每行的字符不超过9字符,再在读入的每行字符的末尾添加字符串结束标记’\0’,再通过atoi()函数把字符型转换为整型,存放在定义的数组结构中,并保存端口号的总个数。

若是端口范围,则第一个端口号的值和最后一个端口号的值分别读入存放在定义的结构体中。

void CPortScanDlg::setPort(tag_PORTS *pScanParam,int& ThreadNum){ThreadNum=m_conf_Port.m_ThreadNum;switch(m_conf_Port.m_Port){case 0:{short nCount = 0;char buff[10];for(int i=0; i<m_conf_Port.m_DesignPort.GetLineCount(); i++){int len = m_conf_Port.m_DesignPort.GetLine(i, buff, 9);if (len != 0){buff[len] = '\0';pScanParam->nArrOfPorts[nCount++]= atoi(buff);}}pScanParam->nCount = nCount;pScanParam->bSepecifiedPort=0;break;}case 1:pScanParam->bSepecifiedPort=1;pScanParam->iStartPort=m_conf_Port.m_StartPort;pScanParam->iEndPort=m_conf_Port.m_EndPort;break;default:break;}3.4.1 指定端口号的初始化首先试着读取DefaultPorts.txt文件中保存的端口号,若读入成功,则显示该文本文档中保存的值;若该文件不存在或读入异常,则显示默认设置的值。

相关文档
最新文档