端口扫描器的设计与实现

合集下载

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 首部( 在这里将目标主机端口填入) , 计算校验和, 发送数据包。

全自动漏洞扫描系统的设计与实现

全自动漏洞扫描系统的设计与实现

全自动漏洞扫描系统的设计与实现随着互联网的不断发展,网络安全问题日渐突出。

网络攻击者通过漏洞攻击来侵犯他人的计算机系统,从而进行数据窃取和破坏,对个人和企业造成了严重的影响。

为了确保网络安全,开发全自动漏洞扫描系统成为了一个重要的任务。

本文将讨论全自动漏洞扫描系统的设计与实现。

一、漏洞扫描系统的必要性随着网络技术的不断发展,网络攻击手段也在不断更新。

为了应对这种情况,企业需要使用一种无需过多人力投入,即可自动化进行漏洞扫描的系统。

通过实时监测和检查企业内部计算机系统和网络的安全性,及时识别存在的安全漏洞,并给出相应的解决方案,能够更好地保障企业的网络安全。

二、漏洞扫描系统的设计原理在全自动漏洞扫描系统中,需要包含以下几个部分:资产识别、漏洞检测和漏洞解决方案等。

资产识别主要是通过扫描网络上的所有IP地址来识别出企业内部所有的主机和设备;漏洞检测则是识别出这些主机和设备上存在的安全漏洞;漏洞解决方案则是提供相应的安全解决方案,帮助企业及时消除安全漏洞。

在漏洞扫描系统的设计中,需要采用一定的漏洞扫描技术,例如:端口扫描、服务识别、漏洞检测、爆破等。

其中,漏洞检测技术是最为核心的部分,需要采用一定的漏洞检测工具,例如:Nmap、OpenVAS等。

三、漏洞扫描系统的实现在漏洞扫描系统的实现过程中,需要分别实现资产识别、漏洞检测和漏洞解决方案等三个部分。

(一)资产识别的实现资产识别主要通过扫描网络上的所有IP地址来识别出企业内部所有的主机和设备。

这个过程可以使用Nmap来实现。

例如,可以通过以下命令识别网络中所有的主机IP地址:nmap -sP 192.168.0.1/24通过该命令,系统将扫描192.168.0.1/24网络中的所有IP地址,并识别出其中所有的主机IP地址。

(二)漏洞检测的实现在资产识别后,需要进行漏洞检测,来识别出这些主机和设备上存在的安全漏洞。

在这一过程中,可以使用OpenVAS等漏洞检测工具。

基于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

分布式端口扫描检测系统的设计与实现

分布式端口扫描检测系统的设计与实现

MP构建的分布式环境 I 包。 缺点是不能侦测分布式扫描、 慢速扫描. 不 息传 递建立一个实际的、 可移植的、 有效的和灵 3
能处理分片。
14 E e ad 。 m r l
活的标准。它的目标如下:
在L nx iu 环境下安装MP . I 首先解压源程
生成目录 /mpc 。 iu 环境下c— ih 在L nx h () 1设计一个应用编程接口( 不必为编译器或 序包 .

E e l系统使用异常检测技术. mrd a 使用行为
规则匹配和流量监控来发现扫描。 缺点是不能侦 测慢速扫描、分布式扫描和新的 地址。
个系统实现库) 。
p 设备被设为缺省 . 4 通常c— 设备在网 hp 4 络的
s r t l e h ) s 的使 ( 允许有效的 2 ) 通信: 避免存储器到存储器 启动进程是rh( moese1。但是 rh 而这种权限 的拷贝 而允许计算和通信的重叠 尽可能给通 用要求在相应的主机上设置权限.
( 接E应 7 l 设计成允许线程 一 ) 安全 (ra— ted h
aey。 向 超过 P 个端口进行T P C 连接尝试. 或者在时 消息传递接口的目的是为编写消息传递程序而开 sft)
间T( 之内向超过 P个端口发送 U P数据 发的广泛使用的 秒) D 标准。象这个接口 一样, 应为消
W o d a dD. le,ewoksc rt ntrPo . o , n Wob r t r ui mo i ,r c, n e y e
个较长的时间窗内.对发起连接的I 难以解决的问题 ( P 如分片扫描包检测)检测规 。

如发现其连接的风险端 口数目达到 则使用了基于时间窗, 口策略等方法较好地 端

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

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

实验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协议封装数据包进行通信。

网络端口扫描实验报告

网络端口扫描实验报告

一、实验目的1. 理解网络端口扫描的基本原理和作用。

2. 掌握常用的网络端口扫描工具,如Xscan、Nmap和流光等。

3. 学习如何进行网络端口扫描,并对扫描结果进行分析。

4. 了解网络端口扫描在网络安全中的应用。

二、实验环境1. 操作系统:Windows 102. 网络端口扫描工具:Xscan、Nmap、流光3. 实验网络:实验室内部局域网三、实验步骤1. 安装网络端口扫描工具(1)下载并安装Xscan、Nmap和流光等网络端口扫描工具。

(2)确保实验网络连接正常,打开扫描工具。

2. 使用Xscan进行端口扫描(1)在Xscan中输入目标IP地址或域名。

(2)选择扫描方式,如全端口扫描、快速扫描等。

(3)点击“开始扫描”按钮,等待扫描完成。

(4)查看扫描结果,了解目标主机开放的端口和服务。

3. 使用Nmap进行端口扫描(1)在Nmap中输入目标IP地址或域名。

(2)选择扫描选项,如-sT(全端口扫描)、-sS(半开放扫描)等。

(3)运行命令:nmap -sT 目标IP地址或域名。

(4)查看扫描结果,了解目标主机开放的端口和服务。

4. 使用流光进行端口扫描(1)在流光中输入目标IP地址或域名。

(2)选择扫描模式,如快速扫描、全端口扫描等。

(3)点击“开始扫描”按钮,等待扫描完成。

(4)查看扫描结果,了解目标主机开放的端口和服务。

5. 分析扫描结果(1)对比三种扫描工具的扫描结果,了解不同扫描工具的特点。

(2)分析目标主机开放的端口和服务,了解其可能存在的安全风险。

四、实验结果与分析1. Xscan扫描结果通过Xscan扫描,发现目标主机开放了80(HTTP)、21(FTP)、22(SSH)等端口。

2. Nmap扫描结果通过Nmap扫描,发现目标主机开放了80(HTTP)、21(FTP)、22(SSH)等端口,并获取了更详细的信息,如操作系统类型、服务版本等。

3. 流光扫描结果通过流光扫描,发现目标主机开放了80(HTTP)、21(FTP)、22(SSH)等端口,并提供了端口对应的程序信息。

端口实验报告

端口实验报告

一、实验目的1. 了解端口扫描的基本概念和原理。

2. 掌握常用端口扫描工具的使用方法。

3. 学会分析端口扫描结果,识别潜在的安全风险。

二、实验环境1. 实验主机:Windows 10操作系统2. 实验工具:Nmap、Xscan、Nessus等端口扫描工具3. 实验对象:互联网上的目标主机三、实验内容1. 端口扫描概述2. 使用Nmap进行端口扫描3. 使用Xscan进行端口扫描4. 使用Nessus进行端口扫描5. 分析端口扫描结果四、实验步骤1. 端口扫描概述端口扫描是指通过网络发送特定数据包,检测目标主机上开放的服务端口的过程。

通过端口扫描,我们可以了解目标主机上运行的服务,从而评估其安全风险。

2. 使用Nmap进行端口扫描(1)安装Nmap:从官方网站下载Nmap安装包,按照提示进行安装。

(2)运行Nmap:在命令行中输入“nmap 目标IP”进行扫描。

(3)查看扫描结果:Nmap会生成一个文本文件,其中包含了扫描结果。

3. 使用Xscan进行端口扫描(1)安装Xscan:从官方网站下载Xscan安装包,按照提示进行安装。

(2)运行Xscan:在Xscan界面输入目标IP,点击“开始扫描”按钮。

(3)查看扫描结果:Xscan会生成一个HTML文件,其中包含了扫描结果。

4. 使用Nessus进行端口扫描(1)安装Nessus:从Tenable官方网站下载Nessus安装包,按照提示进行安装。

(2)运行Nessus:在Nessus界面输入目标IP,选择扫描模板,点击“开始扫描”按钮。

(3)查看扫描结果:Nessus会生成一个报告,其中包含了扫描结果。

5. 分析端口扫描结果(1)识别开放端口:根据扫描结果,找出目标主机上开放的端口。

(2)分析服务类型:根据开放端口,确定目标主机上运行的服务类型。

(3)评估安全风险:根据服务类型,评估目标主机的安全风险。

五、实验结果与分析1. 使用Nmap扫描目标主机,发现其开放了80、443、22、21等端口。

C语言实现端口扫描

C语言实现端口扫描

C语言实现端口扫描一、简介端口扫描是一种用于查找网络安全漏洞的技术,它能够检查服务器上打开的端口,并找出潜在的安全风险。

它可以帮助用户保护网络,防止黑客入侵和木马病毒的攻击。

本文将介绍如何使用C语言实现端口扫描。

二、实现端口扫描的原理实现端口扫描的原理是对目标主机进行TCP和UDP数据包扫描,通过观察目标主机响应来确定开放的端口。

当一个端口已经打开,对应的服务将回复一个带有TCP包头信息的数据包。

三、实现端口扫描的C语言代码下面是实现端口扫描的C语言代码:#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>int main(int argc, char** argv)int sock = 0;struct sockaddr_in serv_addr;char* ip = argv[1];int start_port = atoi(argv[2]);int end_port = atoi(argv[3]);char buffer[1024] = {0};//循环扫描端口for(int port = start_port; port <= end_port; port++)// 创建Socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)printf("Socket creation error \n");continue;}memset(&serv_addr, '0', sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(port);// Convert IPv4 and IPv6 addresses from text to binary form if (inet_pton(AF_INET, ip, &serv_addr.sin_addr)<=0)printf("Invalid address/ Address not supported \n"); continue;}//连接到目标主机if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)//连接失败表示端口关闭printf("Port %d is closed \n", port);continue;}//连接成功表示端口开放printf("Port %d is open \n", port);close(sock);}return 0;。

面向入侵防范的反端口扫描系统ScanAnti的设计与实现

面向入侵防范的反端口扫描系统ScanAnti的设计与实现

找到 一种 能够 对 端 口扫 描进 行有效 入侵 防范 的方法 。 针 对 目前端 口扫描 的类型 及工 作原理 , 改进 一些端 口扫 在 描检 测系统 不足之 处 的基础上 , 计 了一个反 端 口扫描 设 系统 S a A t,主要实 现局 域 网内的反 扫描 干扰功 能 , cn ni 可作 为 Wid ws 统防火 墙 的辅 助 工具 。它 应用于 共 no 系
针 对 目前端 口扫描 的类 型及工作 原理 ,设 计并实现

个 适用于局域 网的反端 口扫描 系统 ,对 端 口扫 描进行
1 1 系 统设 计 思 路 . 设 计反端 口扫描 系统 S a An i c n t 的初衷 ,就是试 图
检测 并进ห้องสมุดไป่ตู้行有效 的入 侵防范 , 是本论文 主要探讨 的内容 。
加快 了系统记 录 、检 索 、统计 网络 信 息的速度 , 为 系统 的 高效运行提 供 了有 力的保 障 。 关键词 :入侵 防 范 ;反 端 口扫描 ;数据库
1 反 端 口扫描 系统 SaA t的设计 cn ni 端 口扫描是 通过称 为 “ 扫描 器 ” ( an r s n e)的程 序 c
“ o e t c l os I o” “ ot c Po t nf 、 Pr t c Lo a H t nf 、 Pr e t r l o”
“cn nivn” Sa A t e t,分别存储本地局域网受保护主机信 E 针对现有端 口扫描检测工具和软件所存在 的主要 问 息 、受保 护端 口信息 以及 1 P异常 数据包信 息记录 。 在 反 端 口扫 描 系 统 S Ca n A nti 中 ,数 据 表 题 ,在 设计反 端 口扫描 系统 S a An i c n t 的过程 中运 用 了 如下 的手段和 技术方 案 。 “ rtcL cl sIf”实现对 受保护 主机信息 的存 P oe to aHotno ①用 Wip a n c p来 捕获局域 网 内数 据包 储 ;数据表 “ r tcP rlf ”实 现对受保护 端 口信息 P oet o t o n W ip a n c p是 UNI X下 的 l p a i c p移植到 wid ws 的 存 储 ; 而 在 系 统 执 行 过 程 中 , 数 据 表 b no

端口扫描器的几种代码实现方案

端口扫描器的几种代码实现方案

端⼝扫描器的⼏种代码实现⽅案 搞安全的应该都知道端⼝扫描在渗透测试、漏洞扫描过程中的重要性,其与URL爬⾍等技术构成了漏洞扫描的第⼀阶段,即⽬标信息收集。

因此能否开发出⼀款⾼效稳定的端⼝扫描器,往往决定了漏洞扫描器的好坏。

那么说到端⼝扫描器,我们往往会先想到nmap、masscan等神器,它们是这个领域的标杆。

但本篇并不是为了介绍这⼏款⼯具,⽽是谈谈如何⾃研⼀款⾼效稳定的端⼝扫描器。

端⼝扫描器,顾名思义就是为了探测服务器上的某个端⼝是否开放,究其原理可以分为很多种探测⽅式,⽐如tcp三次握⼿扫描,syn扫描等等,本篇并不打算详细介绍这些扫描⽅式的区别,有兴趣的可以看下nmap的⽂档,对这⼏种扫描⽅式有详细的介绍。

那么说下本⽂重点,基于这⼏天我研究并尝试利⽤python、go开发tcp扫描器、tcp-syn扫描器,以及对⽐它们之间的速度性能、稳定性差异情况,将测试结果在此做个记录,并分享⼀下代码以及⽅案。

说明:⽂章结尾将给出本篇所使⽤代码的Github地址,可供⼤家测试,代码测试环境为centos7。

scan for Python Socket Python的Socket模块可以创建套接字,创建tcp三次握⼿连接,以此探测⽬标端⼝是否存活。

本篇将使⽤socket模块编写tcp扫描以及syn 扫描,并对⽐两者的差异。

tcp scan 快来看代码:1#! -*- coding:utf-8 -*-2import time3import socket4 socket_timeout = 0.15def tcp_scan(ip,port):6try:7 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)8 s.settimeout(socket_timeout)9 c=s.connect_ex((ip,port))10if c==0:11print “%s:%s is open” % (ip,port)12else :13# print “%s:%s is not open” % (ip,port)14pass15except Exception,e:16print e17 s.close()18if__name__== “__main__” :19 s_time = time.time()20 ip = “14.215.177.38”21for port in range(0,1024):22 ” ‘ 此处可⽤协作 ‘ ”23 tcp_scan(ip,port)24 e_time = time.time()25print “scan time is “ ,e_time-s_time 运⾏结果: 说明⼀下:可以看到此代码扫描1024个端⼝⽤了102s,当然代码并没有⽤多线程、协程等⽅式提⾼扫描效率(使⽤协程测试过扫65535个端⼝⽤时400s左右),因为python在这⽅⾯的能⼒⽐较弱;由于扫描过程中会建⽴tcp三次握⼿,因此⽐较消耗资源。

网络主机端口扫描系统设计与实现

网络主机端口扫描系统设计与实现

网络主机端口扫描系统设计与实现一、引言网络主机端口扫描是指通过发送一系列网络数据包来检测目标主机上哪些端口是开放的。

端口扫描在网络安全领域中起着重要的作用,它可以帮助安全人员识别网络中存在的漏洞和弱点。

本文将介绍一个网络主机端口扫描系统的设计和实现。

二、系统设计1.功能需求(1)根据用户输入的目标主机IP地址和端口范围,对目标主机上的端口进行扫描;(2)支持常见的扫描方法,如TCP SYN扫描、TCP connect扫描和UDP扫描;(3)显示扫描结果,包括开放端口和关闭端口;(4)支持多线程的扫描,提高扫描速度;(5)支持用户自定义的扫描策略,如扫描超时时间、扫描线程数量等;(6)提供图形化界面,方便用户操作和查看结果。

2.系统架构本系统的架构主要包括用户界面模块、扫描模块和结果显示模块。

用户界面模块:用于接收用户输入的目标主机IP地址和端口范围,以及自定义的扫描策略。

用户界面可以采用图形化界面或命令行界面。

扫描模块:根据用户输入的目标主机信息和扫描策略,使用相应的扫描方法对目标主机进行端口扫描。

如果用户选择了多线程扫描,该模块需要进行线程管理和任务分配。

结果显示模块:将扫描结果展示给用户,包括开放端口和关闭端口。

可以采用图形化界面或命令行界面来展示结果。

3.系统流程(1)用户通过用户界面模块输入目标主机IP地址和端口范围。

(2)用户选择扫描方法和自定义的扫描策略。

(3)用户点击开始扫描按钮。

(4)扫描模块接收用户的输入,并根据扫描策略选择相应的扫描方法。

(5)扫描模块根据扫描方法对目标主机进行端口扫描,如果是多线程扫描,则进行线程管理和任务分配。

(6)扫描模块将扫描结果返回给结果显示模块。

(7)结果显示模块将扫描结果展示给用户。

四、系统实现本节将介绍如何实现一个基于Python语言的网络主机端口扫描系统。

1.实现框架可以使用Python的标准库socket来实现端口扫描。

(1)创建一个socket对象;(2)设置socket的超时时间;(3)使用socket的connect函数连接目标主机的指定端口;(4)根据连接的结果判断端口是否开放;(5)根据用户输入的端口范围,循环执行上述步骤,对目标主机的多个端口进行扫描。

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

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

中南大学之五兆芳芳创作《计较机网络》课程设计陈述题目多线程端口扫描程序设计与实现学生姓名孙毅指导教师刘嫔学院信息科学与工程学院专业班级信息平安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. 多线程/多进程:利用并发编程技术提高扫描效率。

基于三次握手的端口扫描器设计与实现

基于三次握手的端口扫描器设计与实现

摘 要: 使用 端 口扫 描器 可以主 动的发 现网络 安全 隐患 ,端 口扫描 器的 实现途径 很多 ,使用 TCP 二次握手 协议 是一种 基本 的方 法 ,最后 给 出 了 C 语 言下 实现的 源程 序 。 关键 词 :端 口扫 描 ;T C P 报 文 ;三 次握 手 中图分类号 :G6 . 8 2 5 文献标识C &1 H00Yl0MQ N C NE NLO !RA1 E E C N F T 0 :
基于 三次 握 手的端 口扫描器 设计 与实现
王树森 杨艳 ( 济源职业技 术学院 河南济 源 445 ; 5 6 C
1 引言 .
随 着互联 网络 的飞 速发 展 , 网络 入 侵行 为 日益严 重 ,网络 安全 成为 人们 的关 注 的热 点问 题。扫描 技 术是解 决 网络安 全领 域的 重 要技 术之一 ,使 用扫描 技术 可以 发现 计算 机 安全 漏洞并 加以 防范 。安全 扫描 技术 与防 火 墙 ,入侵检 测 系统互相 配 合 ,能够 有效 提高 网络 的安 全性 。安全 扫描技 术是 一种 主 动的 防范 措施 ,可 以有效 避免 黑客攻 击行 为 ,做 到防患于未然 。 在计算 机 网络通 信 中 ,通 信双 方是 通过 个称为套接 口的二元组 (P地址 ,端 口 I 号 ) 标识 的 , 传输 层来 说 , 口 是 一个 来 对 端 就 通 信的通 道 , 同时也是 一 个非法 入侵 通道 , 所 以说 , 口扫描 是发现 入 侵的关 键 。 口扫描 端 端 器是 用于端 口扫描的 重要 工具 ,通过 端 口扫 描 器可 以知道 本地或 远端 主机 的哪 些端 口被 使用, 并即时关闭被非法使用的端 口。 下面详 细介 绍端 口扫描 器 的工 作原理 ,并 给出 了一 个实 用的端 口扫描 程序 。

端口扫描实验报告

端口扫描实验报告

端口扫描实验报告网络端口扫描实验报告姓名:刘俊峰学号: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()就可以成功返回,否则这个端口不可用,即没有提供服务。

端口扫描器的设计与实现

端口扫描器的设计与实现

端口扫描器的设计与实现引言:一、需求分析1.扫描目标:指定要扫描的IP地址或域名;2.扫描端口范围:设置要扫描的端口范围;3.扫描方式:选择扫描的方式,如TCP扫描、UDP扫描等;4.扫描结果分析:对扫描结果进行分析和报告。

二、设计方案1.扫描目标:用户输入要扫描的IP地址或域名;2.扫描端口范围:用户设置要扫描的端口范围;3.扫描方式:提供TCP扫描、UDP扫描等方式供用户选择;4.扫描流程:根据用户设置的目标和方式,依次扫描每个端口,并记录扫描结果;5.扫描结果分析:对扫描结果进行分析和报告。

三、具体实现1.获取用户输入:通过命令行参数或图形用户界面获取用户输入的扫描目标、端口范围和扫描方式等信息;2.扫描流程:根据用户输入的扫描方式,循环遍历指定的端口范围,依次进行端口扫描;a.TCP扫描:使用套接字库进行TCP连接测试,如果连接成功,则表示该端口是开放的;b.UDP扫描:通过发送UDP数据包并等待回复,判断端口是否开放;3.扫描结果记录:对每个扫描的结果进行记录,包括IP地址、端口号和扫描状态等信息;4.扫描结果分析与报告:对记录的扫描结果进行分析,生成报告,包括开放端口列表和可能的漏洞等信息。

四、实例代码以下是一个简单的Python代码示例,演示了一个基于TCP连接的端口扫描器的实现:```pythonimport socketdef scan_port(ip, port):try:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)result = s.connect_ex((ip, port))if result == 0:print(f"Port {port} is open")s.closeexcept:passdef scan(ip, start_port, end_port):print(f"Scanning {ip}...")for port in range(start_port, end_port + 1):scan_port(ip, port)if __name__ == "__main__":ip = input("Enter IP address to scan: ")start_port = int(input("Enter starting port: "))end_port = int(input("Enter ending port: "))scan(ip, start_port, end_port)```该代码中的 `scan_port` 函数用于扫描指定IP地址和端口的开放状态,使用了Python的 `socket` 库进行TCP连接测试。

端口扫描实验报告

端口扫描实验报告

综合实验报告( 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。

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

河南理工大学计算机科学与技术学院课程设计报告2015— 2016学年第一学期课程名称网络与信息安全设计题目端口扫描器的设计与实现姓名范腾飞学号************专业班级网络1301指导教师叶青2016 年 1 月16 日目录一.课程设计的目的........................................................ 二.课程设计的要求........................................................ 三.端口扫描器相关知识.................................................3.1:端口的基本概念...............................................3.2:常见的端口介绍...............................................3.3:端口扫描器基本原理.......................................3.4:端口扫描常用技术........................................... 四.实验流程....................................................................4.1:基本步骤.............................................................4.2:主要函数...............................................................4.3流程图..................................................................... 五.实验结果..................................................................... 六.总结........................................................................一:课程设计的目的模拟常用的端口扫描软件原理,利用Socket实现基本的端口扫描功能。

扫描器是网络信息收集的一种方法,从功能上可分为漏洞扫描器和端口扫描器。

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

二:课程设计要求本课程设计的目标是设计并实现一个网络扫描器,它通过与目标主机TCP/IP 端口建立连接并请求某些服务,记录目标主机的应答,分析目标主机相关信息,从而发现目标主机某些内在的安全弱点。

扫描器通常分两类:漏洞扫描器和端口扫描器。

端口扫描器用来扫描目标机开放的服务端口以及端口相关信息。

漏洞扫描器检查目标中可能包含的大量已知的漏洞,如果发现潜在的漏洞可能性,就报告给扫描者。

网络漏洞端口扫描器对目标系统进行检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。

然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。

漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。

在分析总结目前现有的扫描软件,在掌握扫描器的原理基础上,首先设计、实现一种端口扫描程序,存储扫描结果。

在此基础上,有余力的同学对已经开放的重要端口有具体漏洞分析检测。

程序具体要求实现以下任一程序:高效端口扫描器设计与实现:参照常见端口扫描器,在局域网内,能对所有计算机进行常用端口的高速扫描,给出扫描结果。

另外根据配置不同的网段,实现正对校园网络的基于网段的高速扫描。

高效的漏洞扫描器的设计与实现:设计网络漏洞扫描仪的结构,建立常见的漏洞库,并基于该漏洞库,实现高效的基于网段的漏洞扫描器。

主机脆弱性分析系统:将漏洞和端口扫描结合起来,实现针对主机的脆弱性分析系统。

三:相关知识1.端口的基本概念:我们这里所说的端口,不是计算机硬件的i/o端口,而是软件形式上的概念。

服务器可以向外提供多种服务,比如,一台服务器可以同时是web服务器,也可以是ftp服务器,同时,它也可以是邮件服务器。

为什么一台服务器可以同时提供那么多的服务呢?其中一个很主要的方面,就是各种服务采用不同的端口分别提供不同的服务。

根据提供服务类型的不同,端口分为两种,一种是tcp端口,一种是udp端口。

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

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

那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。

2.常见端口介绍端口:21 服务:FTP说明:FTP服务器所开放的端口,用于上传、下载。

最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。

这些服务器带有可读写的目录。

木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。

端口:23 服务:Telnet说明:远程登录,入侵者在搜索远程登录UNIX的服务。

大多数情况下扫描这一端口是为了找到机器运行的*作系统。

还有使用其他技术,入侵者也会找到密码。

木马Tiny Telnet Server就开放这个端口端口:25 服务:SMTP说明:SMTP服务器所开放的端口,用于发送邮件。

入侵者寻找SMTP服务器是为了传递他们的SPAM。

入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL 服务器上,将简单的信息传递到不同的地址。

木马Antigen、Email PasswordSender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口端口:80 服务:HTTP说明:用于网页浏览。

木马Executor开放此端口。

3.端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。

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

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

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

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

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

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

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

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

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

但这种方法的缺点是很容易被察觉,并且被防火墙将扫描信息包过滤掉。

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

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

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

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

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

这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺点是必须要有root权限才能建立自己的SYN数据包。

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

相反,FIN数据包在扫描过程中却不会遇到过多问题,这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。

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

这种方法和系统的实现有一定的关系,有的系统不管端口是否打开都会回复RST,在这种情况下此种扫描就不适用了。

另外这种扫描方法可以非常容易的区分服务器是运行Unix系统还是NT系统。

4、IP段扫描:这种扫描方式并不是新技术,它并不是直接发送TCP探测数据包,而是将数据包分成两个较小的IP段。

这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。

但必须小心:一些程序在处理这些小数据包时会有些麻烦。

5、TCP 反向 ident扫描:ident 协议允许(rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。

例如扫描者可以连接到http端口,然后用identd来发现服务器是否正在以root权限运行。

这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。

6、FTP 返回攻击:FTP协议的一个有趣的特点是它支持代理(proxy)FTP连接,即入侵者可以从自己的计算机和目标主机的FTP server-PI(协议解释器)连接,建立一个控制通信连接。

然后请求这个server-PI激活一个有效的server-DTP(数据传输进程)来给Internet上任何地方发送文件。

对于一个User-DTP,尽管RFC明确地定义请求一个服务器发送文件到另一个服务器是可以的,但现在这个方法并不是非常有效。

这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服务器造成打击,用尽磁盘,企图越过防火墙”。

四:实验流程步骤:1.先输入想要扫描的网段;2.然后将输入的网段转化为可排序的ip数组3.建立多个线程,每个线程扫描一个ip。

每个线程内先建立数据流套接字,然后绑定ip端口进行扫描。

将扫描端口保存到g_map_ScanResult。

4.清理结束后进程,输出结果。

相关文档
最新文档