端口扫描程序的设计与实现(12页).doc

上传人:1595****071 文档编号:37346099 上传时间:2022-08-30 格式:DOC 页数:12 大小:182KB
返回 下载 相关 举报
端口扫描程序的设计与实现(12页).doc_第1页
第1页 / 共12页
端口扫描程序的设计与实现(12页).doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《端口扫描程序的设计与实现(12页).doc》由会员分享,可在线阅读,更多相关《端口扫描程序的设计与实现(12页).doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-端口扫描程序的设计与实现-第 V 页长沙理工大学网络协议编程课程设计报告端口扫描程序的设计与实现学 院 计算机与通信工程学院 专 业 网络工程 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程设计任务书计算机与通信工程学院 网络工程专业课程名称网络协议编程课程设计时间20152016学年第1学期1819周学生姓名指导老师题 目端口扫描程序的设计与实现主要内容:(1)实现通过异步扫描对指定网段内的主机或者单个主机对指定端口或者指定的端口范围进行扫描。(2)实现通过多线程批量扫描对指定网段内的主机或者单个主机对指定端口或者指定的端口范围进行扫描。(3) 设置异常处理机制,能对端口扫描

2、出现异常时做出处理。要求:(1) 结合网络协议编程课程设计所学知识设计并实现端口扫描程序的设计与实现。(2) 学会文献检索的基本方法和综合运用文献的能力。(3) 通过课程设计培养严谨的科学态度,认真的工作作风和团队协作精神。应当提交的文件:(1) 课程设计学年论文。(2) 课程设计附件(相关图纸、设备配置清单、报告等)。课程设计成绩评定院 系 计算机与通信工程 专 业 班 级 学 号 学生姓名 指导教师 指导教师对学生在课程设计中的评价评分项目优良中及格不及格学习态度与遵守纪律情况课程设计完成情况课程设计报告的质量指导教师成绩 指导教师签字 2016年 月 日课程设计答辩组对学生在课程设计中的

3、评价评分项目优良中及格不及格课程设计完成情况课程设计报告的质量课程设计答辩答辩组成绩 答辩组长签字 2016年 月 日课程设计综合成绩 注:课程设计综合成绩指导教师成绩60%答辩组成绩40%端口扫描程序的设计与实现学生姓名: 指导老师: 摘 要 计算机信息网络的发展加速了信息化时代的进程,随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全也日益明显。端口扫描技术是发现安全问题的重要手段之一。本平台上使用C#语言完成的一个端口扫描程序。此程序主要完成了多线程批量扫描和异步扫描功能。多线程批量扫描,能对单个指定的主机或者指定网段内的所有主机进行特定端口或指定的端口段内的端口进行逐个扫

4、描,此端口扫描程序能以较快的速度准确地扫描出主机侦听的空闲端口。相对于多线程批量扫描,异步扫描能以更快的速度准确地扫描出主机侦听的空闲端口。扫描结果以列表的形式直观显示出来。关键词 端口扫描;多线程批量扫描;异步扫描Design and implementation of port scanning programStudent name:YU Wenlong Advisor:LONG JizhenAbstract Computer information network development speeds up the process of the information age, wit

5、h the increase of the degree of social networks, the computer network has become increasingly dependent on, network security is increasingly obvious. Port scanning technology is one of the important methods to find security problems. This procedure is in the.NET platform using C# language to complet

6、e a port scanner. This program mainly completes the multi thread batch scanning and asynchronous scanning function. Multi-threaded batch scanning, all the host to specify a single host or network segment specified for a particular port and the port specified port scans one by one, the port scanning

7、procedures can fast accurately scan host listens to the free port. Compared with the multi thread asynchronous batch scanning, scanning can accurately scan host listens to the free port at a faster speed. Scan results are displayed in the form of a list. Key words: port scanning; multi thread batch

8、scan; asynchronous scan1 前言 端口在计算机网络中用于标识上层应用程序服务,端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)。端口扫描是计算机解密高手喜欢的一种方式。攻击者可以通过它了解到从哪里可探寻到攻击弱点。实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息。接收到的回应类型表示是否在使用该端口并且可由此探寻弱点。扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程服务器的各种端口的状态!这就能让我们间接的或直观的了解到远程主机所存在

9、的安全问题。课程设计的目的 计算机网络的发展使得社会网络化程度增加,人们对计算机网络的依赖也越来越大,端口扫描技术是发现安全问题的重要手段之一。端口扫描的主要目的是判断目标主机或目标网段内的主机开放了哪些服务,网络管理员了解了这些信息后,便于管理整个网络以及采取相应的安全防范。2设计的软硬件平台 本程序基于.NET平台使用C#语言开发的一个端口扫描程序。.NET是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提

10、供创建 XML Web services 并将这些服务集成在一起之所需。.NET支持多种语言,包括C#,VC+,COBOL等,是一个全面的开发工具。3 端口扫描的主要工作原理 端口扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息。最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另

11、一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描,也就是本设计中的多线程批量扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被察觉,并且被防火墙将扫描信息包过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。常见的端口扫描方法有TCP connect,TCP SYN,TCP FIN,TCP ACK,多线程socket批量扫描等,本次课程设计主要采用TCP connect实现异步扫描,调用socket实现多线程

12、批量扫描。3.1 多线程批量扫描工作原理操作系统提供的socket系统调用,用来与每一个感兴趣的目标主机的端口进行连接。如果端口处于侦听状态,那么socket()就能成功,否则这个端口没有提供服务。多线程批量扫描使用for循环来实现逐个扫描的,多端口也是使用for循环来实现逐个扫描的,调用connect()和accept()建立套接字连接,这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。accept()用于使服务器等待来自某主机进程的实际连接。借助for循环通过threadi=new Thread(ThreadPort)创建多个线程,采用异常处理机制调用socke

13、t进行连接,实现端口扫描。3.2 异步扫描工作原理调用操作系统提供的BeginConnect()方法进行TCP连接,用来与每一个感兴趣的目标主机的端口进行连接。如果端口处于侦听状态,那么就能连接成功,否则不能连接成功。通过while()循环来返回连接结果,并显示在列表中。4 端口扫描实现的主要步骤4.1 多线程批量扫描设计的主要步骤(1)使用自定义的方法GetListIP()获取待扫描的指定主机或指定网段内主机的IP地址和指定端口或端口段。(2)初始化并保存为IPEndPoint对象。(3)借助for循环通过threadi=new Thread(ThreadPort)创建多个线程。(4)调用线

14、程的实现方法,使用socket连接,通过for循环进行批量扫描。(5)采用try catch进行异常处理。4.2 异步扫描设计的主要步骤(1)使用自定义的方法GetListIP()获取待扫描的指定主机或指定网段内主机的IP地址和指定端口或端口段。(2)初始化并保存为IPEndPoint对象。(3)通过for循环创建线程。(4)调用操作系统提供的BeginConnect()方法进行TCP连接,进行循环扫描。(5)采用try catch进行异常处理。5 程序运行与测试5.1 对指定主机指定端口异步扫描,如图5.1所示。图5.1 异步扫描单主机单端口5.2 对指定主机指定端口范围异步扫描,如图5.2

15、所示。图5.2 异步扫描单主机多端口 对指定IP指定端口范围多线程批量扫描,如图5.3所示。图5.3 多线程扫描单主机多端口5.4 对指定IP范围指定端口范围多线程批量扫描,如图5.4所示。图5.4 多线程扫描多主机多端口5.5 对指定IP范围指定端口范围异步扫描,如图5.5。图5.5 异步扫描多主机多端口6 设计的结论及意义 经过不断的修改和完善程序,基本满足了一个端口扫描成宿的基本要求,实现了对单个指定的主机进行扫描或扫描指定网段内的主机,实现了对特定端口进行扫描,或扫描指定的端口范围内的端口,以避免在不需要了解的端口号上浪费时间。端口扫描技术是网络安全中重要的技术之一,有利于用户,特别是

16、网管人员了解被管理主机的服务的开启情况,对网络安全有着重大意义。7 参考文献1 谢希仁 计算机网络M:电子工业出版社,2 马骏 C#网络应用编程 第3版.北京:人民邮电出版社,3 范建华,张涛等译:4 梁亚声 计算机网络安全教程 第2版.北京:机械工业出版社,2010.附录:using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Data;rawing;using System.Linq;using System.Net;usi

17、ng System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms;namespace PortFyz public partial class Form1 : Form private volatile int N = 0;/用来说明每次扫描时的索引 private volatile int T = 0;/用来说明线程执行的次数 ManualResetEvent manualResetEvent = new ManualResetEvent(false); List listIpe

18、 = new List();/用来存储所有的IPEndPoint泛型 int threadNumber = 10;/创建的线程数 Thread thread; AutoResetEvent autoEvent=new AutoResetEvent(false); delegate void AddStr(string str); AddStr addstr; #region 1 简单控件操作 void AddList(string str) listBox1.Items.Add(str); public Form1() InitializeComponent(); private void F

19、orm1_Load(object sender, EventArgs e) addstr += AddList; private void button2_Click(object sender, EventArgs e) Application.Exit(); private void checkBox2_CheckedChanged(object sender, EventArgs e) if (checkBox2.Checked) textBox3.Enabled = false; textBox4.Enabled = false; else textBox3.Enabled = tru

20、e; textBox4.Enabled = true; private void checkBox1_CheckedChanged(object sender, EventArgs e) if (checkBox1.Checked) textBox1.Enabled = false; textBox2.Enabled = false; else textBox1.Enabled = true; textBox2.Enabled = true; #endregion多线程批量扫描 private void button1_Click(object sender, EventArgs e) pri

21、vate void button1_Click(object sender, EventArgs e) if (textBox8.Text.Trim() = ) MessageBox.Show(请输入线程数); else threadNumber = Convert.ToInt32(textBox8.Text.Trim(); Initialization(); /设置进度条 progressBar1.Minimum = 0; progressBar1.Maximum = listIpe.Count; progressBar1.Value = 0; if (listIpe.Count =thre

22、adNumber) threadNumber = listIpe.Count; /开始创建线程扫描 thread = new ThreadthreadNumber; for (int i = 0; i threadNumber; i+) threadi = new Thread(ThreadPort); threadi.Priority = ThreadPriority.AboveNormal; threadi.IsBackground = true; threadi.Start(); manualResetEvent.WaitOne(); #endregion多线程批量扫描 public v

23、oid ThreadPort() / / 多线程批量扫描 / public void ThreadPort() IPEndPoint currentIpe = listIpe0; while (true) if (N = listIpe.Count) if (T = listIpe.Count) /注意return时,只是当前线程被销毁,其IsAlive为false,这个时候还有线程在跑 /有可能后面的没执行完就已经把结果送给textBox5了 /当所有线程执行完后,才通知textBox5的text为result manualResetEvent.Set(); return; else loc

24、k (this) currentIpe = listIpeN; N+; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); try socket.Connect(currentIpe); if (socket.Connected) IPEndPoint ep = socket.LocalEndPoint as IPEndPoint; string ss=ep.Address + : + ep.Port + 连接 + currentIpe.Address + : +

25、 currentIpe.Port + 已打开 + rn; addstr(ss); T+; else string ss = currentIpe.Address + : + currentIpe.Port + 未连接成功 + rn; addstr(ss); T+; catch (Exception ex) string ss = currentIpe.Address + : + (ex.Message.Split(:)1 + 未连接成功 + rn; addstr(ss); T+; finally socket.Close(); #endregion异步扫描 private void butto

26、n3_Click(object sender, EventArgs e) private void button3_Click(object sender, EventArgs e) /进行初始化 Initialization(); /设置进度条 progressBar1.Minimum = 0; progressBar1.Maximum = listIpe.Count; progressBar1.Value = 0; /开始创建线程扫描 Form1 form = this; ListBox listbox = listBox1; ProgressBar progressBar= progre

27、ssBar1; thread = new ThreadthreadNumber; for (int i = 0; i threadNumber; i+) threadi = new Thread(new ParameterizedThreadStart(sport); threadi.Start(new ArrayList() listbox, progressBar,i); #endregion #region 3.2 异步扫描的实现方法 void sport(object s) void sport(object s) /进行一系列对象的转化 ArrayList al = (ArrayLi

28、st)s; ListBox listbox = (ListBox)al0; ProgressBar progressBar= (ProgressBar)al1; int ith = Convert.ToInt32(al2); /开始循环去进行连接 for (int iport = ith; iport listIpe.Count; iport += threadNumber) TcpClient tcpClient = new TcpClient(AddressFamily.InterNetwork); try /异步连接 tcpClient.BeginConnect(listIpeiport

29、.Address, listIpeiport.Port, AsyncPort, new ArrayList() tcpClient, iport, progressBar, listbox ); catch (Exception ex) /让当前线程等待 autoEvent.WaitOne(200); #endregion异步扫描的结果处理 public void AsyncPort(IAsyncResult result) / / 异步扫描 / public void AsyncPort(IAsyncResult result) /进行一系列对象的转化 ArrayList arr = (Ar

30、rayList)result.AsyncState; TcpClient tcpClient = (TcpClient)arr0; int iport = (int)arr1; ListBox listbox = (ListBox)arr3; ProgressBar progressBar1 = (ProgressBar)arr2; while(true) /轮询看是否有结果 if(result.IsCompleted) try if (tcpClient.Connected) listBox1.Items.Add(listIpeiport.Address + : + listIpeiport

31、.Port + 已打开); else listBox1.SelectedIndex = listBox1.Items.Count - 1; finally /设置滚动条 if (progressBar1.Value progressBar1.Maximum) progressBar1.Value+; break; tcpClient.Close(); #endregion #region 4.1 公用方法,拿到所有IPEndPoint对象 public List GetListIP() #region 1.1 拿到所有IPEndPoint对象 public List GetListIP() p

32、ublic List GetListIPE() if (checkBox1.Checked)/如果是指定一个IP地址 IPAddress ipa; if (IPAddress.TryParse(textBox6.Text.Trim(), out ipa) if (checkBox2.Checked)/一个IP一个端口 IPEndPoint ipe = new IPEndPoint(ipa, Convert.ToInt32(textBox7.Text.Trim(); listIpe.Add(ipe); else/一个IP多个端口 int startPort = Convert.ToInt32(t

33、extBox3.Text.Trim(); int endPort = Convert.ToInt32(textBox4.Text.Trim(); for (int j = startPort; j = endPort; j+) IPEndPoint ipe = new IPEndPoint(ipa, j); listIpe.Add(ipe); else MessageBox.Show(IP地址转换失败!); /return; else/如果是指定IP地址范围 long startIp; long endIp; long ip1 = IPToLong(textBox1.Text.Trim();

34、long ip2 = IPToLong(textBox2.Text.Trim(); List listIp = new List(); if (ip1 ip2) startIp = ip2; endIp = ip1; else startIp = ip1; endIp = ip2; for (long a = startIp; a = endIp; a+) IPAddress ipa = IPAddress.Parse(LongToIP(a); listIp.Add(ipa); if (checkBox2.Checked)/多IP一个端口- int onePort = Convert.ToIn

35、t32(textBox7.Text.Trim(); IPEndPoint ipe; for (int j = 0; j listIp.Count; j+) ipe = new IPEndPoint(listIpj, onePort); listIpe.Add(ipe); else/多IP多端口- int startPort = Convert.ToInt32(textBox3.Text.Trim(); int endPort = Convert.ToInt32(textBox4.Text.Trim(); IPEndPoint ipe; for (int i = 0; i listIp.Count; i+) for (int j = startPort; j = endPort; j+) ipe = new IPEndPoint(listIpi, j); listIpe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁