A.2多任务网段扫描练习 (增加功能)

博客介绍了对A.2版本的多任务网段扫描功能的改进,现在允许用户设定IP地址后两段的最大和最小值。相较于之前的实现,几乎重构了所有代码以实现这一增强功能。虽然目前功能达到预期,但作者认为仍存在不足,计划进一步完善,并保留了代码注释以展示思考过程。
摘要由CSDN通过智能技术生成

为了实现对IP地址后两段的任意设定 几乎改掉了之前所有的代码 -.-||

与之前http://blog.csdn.net/qq_35252878/article/details/60781383相比,增加了对IP地址后两位也可以设置最大最小值的功能。

效果:
这里写图片描述

这里写图片描述

MainWindow.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Timers;
using System.Diagnostics;
using System.Threading;
using System.Drawing;


namespace A._2
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        long minTime;
        long maxTime;
        string add2_41;
        int add2_4;
        string add2_51;
        int add2_5;
        string add3_41;
        int add3_4;
        string add3_51;
        int add3_5;
        string add2;
        string address;
        string add;



        private void judge_IPAddress(object Address)
        {

            string Dname;
            String address=(string)Address;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            try
            {
                IPAddress ip = IPAddress.Parse(address);
                Dname = Dns.GetHostEntry(ip).HostName;
            }
            catch
            {
                Dname = "(不在线)";
            }
            sw.Stop();
            if (sw.ElapsedMilliseconds > maxTime)
                maxTime = sw.ElapsedMilliseconds;
            if (sw.ElapsedMilliseconds < minTime)
                minTime = sw.ElapsedMilliseconds;
            ListBox.Dispatcher.Invoke(new Action(() => { ListBox.Items.Add("扫描地址:" + Address + ",扫描用时:" + sw.ElapsedMilliseconds + "毫秒,主机DNS名称:" + Dname); }));
           // ListBox.Items.Add("扫描地址:" + Address + ",扫描用时:"+sw.ElapsedMilliseconds+"毫秒,主机DNS名称:"+Dname);
            //if(num==0)
            //    ListBox.Dispatcher.Invoke(new Action(() => { ListBox.Items.Add("扫描结束!"); }));

            //Thread.Sleep(1000);
        }

        private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void textBox_TextChanged(object sender, TextChangedEventArgs e)
        {

        }




        private  void convrt(int star)
        {
            if(star==add2_4)
            {
                //MessageBox.Show("star1=" + star+"开始"+add2_5);
                for(int k=add2_5;k<=255;k++)
                {
                    add2 = star.ToString() + "." + k.ToString();
                    address = add + add2;
                    begin();
                }
            }
            else if(star==add3_4)
            {
                for(int h=0;h<=add3_5;h++)
                {
                    add2 = star.ToString() + "." + h.ToString();
                    address = add + add2;
                    begin();
                }
            }
            else
            {
                //MessageBox.Show("star="+star);
                for(int q=0;q<=255;q++)
                {
                    add2 = star.ToString() + "." + q.ToString();
                    address = add + add2;
                    begin();
                }
            }
        }




        private void begin()
        {
                try
                {
                    IPAddress ip = IPAddress.Parse(address);
                }
                catch
                {
                    Textbox.Visibility = Visibility.Visible;
                    return;
                }
                Thread t = new Thread(judge_IPAddress);
                t.Start(address);

        }




        private void button_Click(object sender, RoutedEventArgs e)
        {
            minTime = 0xffff;
            maxTime = 0;
            int flag = 0;
            int the2 = 0;
            int the3 = 0;
            int L1 = 0;
            int L2 = 0;


            add = textBox.Text;
            int l = add.Length;
            if(add[l-1]!='.')
            {
                add = add + '.';
            }
            Textbox.Foreground = new SolidColorBrush(Colors.White); 
            //num = Int32.Parse(textBox2.Text) - Int32.Parse(textBox1.Text);
            string add2 = textBox1.Text;
            string add3 = textBox2.Text;
            for (int i = 0; i < add2.Length;i++)   //判断textbox1中是否是地址的后两段
            {
                if(add2[i]=='.')
                {
                    flag = 1;
                    the2 = i;
                }
            }
            if(flag==1) //起始值为***.***
            {

                L1 = add2.Length;
                L2 = add3.Length;
                add2_41 = add2.Substring(0, the2);//记录下倒数第二位的初始值
                add2_4 = (Int32.Parse(add2_41));        //将倒数第二位的初始值转化int型
                add2_51 = add2.Substring(L1 - the2);
                add2_5 = Int32.Parse(add2_51);

                for (int i = 0; i < add3.Length; i++)
                {
                    if (add3[i] == '.')
                        the3 = i;
                }
                add3_41 = add3.Substring(0, the3);//记录下倒数第二位的结束值
                add3_4 = (Int32.Parse(add3_41));        //将倒数第二位的结束值转化int型
                add3_51 = add3.Substring(L2 - the3);
                add3_5 = Int32.Parse(add3_51);
                if (add2_4 > add3_4)
                    add2_4 ^= add3_4 ^= add2_4 ^= add3_4;
                //ListBox.Dispatcher.Invoke(new Action(() => { ListBox.Items.Add("初始:" + add2_4 + ",结束:" + add3_4 + "初始:" + add2_5+"结束:"+add3_5); }));

                for(int i=add2_4;i<=add3_4;i++)
                {
                    convrt(i);
                }

                    //ListBox.Dispatcher.Invoke(new Action(() => { ListBox.Items.Add("最长用时:" + maxTime + "s,最短用时:" + minTime + "s."); }));
                    MessageBox.Show("1扫描结束!"+"最长用时:"+maxTime+"最短用时:"+minTime);

            }

            if(flag==0) //起始值为***
            {
                for (int i = Int32.Parse(textBox1.Text); i <= Int32.Parse(textBox2.Text); i++)
                {
                    address = add + i.ToString();
                    begin();
                }

                    //t.Abort();
                    //ListBox.Dispatcher.Invoke(new Action(() => { ListBox.Items.Add("最长用时:" + maxTime + "s,最短用时:" + minTime + "s."); }));

                    MessageBox.Show("2扫描结束!" + "最长用时:" + maxTime + "最短用时:" + minTime);

            }

        }

        private void Textbox_TextChanged_1(object sender, TextChangedEventArgs e)
        {
        }
    }
}

目前只是达到了预期的效果,还有很多地方不尽完善。
一会或许还要进行完善,注释显示了很多思考过程,不想删。

实验三 网络信息扫描实验 一、实验目的 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”则用于直接选择整个网段。“延时”栏中可根据需要选择不同的响应时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值