优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

.NET511 基于C#端口扫描器的实现

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:


技术演示项目(Advanced Concept Technology Demonstrations,ACTD),预计将在2005年完成,它们希望籍此取得网络防御的制高点,充分掌握信息战的主动权。
安全扫描软件从最初的专门为UNIX系统编写的一些只具有简单功能的小程序,发展到现在,已经出现了多个运行在各种操作系统平台上的、具有复杂功能的商业程序。今后的发展趋势,我认为有以下几点:
● 使用插件(plugin)或者叫做功能模块技术。每个插件都封装一个或者多个漏洞的测试手段,主扫描程序通过调用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多漏洞。在插件编写规范公布的情况下,用户或者第三方公司甚至可以自己编写插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对简单,并具有非常强的扩展性。
● 使用专用脚本语言。这其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。这些脚本语言语法通常比较简单易学,往往用十几行代码就可以定制一个简单的测试,为软件添加新的测试项。脚本语言的使用,简化了编写新插件的编程工作,使扩充软件功能的工作变得更加容易,也更加有
〖本文来自:计算机毕业网  〗
扫描主机向目标主机的选择端口发送设置了SYN数据标志的TCP包,就象打开常规TCP连接时一样。如果被扫描主机发送设置了RST和ACK标志的包,那么说明端口是关闭的,按照设定就探听其它端口;如果该端口是打开的,则被扫描主机返回设置了SYN和ACK标志的包进行响应,说明目标端口处于监听状态。由于在SYN扫描时,全连接尚未建立,所以这种技术通常被称为半打开扫描。 [资料来源:http://think58.com]
优点:隐蔽性较全连接扫描好,即使日志中对扫描有所记录,但是尝试进连接的记录也要比全扫描少得多。
2.TCP间接扫描:
间接扫描的思想是利用第三方的IP(欺骗主机)来隐藏真正扫描者的IP。由于扫描主机会对欺骗主机发送回应信息,所以必须监控欺骗主机的EP行为,从而获得原始扫描的结果。扫描主机通过伪造第三方主机lP地址向目标主机发起SYN扫描,并通过观察其IP序列号的增长规律获取端口的状态间接扫描的工作过程如下:假定参与扫描过程的主机为扫描机,隐藏机,目标机。扫描机和目标记的角色非常明显。隐藏机是一个非常特殊的角色,在扫描机扫描目的机的时候,它不能发送任何数据包(除了与扫描有关的包)。

本文来自think58 [资料来源:http://think58.com]

[资料来源:http://think58.com]


由于要实现多线程、高速度、高效率的扫描目标,程序采用了多线程并发扫描技术实现了高效率扫描。调用Startscan函数实现多线程。
for (Int32 m__abc = startPort; m__abc <= endPort; m__abc++)
{
hreadPool.QueueUserWorkItem(new WaitCallback(Startscan), m__abc);
loglist.Items.Add("扫描端口:"+m__abc.ToString());
}
4.1.2  委托技术的代码及说明
    由于程序采用了多线程对端口进行扫描,界面控件更新线程,须用委托进行刷新,才能保证程序正常运行。
       // 界面控件更新 线程须用委托刷新
   //定义一个委托
    public delegate void MyInvoke(string str);
   //定义一个操作界面的方法
    private void UpdateUIport(string str)
   {
    //增加项
    //this.lstPrime.Items.Add(str);
    portlist.Items.Add(str);
        }
   //定义一个操作界面的方法
   private void UpdateUI(string str) copyright think58 [来源:http://think58.com]
   {
    //增加项
   //this.lstPrime.Items.Add(str);
   portlist1.Items.Add(str);
          }
  //定义一个操作界面的方法
   private void UpdateUI2(string str)
    {
    //增加项
    //this.lstPrime.Items.Add(str);
    loglist.Items.Add(str);
         }
   //定义一个操作界面的方法
   private void UpdateUI3(string str)
   {
    //增加项
    //this.lstPrime.Items.Add(str);
    label5.Text = str;
        }
//委托调用按钮,刷新界面
private void UpdateUI4(string str)
 {
      //增加项
       //this.lstPrime.Items.Add(str);
        button1.Enabled = true; think58.com [资料来源:THINK58.com]
         button2.Enabled = false;
        }
4.1.3  扫描功能实现的代码及说明
新建TCP连接,调用TCPclient类的connect()方法,与目标主机进行一次完整的连接, 如果目标主机该端口有回复,则说明该端口开放。并调用外面程序中的委托定义,以实现其界面上portlist列表框的更新。
//扫描功能实现
public void Startscan(Object state)
  {〖本文来自:计算机毕业网  〗
     Int32 port = (Int32)state;
     int list = 0;
      threadnum++;
  //  endscan == false 扫描结束标志
      if (endscan == false)
{
if (threadnum <= (Int32)endnum.Value - (Int32)snum.Value)
{
     try

   //  新建TCP
   TcpClient tcp = new TcpClient();
  // 连接IP tesbox 端口port 判断是否能连接计算机,即端口开放情况
   tcp.Connect(textBox7.Text, port);

think58好,好think58

[资料来源:http://www.THINK58.com]


   portnum++;
//list = portlist.Items.Add(port.ToString() + "端口开放" ,false);
   MyInvoke mi = new MyInvoke(UpdateUIport);
this.BeginInvoke(mi, new object[]
{ port.ToString() + "端口开放" });
}
 catch
{
  //portlist1.Items.Add(port.ToString() + "端口无法连接");
  MyInvoke mi = new MyInvoke(UpdateUI);
 this.BeginInvoke(mi, new object[]
{ port.ToString() + "端口无法连接" });

think58

[资料来源:http://think58.com]

[资料来源:http://www.THINK58.com]

参考文献
[1] 赵树升,赵韶平.信息安全原理与实践[M].北京:清华大学出版社,2004。
[2] 夏普 著,周靖 译.Visual C# 2005从入门到精通[M].北京:清华大学出版社,2006。
[3] 肖微.端口扫描技术的原理及原理[J].网络安全技术与应用,2006,(7):32-41。
[4] 李雷.端口扫描方法的原理.实现和防御[J].电脑编程技巧和维护,2004,(5):21-25。
[5] 刘烨,吴中元.c#编程及应用程序开发教程[M].北京:清华大学出版社,2005.12。
[6] 郑宇军.C#2.0程序设计教程[M].北京:清华大学出版社,2005.12。
[7] 张海潘.软件工程导论[M].北京:清华大学出版社,2004.11。

[资料来源:www.THINK58.com]