多任务网段扫描

本文介绍了如何进行多任务网段扫描,探讨了在网络安全中如何有效地同时对多个网络段进行探测和分析,以提升扫描效率和覆盖范围。

多任务网段扫描

--前台界面设计部分
---使用动态布局(优点:界面布局清晰、控件会随着窗口大小而改变)
    <Grid.RowDefinitions>
         <RowDefinition Height="1"></RowDefinition>
         <RowDefinition Height="auto"></RowDefinition>
         <RowDefinition Height="5"></RowDefinition>
    </Grid.RowDefinitions>
    <GroupBox Header="扫描的IP地址范围" Grid.Row="0" Grid.RowSpan="3" FontSize="15px" Margin="0,2,0,-63">
         <Canvas Height="48" VerticalAlignment="Bottom">
              <Label Content="地址前缀:" Width="80" Canvas.Top="11"/>
              <TextBox x:Name="tb1" Height="25" Width="124"Canvas.Left="80" Canvas.Top="11" VerticalAlignment="Center" HorizontalAlignment="Center" />
              <Label Content="起始值:"  Width="63" Canvas.Top="11" Canvas.Left="209"/>
              <TextBox Name="tb2"  Height="25" Width="77" Canvas.Left="277" Canvas.Top="11" VerticalAlignment="Center" HorizontalAlignment="Center"/>
              <Label Content="终止值:" Width="58" RenderTransformOrigin="3.888,1.889" Canvas.Left="359" Canvas.Top="11"/>
              <TextBox Name="tb3" Height="25" Width="97" Canvas.Left="422" Canvas.Top="11" VerticalAlignment="Center" HorizontalAlignment="Center"/>
              <Button Name="btn1" Width="75" Content="开始扫描" Canvas.Left="542" Canvas.Top="10" Height="28" Click="btn1_Click"/>
              <Button Name="time_get" Width="93" Content="获取总时间" Click="time_get_Click" Canvas.Left="622" Canvas.Top="10" Height="28"/>
          </Canvas>
     </GroupBox>
     <TextBlock Grid.Row="2" Name="textblock1" Margin="10,74,10,-103" FontSize="30"  Width="674" VerticalAlignment="Center" TextAlignment="Center"/>
     <GroupBox Header="扫描信息" Grid.Row="2" Margin="0,114,0,-340" FontSize="15px">
          <ListBox Margin="0,0,0,10" Name="listbox1">
          </ListBox>
     </GroupBox>
---后台功能实现
---定义全局变量 所定义的时间变量sumTime必须为长整形,若定义为int,因为扫面的时间可能太大会超出范围
     long sumTime = 0;
     DateTime times = DateTime.Now;
---扫描线程的点击事件
private void btn1_Click(object sender, RoutedEventArgs e)
{
    IPAddress ipStart;
    IPAddress ipStop;
    listbox1.Items.Clear();
    if (int.Parse(tb3.Text) < int.Parse(tb2.Text))
    {
          MessageBox.Show("提示:终止值必须大于起始值!");
          tb2.Text = "";
          tb3.Text = "";
    }
    try
    {
        textblock1.Text = null;
         textblock1.Background = Brushes.AliceBlue;
         ipStart = IPAddress.Parse(tb1.Text + tb2.Text);
         ipStop = IPAddress.Parse(tb1.Text + tb3.Text);
    }
    catch
    {
         textblock1.Background = Brushes.Red;
         textblock1.Foreground = Brushes.White;
         textblock1.Text = "IP地址有错,请更正!";
     }

     if (IPAddress.TryParse(tb1.Text + tb2.Text, out ipStart) && IPAddress.TryParse(tb1.Text + tb3.Text, out ipStop))
     {
            textblock1.Text = null;
            textblock1.Background = Brushes.AliceBlue;

            for (int i = int.Parse(tb2.Text); i <= int.Parse(tb3.Text); i++)
            {
                 IPAddress ip = IPAddress.Parse(tb1.Text + i.ToString());

                 /*  this.myMainTask(ip);*/ //非多线程(若采用多线程则将下面多线程代码注释,将此行代码截除注释即可)

                 //多线程
                 Thread t = new Thread(myMainTask);
                 t.Start(ip);
             }

      }
      else
      {
             textblock1.Background = Brushes.Red;
             textblock1.Foreground = Brushes.White;
             textblock1.Text = "IP地址有错,请更正!";
      }
}
---线程执行的方法体
private void myMainTask(Object ip)
{
       string hostName;

       DateTime begin = DateTime.Now; /*此计时器计算的是每一个线程的扫描时间*/

       Stopwatch stop = new Stopwatch();/*此计时器计算的是总的扫面时间,后续会进行累加*/
       stop.Start();

       IPAddress ipAddress = (IPAddress)ip;

       try
       {
             hostName = Dns.GetHostEntry(ipAddress).HostName;
       }
       catch
       {
             hostName = "(不在线)";
       }

       stop.Stop();
       DateTime end = DateTime.Now;

       TimeSpan ts = end - begin;

       sumTime += stop.ElapsedMilliseconds;

       listbox1.Dispatcher.Invoke(() => listbox1.Items.Add("扫描地址:" + ipAddress.ToString() + " , 扫描用时:" + ts.TotalMilliseconds + "毫秒 , " + " 主机DNS名称:" + hostName));/*Invoke方法是同步调用,即直到在线程池中实际执行完该委托它才返回*/

        }   
---计算总扫描时间的点击事件
private void time_get_Click(object sender, RoutedEventArgs e)
{
     textblock1.Text = "扫描总线程所用总时间为:" + sumTime.ToString() + "毫秒"; 
}

这里写图片描述

这里写图片描述

实验三 网络信息扫描实验 一、实验目的 1、通过练习使用网络端口扫描器,可以了解目标主机开放的端口和服务程序,从而获取系统的有用信息,发现网络系统的安全漏洞。在实验中,我们将练习使用Superscan网络端口扫描工具。通过端口扫描实验,增强网络安全方面的防护意识。 2、通过使用综合扫描及安全评估工具,学习如何发现计算机系统的安全漏洞,并对漏洞进行简单分析,加深对各种网络和系统漏洞的理解。在实验中,我们将练习使用流光Fluxay5和SSS。 二、实验原理 1、网络端口扫描原理 一个开放的网络端口就是一条与计算机进行通信的信道,对网络端口的扫描可以得到目标计算机开放的服务程序、运行的系统版本信息,从而为下一步的入侵做好准备。对网络端口的扫描可以通过执行手工命令实现,但效率较低;也可以通过扫描工具实现,效率很高。扫描工具是对目标主机的安全性弱点进行扫描检测的软件。它一般具有数据分析功能,通过对端口的扫描分析,可以发现目标主机开放的端口和所提供的服务,以及相应服务软件版本和这些服务及软件的安全漏洞,从而能及时了解目标主机存在的安全隐患。 扫描工具根据作用的环境不同,可分为两种类型:网络漏洞扫描工具和主机漏洞扫描工具。主机漏洞扫描工具是指在本机运行的扫描工具,以期检测本地系统存在的安全漏洞。网络漏洞扫描工具是指通过网络检测远程目标网络和主机系统所存在漏洞的扫描工具。本实验主要针对网络漏洞扫描工具进行介绍。 1)端口的基础知识 为了了解扫描工具的工作原理,首先简单介绍一下端口的基本知识。 端口是TCP协议中所定义的,TCP协议通过套接字(socket)建立起两台计算机之间的网络连接。套接字采用[IP地址:端口号]的形式来定义,通过套接字中不同的端口号可以区别同一台计算机上开启的不同TCP和UDP连接进程。对于两台计算机间的任一个TCP连接,一台计算机的一个[IP地址:端口]套接字会和另一台计算机的一个[IP地址:端口]套接字相对应,彼此标识着源端、目的端上数据包传输的源进程和目标进程。这样网络上传输的数据包就可以由套接字中的IP地址和端口号找到需要传输的主机和连接进程了。由此可见,端口和服务进程一一对应,通过扫描开放的端口,就可以判断出计算机中正在运行的服务进程。 TCP/UDP的端口号在0~65535范围之内,其中1024以下的端口保留给常用的网络服务。例如:21端口为FTP服务,23端口为TELNET服务,25端口为SMTP服务,80端口为HTTP服务,110端口为POP3服务等。 2)扫描的原理 扫描的方式有多种,为了理解扫描原理,需要对TCP协议简要介绍一下。 一个TCP头的数据包格式如图4-16所示。它包括6个标志位,其中: SYN用来建立连接; ACK为确认标志位,例如,当SYN=1,ACK=0表示请求连接的数据包;当SYN=1,ACK=1表示接受连接的数据包。 FIN表示发送端已经没有数据可传了,希望释放连接。 RST位用于复位错误的连接,比如收到的一个数据分段不属于该主机的任何一个连接,则向远端计算机发送一个RST=1的复位数据包,拒绝连接请求。 根据上面介绍的知识,下面我们介绍基于TCP和UDP协议的几种端口扫描方式。 1) TCP全连接扫描 TCP全连接扫描方法是利用TCP的三次握手,与目标主机建立正常的TCP连接,以判断指定端口是否开放。这种方法的缺点是非常容易被记录或者被检测出来。 2)TCP SYN扫描 本地主机向目标主机发送SYN数据段,如果远端目标主机端口开放,则回应SYN=1,ACK=1,此时本地主机发送RST给目标主机,拒绝连接。如果远端目标主机端口未开放,则会回应RST给本地主机。由此可知,根据回应的数据段可判断目标主机的端口是否开放。由于TCP SYN扫描没有建立TCP正常连接,所以降低了被发现的可能,同时提高了扫描性能。 3)TCP FIN扫描 本地主机向目标主机发送FIN=1,如果远端目标主机端口开放,则丢弃此包,不回应;如果远端目标主机端口未开放,则返回一个RST包。FIN扫描通过发送FIN的反馈判断远端目标主机的端口是否开放。由于这种扫描方法没有涉及TCP的正常连接,所以使扫描更隐秘,也称为秘密扫描。这种方法通常适用于UNIX操作系统主机,但有的操作系统(如Windows NT)不管端口是否打开,都回复RST,这时这种方法就不适用了。 4)UDP ICMP扫描 这种方法利用了UDP协议,当向目标主机的一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACHABLE错误,这样就会发现关闭的端口。 5)ICMP 扫描 这种扫描方法利用了ICMP协议的功能,如果向目标主机发送一个协议项存在错误的IP数据包,则根据反馈的ICMP错误报文,判断目标主机使用的服务。 6)间接扫描 入侵者间接利用第三方主机进行扫描,以隐藏真正入侵者的痕迹。第三方主机是通过其他入侵方法控制的主机,扫描的结果最终会从第三方主机发送给真正的入侵者。 端口扫描器是黑客常用的工具,目前的扫描工具有很多种,例如Nmap、Netcat、X-port、PortScanner、Netscan tools、Winscan、WUPS、Fscan、LANguard Network Scanner等。在下面的实验中我们以SuperScan为例详细介绍扫描器的使用。 扫描往往是入侵的前奏,所以如何有效的屏蔽计算机的端口,保护自身计算机的安全,成为计算机管理人员首要考虑的目标。为了防止对计算机网络端口的扫描,我们可以采用端口扫描监测工具来监测对端口的扫描,防止端口信息外露。常用的端口扫描监测工具包括ProtectX、PortSentry等。此外,安装防火墙也是防止端口扫描的有效方法。 2、综合扫描实验原理 综合扫描是一种自动检测系统和网络安全性弱点的程序。它是一种主要的网络安全防御技术,它与防火墙技术、入侵检测技术、加密和认证技术处于同等重要地位。其作用是在发生网络攻击事件前,系统管理员可利用综合扫描和安全评估工具检测系统和网络配置的缺陷和漏洞,及时发现可被黑客进行入侵的漏洞隐患和错误配置,给出漏洞的修补方案,使系统管理员可以根据方案及时进行漏洞的修补。当然,另一方面,综合扫描和安全评估工具也可被黑客利用,对万国目标主机进行弱口令扫描、系统漏洞扫描、主机服务扫描等多种方式的扫描,同时采用模拟攻击的手段检测目标主机在通信、服务、Web应用等多方面的安全漏洞,以期找到入侵途径。 综合扫描和安全评估技术的工作原理,首先是获得主机系统在网络服务、版本信息、Web应用等相关信息,然后采用模拟攻击的方法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱口令等,如果模拟攻击成功,则视为漏洞存在。此外,也可以根据系统实现定义的系统安全漏洞库,对系统可能存在的、已知的安全漏洞逐项进行扫描和检查,按照规则匹配的原则将扫描结果与安全漏洞库进行对比,如果满足匹配条件,则视为漏洞存在。最后,根据检测结果向系统管理员提供周密可靠的安全性分析报告,作为系统和网络安全整体水平的评估依据。 对于系统管理员来说,综合合扫描和安全评估工具是最好的帮手,合理的利用这些工具,可以在安全保卫战中做到“有的放失”,及时发现漏洞并通过下载相关程序的补丁或者更改安全配置来修补漏洞,构筑安全坚固的系统。目前常用的综合扫描和安全评估工具有很多,例如免费的流光、X-Scan、X-way及功能强大的商业软件:ISS Internet Scanner和ISS Security Scanner、Web Trends Security Analyzer、SSS(Shadow Security Scanner)、TigerSuite等。 三、实验环境 两台安装Windows 2000/XP的PC机,在其中一台上安装SuperScan、流光Fluxay5、SSS软件。将两台PC机通过HUB相连,组成一个局域网。 四、实验内容和步骤 任务一 使用SuperScan扫描 SuperScan具有端口扫描、主机名解析、Ping扫描的功能,工具的具体使用方法及界面见第八章课件。请试着实现以下功能: 1)主机名解析功能(截图) 在“锁定主机”栏中,可以输入IP地址或者需要转换的域名,点击“锁定”就可以获得转换后的结果;点击“本机”可以获得本地计算机的IP地址;点击“网络”可以获得本地计算机IP的详细设置。 2)Ping功能(截图) SuperScan软件的Ping功能提供了检测在线主机和判断网络状况的作用。通过在“IP”栏中输入起始和结束的IP地址,然后选中“扫描类型”栏中的“仅仅Ping计算机”即可点击“开始”启动Ping扫描了。在“IP”栏,“忽略 IP为 0”和“忽略 IP为 255”分别用于屏蔽所有以0和255结尾的IP地址,“前C段”和“后C段”可直接转换到前一个或者后一个C类IP网段。“1…254”则用于直接选择整个网段。“延时”栏中可根据需要选择不同的响应时间。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值