网络端口扫描共工具的设计与实现文档格式.docx

上传人:b****5 文档编号:19508951 上传时间:2023-01-07 格式:DOCX 页数:9 大小:65.32KB
下载 相关 举报
网络端口扫描共工具的设计与实现文档格式.docx_第1页
第1页 / 共9页
网络端口扫描共工具的设计与实现文档格式.docx_第2页
第2页 / 共9页
网络端口扫描共工具的设计与实现文档格式.docx_第3页
第3页 / 共9页
网络端口扫描共工具的设计与实现文档格式.docx_第4页
第4页 / 共9页
网络端口扫描共工具的设计与实现文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

网络端口扫描共工具的设计与实现文档格式.docx

《网络端口扫描共工具的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《网络端口扫描共工具的设计与实现文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

网络端口扫描共工具的设计与实现文档格式.docx

1.2设计平台及设计语言

本系统是在win7操作系统上,通过visualstudio2010软件使用C#语言设计编写完成的。

1.3设计背景及目的

网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,

有些却是大门紧闭的。

在网络中,把这些城堡的城门”称之为计算机的端口”

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

入侵者的身份和意图。

一般说来,扫描端口有以下目的:

判断目标主机上开放了哪些服务

判断目标主机的操作系统

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

而如果管理员先掌握了这些端口服务的安全漏洞,就

能采取有效的安全措施,防范相应的入侵

2设计原理

2.1端口的基本概念

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

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

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

如果要和远程主机A的程序通信,那

么只要把数据发向A端口就可以实现通信了。

端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。

由此可见,通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。

端口是一个16bit的地址,用端口号进行标识不同作用的端口。

端口一般分为两类。

熟知端口号:

范围从0到1023,这些端口号一般固定分配给一些服务。

比如21端口分配给FTP服务,25端口分配给SMTP服务,80端口分配给HTTP服务,135端口分配给RPC服务等等

动态端口号:

动态端口的范围从1024到65535,只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。

关闭程序进程后,就会释放所占用的端口号。

2.2端口扫描技术

2.2.1TCPconnect()扫描

这是最基本的TCP扫描。

操作系统提供的connect()系统调用,用来与每一

个感兴趣的目标计算机的端口进行连接。

如果端口处于侦听状态,那么connect。

就能成功。

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

这个技术的一个最大的优点是,你不需要任何权限,系统中的任何用户都有权利使用这个调用。

另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect。

调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。

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

但这种方法的缺点是很容易被发觉,并且被过滤掉。

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

2.2.2TCPSYN扫描

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

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

一个

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

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

如果收到一个SYN|ACK则扫描程序必须再发送一个RST信号,来

关闭这个连接过程。

这种扫描技术的优点在于一般不会在目标计算机上留下记

录。

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

223TCPFIN扫描

有的时候有可能SYN扫描都不够秘密。

一些防火墙和包过滤器会对一些指

定的端口进行监视,有的程序能检测到这些扫描。

相反,FIN数据包可能会没有

任何麻烦的通过。

这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN

数据包。

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

这种方法和系统的实现有一定的关系。

有的系统不管端口是否打开,都回复RST,这样,这种扫描

方法就不适用了。

并且这种方法在区分Unix和NT时,是十分有用的。

2.2.4IP段扫描

这种不能算是新方法,只是其它技术的变化。

它并不是直接发送TCP探测数据包,是将数据包分成两个较小的IP段。

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

但必须小心。

一些程序在处理这些小数据包时会有些麻烦。

2.2.5TCP反向ident扫描

ident协议允许(fc14佝看到通过TCP连接的任何进程的拥有者的用户名,

即使这个连接不是由这个进程开始的。

因此你能,举个例子,连接到http端口,

然后用identd来发现服务器是否正在以root权限运行。

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

2.3本系统设计原理

本系统采用的是TCPconnect。

扫描技术

众所周知,端口存在两种,UDP和TCP。

UDP协议由于是非面向连接的,对UDP端口的探测也就不可能像TCP端口的探测那样依赖于连接建立过程,这也使得UDP端口扫描的可靠性不高。

而TCP由于其connectionoriented的特性,为端口的扫描提供了基础。

众所周知,TCP建立连接时有三次握手。

先是

client端往server某端口发送请求连接的SYN包,server的该端口如果允许连接,会给client端发一个SYN+ACK回包,client端收到server的SYN+ACK包后再给server端发一个确认包ACK(ack=k+1),TCP连接正式建立。

基于连接的建立

过程,可以想到,假如要扫描某一个TCP端口,可以尝试与该端口进行TCP连接,如果该端口处于打开状态,通过TCP三次握手就能成功建立连接,也就是说,如果连接成功,就可以判断目标扫描出于打开状态,否则,目标端口处于关闭状态。

这就是TCP端口扫描的基本原理。

连接请求

ACK,SEQ=X+1,ACK=Y+1

确认

图2.1TCP连接建立过程

3设计步骤

3.1程序设计

程序设计的总体思路:

本系统要求扫描指定IP地址的主机的常用端口,首先在程序中要定义一个数组,用于指定常用端口包含的内容;

其次需要创建一个扫描方法,当用户输入指定IP后,循环调用该方法对指定IP的常用端口进行扫描,并将扫描结果以列表形式显示。

程序的大概执行过程:

第一步,用户输入指定IP地址,点击扫描后,创建

线程,并创建ThreadStart的委托对象;

第二步,若当前扫描端口数量未超过定义的数组上限值,调用扫描线程Scan(对该端口尝试连接;

第三步,循环扫描数组里定义的所有端口,记录每个端口是否开放情况;

第四步,数组内的所有端口扫描完成后,匹配过滤原则,显示扫描结束。

流程图如图3.1所示

幵始

输入要扫描的指定IP地址

图3.1程序流程图

3.2程序实现

3.2.1创建线程

当用户点击扫描之后,执行以下程序代码,创建线程并创建线程Threadstart委托对象,同时将显示框初始化:

privatevoidbtnScan_Click(objectsender,System.EventArgse)

{

II创建线程,并创建线程ThreadStart委托对象

Threadprocess=newThread(newThreadStart(PortScan));

process.Start();

//显示框初始化

lbResult.ltems.Clear();

lbResult.ltems.Add("

端口扫描器1.0."

);

"

}

3.2.2TCP扫描方法

此段代码实现了对指定端口扫描功能,此次安城定义了一个临时变量port_now,当该线程被调用后,创建TcpClient对象,尝试对指定端口进行

TCP连接,并将结果显示在显示框:

privatevoidSean()

intport_now=port;

done[port_now]=true;

Addr=txtAddr.Text;

//创建TcpClient对象

TcpClientobjTCP=null;

try

//用TcpCIient对象扫描端口,连接成功表示端口开放

//连接不成功表示端口未开放或防火墙过滤

objTCP=newTcpCIient(Addr,scan_port[port_now]);

IbResult.ltems.Add(”端口"

+scan_port[port_now].ToString()+

开放"

catch

未开放"

323端口扫描主函数

此段代码通过调用Scan()方法,实现了对指定端口组个扫描功能。

当执行时,首先对当前扫描端口进行过滤原则匹配,若扫描端口排序超过定义数组最大值,则显示扫描结束;

反之,调用Scan(线程对该端口进行扫描。

此段代码中还定义了当未完成扫描,强行退出时,直接终止执行程序:

privatevoidPortScan()

lbResult.Items.Add("

开始扫描...可能需要您等待几分钟)"

for(inti=0;

i<

16;

i++)

port=i;

//使用该端口的扫描线程

scanThread=newThread(newThreadStart(Scan));

scanThread.Start();

//使线程睡眠

System.Threading.Thread.Sleep(100);

//未完成时情况

while(!

0K)

OK=true;

if(!

done[i])

OK=false;

break;

System.Threading.Thread.Sleep(IOOO);

扫描结束!

3.3测试结果

程序开始执行时,主界面初始化,用户可在左边文本框中输入想要扫描的主

机的IP地址,点击扫描,则扫描开始。

主界面如图3.2所示

图3.2系统主界面

当用户输入指定IP,本测试使用本地主机作为测试,输入127.0.0.1,点击

扫描,扫描结果以列表的形式显示在右边的文本框中。

测试结果如图3.3所示。

图3.3端口扫描测试截图

4结束语

本次课程设计的课题是设计实现一个简单的端口扫描工具,此次课程设计程

序在VS2010软件中使用C#编写,该工具可扫描局域网的某计算机常用端口是否烤房,并以本地主机作为测试。

经过这两个星期的课程设计,通过图书馆和网上查找资料,顺利完成了设计和开发,端口扫描系统开发完毕。

系统基本符合要求,但是鉴于此系统是基于TCP三次握手过程实现端口扫描,该系统扫描时花费时间偏长。

在整个设计过程中,出现过很多的问题,得到了老师和同学的帮助,在不断

学习的过程中我体会到这次课程设计是一个不断学习的过程,从设计初的模糊认识到最后能够顺利完成,我体会到在实践中学习的重要性。

设计过程中,由于要实现某些功能,网上资源解决了我的问题。

多借鉴网络资源也是一种很好的学习方法

总之,通过这次课程设计,我深刻体会到要做好一个完整的系统,需要有系统的思维方式和方法,对待一个新的问题,要耐心、要善于运用已有的资源来充实自己。

同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样对于系统而言才能更加有效。

参考文献

[1]孙钟秀,费翔林,骆斌•操作系统教程(第4版)[M].:

高等教育出版社,

2008

[2]马骏.C#网络应用编程(第二版).背景:

人民邮电出版社,2010

[3]范建华、胥光辉、张涛等译.TCP/IP详解卷1:

协议•机械工业出版

社.2009年第1版。

[4]谢希仁.计算计网络(第5版)[M].:

电子工业出版社,2008

⑸TCP端口扫描浅析

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1