端口扫描程序设计与实现

合集下载

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

网络主机扫描程序的设计与实现范文精简版

网络主机扫描程序的设计与实现范文精简版

网络主机扫描程序的设计与实现网络主机扫描程序的设计与实现1. 引言网络主机扫描程序是一种用于发现和识别网络上主机的工具。

通过扫描目标网络的IP地质空间,该程序可以提供有关主机的信息,如主机名、IP地质、开放的端口等。

这对于网络管理员和安全专家来说非常有用,因为它们可以用于评估网络的安全性和进行潜在问题的识别。

2. 功能需求网络主机扫描程序应具备以下基本功能:- 扫描指定IP地质范围内的主机;- 检测主机是否在线;- 识别主机的操作系统类型;- 扫描主机开放的端口;- 扫描报告。

3. 设计与实现该网络主机扫描程序的设计与实现过程可以分为以下几个关键步骤:3.1 网络扫描模块设计网络扫描模块负责扫描指定IP地质范围内的主机。

设计该模块时,需要确定使用的扫描技术和算法。

常见的扫描技术包括TCP连接扫描、SYN扫描和UDP扫描。

根据实际需求选择合适的技术,并实现相应的算法。

例如,TCP连接扫描可以利用TCP三次握手的过程来判断主机是否在线。

3.2 操作系统识别模块设计操作系统识别模块用于识别主机的操作系统类型。

根据主机的响应包进行分析,判断主机所使用的操作系统。

常用的识别方法包括比较响应包中的特征值、发送特定的网络请求以观察响应等。

3.3 端口扫描模块设计端口扫描模块用于扫描主机开放的端口。

可以使用各种扫描算法进行端口扫描,如TCP全连接扫描、TCP半开放扫描(SYN扫描)、UDP扫描等。

根据需求和性能考虑,选择合适的算法并进行实现。

3.4 报告模块设计报告模块用于扫描结果的报告。

根据扫描模块返回的数据和识别结果,可读性强的扫描报告。

报告可以包括主机的基本信息、开放端口列表、操作系统类型等。

4. 技术和算法实现网络主机扫描程序涉及多种技术和算法。

以下是一些常用的技术和算法:- TCP/IP协议:网络扫描程序需要基于TCP/IP协议进行通信和扫描。

- 多线程编程:利用多线程可以提高扫描速度和效率。

- 正则表达式:用于从响应包中提取有用的信息。

基于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 如分片扫描包检测)检测规 。

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

简单端口扫描程序的实现

简单端口扫描程序的实现

计算机网络课程设计论文题目:简单端口扫描程序的实现院(部)名称:计算机科学与工程学院学生姓名:专业:学号:指导教师姓名:报告提交时间:报告答辩时间:(不填)目录一、设计要求 (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 通过这两个命令,你能收集到目标计算机上的有关用户的消息。

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

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

实验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)等端口,并提供了端口对应的程序信息。

基于多线程的端口扫描程序课程设计报告

基于多线程的端口扫描程序课程设计报告

基于多线程的端口扫描程序课程设计报告IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】滁州学院课程设计报告课程名称:设计题目:基于多线程的端口扫描程序院部:计算机与信息工程学院专业:网络工程组别:第六组起止日期: 2012年12月31日~2013 年1月6日指导教师:计算机与信息工程学院二○一二年制课程设计任务书目录1需求分析1..1网络安全二十一世纪是信息化、网络化的世纪,信息是社会发展的重要资源。

信息安全保障能力是一个国家综合国力、竞争实力和生存能力的重要组成部分,是世界各国在奋力攀登的制高点。

网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行。

网络安全包括技术领域和非技术领域两大部分:非技术领域包括一些制度、政策、管理、安全意识、实体安全等方面的内容;技术领域包括隐患扫描、防火墙、入侵检测、访问控制、虚拟专用网、CA认证、操作系统等方面的内容。

这些技术的目标是保证信息的可控性、可用性、保密性、完整性、和不可抵赖性。

端口扫描属于安全探测技术范畴,对应于网络攻击技术中的网络信息收集技术。

课程背景随着Internet的不断发展,信息技术已成为促进经济发展、社会进步的巨大推动力。

端口扫描技术是网络安全扫描技术一个重要的网络安全技术。

与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。

安全扫描是安全技术领域中重要的一类。

通过扫描能自动检测远端或本地主机系统信息,包括主机的基本信息(如计算机名、域名、组名、操作系统型等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。

网络的安全状况取决于网络中最薄弱的环节,任何疏忽都有可能引入不安全的因素,最有效的方法是定期对网络系统进行安全分析,及时发现并修正存在的脆弱,保证系统安全。

主机端口扫描程序设计

主机端口扫描程序设计

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

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

本程序是在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 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。

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;。

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

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

端⼝扫描器的⼏种代码实现⽅案 搞安全的应该都知道端⼝扫描在渗透测试、漏洞扫描过程中的重要性,其与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. 多线程/多进程:利用并发编程技术提高扫描效率。

综合实验报告书(端口扫描)

综合实验报告书(端口扫描)

综合实验报告( 2010 -- 2011 年度第二学期)名称:网络综合实验题目端口扫描程序院系:信息工程系班级:网络08K2学号:学生姓名:指导教师:鲁斌李莉王晓霞张铭泉设计周数: 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的计算机的某一个或某些端口是否正在工作。

端口扫描器的设计与实现

端口扫描器的设计与实现

端口扫描器的设计与实现引言:一、需求分析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连接测试。

网络报告实验二端口扫描实验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 实验类型
验证型实验
2实验目的
●了解端口扫描的基本概念和工作原理;
3背景知识
●端口扫描原理
在“计算机网络”课程中,我们知道完成一次TCP连接需要完成三次握手才能建立。

端口扫描正是利用了这个原理,通过假冒正常的连接过程,依次向目标主机的各个端口发送连接请求,并根据目标主机的应答情况判断目标主机端口的开放情况,从而分析并对一些重要端口实施攻击。

客户端服务端
完整扫描连接过程示意图
另一种扫描方式称为半开扫描,出于欺骗的目的,半开扫描在收到服务端的应答信号(SYN+ACK)后,不再发送响应信号(ACK)。

一次连接过程如下图所示:
客户端服务端
半开扫描连接过程示意图
4 实验内容
1、编写一个利用全连接的端口扫描程序,能显示目标主机的端口开放情况。

要求能在命令行输入要扫描的目标主机和端口范围。

比如:scan *.*.*.* nnnn-mmmm。

5 实验思考
1、阐述全连接扫描的原理。

2、你的程序是否考虑了扫描效率?如没有考虑你准备如何改进?。

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

端口扫描程序设计
与实现
课程设计报告
( -- 第2学期)
名称:网络综合实验
题目:端口扫描程序设计与实现
院系:计算机系
班级:网络1202
学号:
学生姓名:
指导教师:李丽芬曹锦刚刘晓峰
设计周数: 2周
成绩:
日期:年 7 月 5 日
网络综合实验
任务书
一、实验名称:端口扫描程序设计与实现
二、目的与要求
1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP 的计算机的端口工作情况。

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

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

4.学生人数:1人。

三、主要内容
1.编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。

(1) 设定好一定的端口扫描范围,并设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;(3) 创立socket,经过socket的connect方法来连接远程IP地址以及对应的端口;(4) 如果返回false,表示端口没有开放,否则端口开放。

四、进度计划
五、设计成果要求
1.完成规定的实验任务,保质保量;
2.完成综合实验报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。

六、考核方式
1.平时成绩+验收答辩+实验报告;
2.五级分制。

学生姓名:韦笑
指导教师:李丽芬曹锦刚刘晓峰
年7 月 5 日
一、综合实验的目的与要求
1.目的:加深对《计算机网络体系结构》课程知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,加深对JAVA编程语言的使用,促进编程能力的提高,同时为网络编程打下一个比较好的基础。

同时对实验的过程要有完全的了解。

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

二、综合实验正文
1、主要方法
TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。

发送方和接收方的成正确两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(一般都是server socket)等待建立连接时,另一个socket能够要求进行连接,一旦这两个socket连接起来,它们就能够进行双向数据传输,双方都能够进行发送或接收操作。

本实验在一台主机创立socket,与远程主机的某一个端口建立TCP 连接,经过java中的isConnected() 函数判断连接是否建立成功,若连接建立成功,说明该端口开放;否则不开放。

2、实验流程图。

相关文档
最新文档