一种支持多线程,Ping检测和数据提取的快速可扩展网络扫描库 - 黑客门户-前言: Forerunner库是一个快速,轻巧且可扩展的网络库,其创建目的是帮助开发强大的以网络为中心的应用程序,例如:IP扫描程序,端口连接器,客户端,服务器等。在当前状态下,...

TZB互联网安全

黑客门户
关注于网络安全
首页>> 渗透测试工具 >>一种支持多线程,Ping检测和数据提取的快速可扩展网络扫描库 - 黑客门户



前言:
Forerunner库是一个快速,轻巧且可扩展的网络库,其创建目的是帮助开发强大的以网络为中心的应用程序,例如:IP扫描程序,端口连接器,客户端,服务器等。在当前状态下,Forerunner库能够同步和异步扫描并敲除端口IP地址,以获得有关位于该端点的设备的信息,例如:IP是否在线,物理MAC地址等。该库是完全面向对象的基于事件的库这意味着扫描数据包含在特制的“扫描”对象中,这些对象旨在处理从结果到异常的所有数据。



要求

  • .NET Framework 4.6.1

特征

方法 描述 用法
扫瞄 扫描单个IP以获得信息 Scan("192.168.1.1");
扫描范围 扫描一系列IP以获取信息 ScanRange("192.168.1.1", "192.168.1.255")
扫描清单 扫描IP列表以获取信息 ScanList("192.168.1.1, 192.168.1.2, 192.168.1.3")
PortKnock ping一个IP的每个端口 PortKnock("192.168.1.1");
PortKnockRange ping IP范围内的每个端口 PortKnockRange("192.168.1.1", "192.168.1.255");
PortKnockList 使用IP列表对每个端口执行ping操作 PortKnockList("192.198.1.1, 192.168.1.2, 192.168.1.3");
IsHostAlive N次ping主机X毫秒 IsHostAlive("192.168.1.1", 5, 1000);
GetAveragePingResponse 获取主机的平均ping响应 GetAveragePingResponse("192.168.1.1", 5, 1000);
港口开放 通过TCP和UDP ping单个端口 IsPortOpen("192.168.1.1", 45000, new TimeSpan(1000), false);

例子

IP扫描

在这个数字时代,扫描网络是司空见惯的任务,因此我自由地将其简化为任何希望以简单方式进行此操作的未来程序员。Forerunner库完全是面向对象的,因此非常适合即插即用情况。用于IP扫描的对象称为IPScanObject,它实际上包含许多属性:

  • 地址(字符串
  • IP(ip地址
  • 平(
  • 主机名(字符串
  • MAC(字符串
  • isOnline(Bool
  • 错误(异常

考虑到对象,让我们尝试创建一个新对象并使用它执行扫描。有多种解决方法,但是,最简单的入门方法是首先创建一个新的Scanner对象,以便我们可以访问我们的扫描方法。接下来,创建一个IPScanObject,然后使用您要枚举的IP将其设置为Scan方法。例如:

同步
使用 系统 ;
使用 先行者 ; //记住要导入我们的库。

命名空间 示例
{
    班级 计划
    {
        静态 void  Main(字符串 [] args)
        {
            //我们想扫描的IP。
            字符串 ip  =  “ 192.168.1.1 ” ;

            //创建一个新的扫描仪对象。
            Scanner  s  =  新的 Scanner();

            //创建一个新的扫描对象并执行扫描。
            IPScanObject  结果 =  s。扫描( ip);

            //输出我们已完成扫描。
            if(结果。错误 !=  null)
                控制台。WriteLine( “ [x]扫描期间发生错误。”);
            其他
                Console。WriteLine( “ [+] ”  +  ip  +  “已成功扫描!”)

            //允许用户随时退出。
            控制台。阅读();
        }
    }
} 

另一种方法,这是我的首选操作方法,是创建一个Scanner对象并订阅诸如ScanAsyncProgressChangedScanAsyncComplete之事件处理程序,这样我就可以完全控制我的异步方法。我可以控制它们的进度状态如何影响我的应用程序,等等。例如:

异步
使用 系统 ;
使用 系统。穿线。任务 ;
使用 先行者 ; //记住要导入我们的库。

命名空间 示例
{
    班级 计划
    {
        静态 void  Main(字符串 [] args)
        {
            //我们想扫描的IP。
            字符串 ip  =  “ 192.168.1.1 ” ;

            //设置我们的扫描仪对象。
            Scanner  s  =  新的 Scanner();
            s。ScanAsyncProgressChanged  + =  新的 ScanAsyncProgressChangedHandler( ScanAsyncProgressChanged);
            s。ScanAsyncComplete  + =  新的 ScanAsyncCompleteHandler( ScanAsyncComplete);

            //使用我们的IP启动新的扫描任务。
            TaskFactory  task  =  new  TaskFactory();
            任务。StartNew(() =>  š。 ScanAsync( IP));

            //允许用户随时退出。
            控制台。阅读();
        }

        静态 无效 ScanAsyncProgressChanged(对象 发送者,ScanAsyncProgressChangedEventArgs  e)
        {
            //在此处使用e.Progress进行一些操作,或者您可以
            取消订阅此事件//,因此您无需执行任何操作。
        }

        静态 无效的 ScanAsyncComplete(对象 发送者,ScanAsyncCompleteEventArgs  e)
        {
           //使用IPScanObject或e.Result进行操作。
            如果( Ë。结果,错误 !=  空)
                控制台。WriteLine( “ [x]扫描期间发生错误。”);
            其他
                Console。的WriteLine( “ [+] ”  +  ê。结果, IP  +  “已成功扫描!”)
        }
    }
} 

港口敲门

我知道你在想什么 港口敲门?是的,没有。该术语并不意味着在通过预定义的一组端口进行连接的传统意义上的端口敲击,而是仅检查是否确实打开了任何端口。从字面上看,它实际上是通过尝试连接到每个端口并发送数据来“敲”端口。就像IP扫描一样,端口终止使用一个自定义对象,简称为“ 端口终止扫描对象 ”或PKScanObjectPKScanObject实际上包含列表PKServiceObject S的又保持我们的端口的数据; 服务对象包含以下属性:

  • IP(字串
  • 端口(整数
  • 通讯协定(PortType
  • 状态(布尔

IP扫描的端口敲除方式与此类似。首先,创建一个Scanner对象。接下来,创建一个新的PKScanObject并将其设置为具有您选择的IP PortKnock方法,然后显示结果。例如:

同步
 
 
使用 系统 ;
使用 先行者 ; //记住要导入我们的库。

命名空间 示例
{
    班级 计划
    {
        静态 void  Main(字符串 [] args)
        {
            //我们想扫描的IP。
            字符串 ip  =  “ 192.168.1.1 ” ;

            //创建一个新的扫描仪对象。
            Scanner  s  =  新的 Scanner();

            //创建一个新的扫描对象并执行扫描。
            PKScanObject  结果 =  s。PortKnock( ip);

            //输出我们已完成扫描。
            if(结果。错误 !=  null)
                控制台。WriteLine( “ [x]扫描期间发生错误。”);
            其他
                Console。WriteLine( “ [+] ”  +  ip  +  “已成功扫描!”)

           //显示结果。
           的foreach( PKServiceObject  端口 的 结果。服务)
           {
                控制台。的WriteLine(“ [+] IP: ”  +  端口。IP  +  “ | ”  + 
                                  “端口:”  +  端口。端口。的ToString()+  “ | ”  + 
                                  “协议:”  +  端口。协议。的ToString()+  “ | “  + 
                                  ”状态:“  +  端口。状态。ToString());
           }

           //允许用户随时退出。
           控制台。阅读();
        }
    }
} 

最后,我将向您展示一个异步敲除端口的简单示例。除了可以利用事件来发挥优势外,它与端口同步敲除本质上相同。您可以获取进度更新,而不必担心UI崩溃或系统处于锁定状态。例如:

异步
 
 
使用 系统 ;
使用 系统。穿线。任务 ;
使用 先行者 ; //记住要导入我们的库。

命名空间 示例
{
    班级 计划
    {
        静态 void  Main(字符串 [] args)
        {
            //我们想扫描的IP。
            字符串 ip  =  “ 192.168.1.1 ” ;

            //设置我们的扫描仪对象。
            Scanner  s  =  新的 Scanner();
            s。PortKnockAsyncProgressChanged  + =  新的 PortKnockAsyncProgressChangedHandler( PortKnockAsyncProgressChanged);
            s。PortKnockAsyncComplete  + =  新的 PortKnockAsyncCompleteHandler( PortKnockAsyncComplete);

            //使用我们的IP启动新的扫描任务。
            TaskFactory  task  =  new  TaskFactory();
            任务。StartNew(() =>  š。 PortKnockAsync( IP));

            //允许用户随时退出。
            控制台。阅读();
        }

        静态 无效 PortKnockAsyncProgressChanged(对象 发送者,PortKnockAsyncProgressChangedEventArgs  e)
        {
            //显示我们的进度,以便我们了解ETA。
            如果( e。进度 ==  99)
            {
                控制台。写(ē。进展。的ToString()+  “%...... ”);
                控制台。WriteLine(“ 100%!”);
            }
            其他
                Console。写(ē。进展。的ToString()+  “%...... ”);
        }

        静态 无效 PortKnockAsyncComplete(对象 发送者,PortKnockAsyncCompleteEventArgs  e)
        {
            //告诉用户端口敲门已完成。
            控制台。WriteLine( “ [+]端口敲门完成!”);

            //检查我们是否解决了错误。
            如果( Ë。结果 ==  空)
                控制台。WriteLine( “ [X]端口爆震未返回任何数据!”);
            其他
            {
                //检查我们是否记录了任何端口。
                如果( Ë。结果,服务。计数 ==  0)
                    控制台。WriteLine( “ [!]敲门过程中未打开任何端口。”);
                其他
                {
                    //显示我们的端口及其详细信息。
                    的foreach( PKServiceObject  端口 在 ë。结果,服务)
                    {
                        控制台。的WriteLine(“ [+] IP: ”  +  端口。IP  +  “ | ”  + 
                                          “端口:”  +  端口。端口。的ToString()+  “ | ”  + 
                                          “协议:”  +  端口。协议。的ToString()+  “ | “  + 
                                          ”状态:“  +  端口。状态。ToString());
                    }
}
 }
} 




-------------------------------------项目地址:点击进入-------------------------------------



×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:黑客门户 » 一种支持多线程,Ping检测和数据提取的快速可扩展网络扫描库

网友评论(0)