最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實現(xiàn)一個簡單的漏洞掃描器

 更新時間:2026年04月10日 09:16:51   作者:JQLvopkk  
本文介紹了使用C#開發(fā)一個簡單的漏洞掃描器,具備端口掃描和基礎(chǔ)Web漏洞檢測功能,如SQL注入和XSS檢測,文章提供了項目創(chuàng)建方法、完整代碼、使用說明以及功能說明,還提到了局限性和改進(jìn)方向,最后建議了功能拓展方向,需要的朋友可以參考下

下面是一個用 C# 開發(fā)簡單漏洞掃描器的示例。它包含兩個核心功能:

  1. 端口掃描:快速檢測目標(biāo)主機(jī)開放的 TCP 端口。
  2. 基礎(chǔ) Web 漏洞檢測:對 HTTP/HTTPS 服務(wù)進(jìn)行簡單的 SQL 注入和 XSS 反射測試。

你可以在此基礎(chǔ)上擴(kuò)展服務(wù)識別、漏洞庫匹配等高級功能。

1. 項目創(chuàng)建與依賴

建議使用 .NET 6/8 控制臺應(yīng)用。

dotnet new console -n SimpleVulnScanner cd SimpleVulnScanner

無需額外 NuGet 包,僅使用內(nèi)置 System.Net.Sockets、System.Net.Http

2. 完整代碼

using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
namespace SimpleVulnScanner;
class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("=== 簡單漏洞掃描器 (C#) ===");
        string target = GetTarget(args);
        int startPort = 1, endPort = 1024; // 默認(rèn)掃描常見端口
        // 解析端口范圍
        if (args.Length >= 2)
        {
            var portParts = args[1].Split('-');
            if (portParts.Length == 2 && int.TryParse(portParts[0], out int p1) && int.TryParse(portParts[1], out int p2))
            {
                startPort = p1;
                endPort = p2;
            }
            else if (int.TryParse(args[1], out int singlePort))
            {
                startPort = singlePort;
                endPort = singlePort;
            }
        }
        Console.WriteLine($"目標(biāo): {target}");
        Console.WriteLine($"端口范圍: {startPort}-{endPort}");
        Console.WriteLine("開始端口掃描...\n");
        var openPorts = await PortScanner.ScanPortsAsync(target, startPort, endPort);
        Console.WriteLine("\n端口掃描完成。");
        if (openPorts.Count == 0)
        {
            Console.WriteLine("未發(fā)現(xiàn)開放端口。");
            return;
        }
        Console.WriteLine("開放端口列表:");
        foreach (var port in openPorts)
        {
            string service = PortScanner.GuessService(port);
            Console.WriteLine($"  {port}/tcp  ({service})");
        }
        // 對常見 Web 端口進(jìn)行漏洞檢測
        var webPorts = openPorts.Where(p => p == 80 || p == 443 || p == 8080 || p == 8443).ToList();
        if (webPorts.Any())
        {
            Console.WriteLine("\n開始 Web 漏洞檢測...");
            foreach (var port in webPorts)
            {
                string scheme = port == 443 || port == 8443 ? "https" : "http";
                string baseUrl = $"{scheme}://{target}:{port}";
                await WebVulnScanner.ScanAsync(baseUrl);
            }
        }
        Console.WriteLine("\n掃描結(jié)束。按任意鍵退出...");
        Console.ReadKey();
    }
    static string GetTarget(string[] args)
    {
        if (args.Length > 0 && !string.IsNullOrEmpty(args[0]))
            return args[0];
        Console.Write("請輸入目標(biāo) IP 或域名: ");
        return Console.ReadLine()?.Trim() ?? "127.0.0.1";
    }
}
// ---------- 端口掃描模塊 ----------
public static class PortScanner
{
    private const int TimeoutMs = 1000;
    private const int MaxConcurrency = 100;
    public static async Task<List<int>> ScanPortsAsync(string host, int startPort, int endPort)
    {
        var openPorts = new List<int>();
        var semaphore = new SemaphoreSlim(MaxConcurrency);
        var tasks = new List<Task>();
        for (int port = startPort; port <= endPort; port++)
        {
            await semaphore.WaitAsync();
            int currentPort = port;
            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    if (await IsPortOpenAsync(host, currentPort))
                    {
                        lock (openPorts)
                        {
                            openPorts.Add(currentPort);
                            Console.WriteLine($"[+] 開放: {currentPort}/tcp");
                        }
                    }
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }
        await Task.WhenAll(tasks);
        openPorts.Sort();
        return openPorts;
    }
    private static async Task<bool> IsPortOpenAsync(string host, int port)
    {
        try
        {
            using var client = new TcpClient();
            var connectTask = client.ConnectAsync(host, port);
            var timeoutTask = Task.Delay(TimeoutMs);
            var completedTask = await Task.WhenAny(connectTask, timeoutTask);
            if (completedTask == timeoutTask)
                return false;
            return client.Connected;
        }
        catch
        {
            return false;
        }
    }
    public static string GuessService(int port)
    {
        return port switch
        {
            21 => "FTP",
            22 => "SSH",
            23 => "Telnet",
            25 => "SMTP",
            80 => "HTTP",
            110 => "POP3",
            143 => "IMAP",
            443 => "HTTPS",
            3306 => "MySQL",
            3389 => "RDP",
            5432 => "PostgreSQL",
            8080 => "HTTP-Proxy",
            _ => "未知"
        };
    }
}
// ---------- Web 漏洞檢測模塊 ----------
public static class WebVulnScanner
{
    private static readonly HttpClient _httpClient;
    static WebVulnScanner()
    {
        var handler = new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true // 忽略證書錯誤
        };
        _httpClient = new HttpClient(handler);
        _httpClient.Timeout = TimeSpan.FromSeconds(10);
        _httpClient.DefaultRequestHeaders.Add("User-Agent", "SimpleVulnScanner/1.0");
    }
    public static async Task ScanAsync(string baseUrl)
    {
        Console.WriteLine($"\n[*] 掃描 Web 服務(wù): {baseUrl}");
        // 1. 檢測 SQL 注入(基于錯誤回顯)
        await TestSqlInjectionAsync(baseUrl);
        // 2. 檢測反射型 XSS
        await TestReflectedXssAsync(baseUrl);
    }
    private static async Task TestSqlInjectionAsync(string baseUrl)
    {
        string[] sqlPayloads = { "'", "\"", "' OR '1'='1", "\" OR \"1\"=\"1", "' OR 1=1--", "\" OR 1=1--" };
        var errorPatterns = new[]
        {
            "SQL syntax", "mysql_fetch", "ORA-", "PostgreSQL", "SQLite", "Microsoft OLE DB",
            "Unclosed quotation mark", "You have an error in your SQL syntax"
        };
        foreach (var payload in sqlPayloads)
        {
            string testUrl = $"{baseUrl}/?id={Uri.EscapeDataString(payload)}";
            try
            {
                var response = await _httpClient.GetAsync(testUrl);
                string content = await response.Content.ReadAsStringAsync();
                foreach (var pattern in errorPatterns)
                {
                    if (content.Contains(pattern, StringComparison.OrdinalIgnoreCase))
                    {
                        Console.WriteLine($"  [!] 可能存在 SQL 注入 (錯誤回顯) - Payload: {payload}");
                        return; // 僅報告一次
                    }
                }
            }
            catch (Exception ex)
            {
                // 忽略網(wǎng)絡(luò)錯誤
            }
        }
    }
    private static async Task TestReflectedXssAsync(string baseUrl)
    {
        string xssPayload = "<script>alert('XSS')</script>";
        string testUrl = $"{baseUrl}/?q={Uri.EscapeDataString(xssPayload)}";
        try
        {
            var response = await _httpClient.GetAsync(testUrl);
            string content = await response.Content.ReadAsStringAsync();
            // 檢查 payload 是否原樣反射在響應(yīng)中
            if (content.Contains(xssPayload))
            {
                Console.WriteLine($"  [!] 可能存在反射型 XSS - Payload 已回顯");
            }
        }
        catch
        {
            // 忽略
        }
    }
}

3. 使用說明

命令行參數(shù)

dotnet run <目標(biāo)IP/域名> [端口范圍]

示例:

# 掃描 127.0.0.1 的 1-1024 端口
dotnet run 127.0.0.1
# 掃描 192.168.1.1 的 80-100 端口
dotnet run 192.168.1.1 80-100
# 掃描單個端口 443
dotnet run example.com 443

若未提供參數(shù),程序會交互式詢問目標(biāo)。

運(yùn)行截圖示意

=== 簡單漏洞掃描器 (C#) ===
目標(biāo): 192.168.1.1
端口范圍: 1-1024
開始端口掃描...
[+] 開放: 80/tcp
[+] 開放: 443/tcp
[+] 開放: 22/tcp
端口掃描完成。
開放端口列表:
  22/tcp  (SSH)
  80/tcp  (HTTP)
  443/tcp  (HTTPS)
開始 Web 漏洞檢測...
[*] 掃描 Web 服務(wù): http://192.168.1.1:80
  [!] 可能存在 SQL 注入 (錯誤回顯) - Payload: '
  [!] 可能存在反射型 XSS - Payload 已回顯
[*] 掃描 Web 服務(wù): https://192.168.1.1:443
掃描結(jié)束。按任意鍵退出...

4. 功能說明與局限性

功能實現(xiàn)方式說明
端口掃描TCP Connect 異步掃描超時 1 秒,并發(fā) 100,速度快且準(zhǔn)確
服務(wù)猜測靜態(tài)映射表根據(jù)常見端口號推測服務(wù)名稱
SQL 注入檢測發(fā)送 ' 等 payload,匹配錯誤關(guān)鍵詞僅檢測錯誤回顯型,不適用于盲注
XSS 檢測發(fā)送 <script>alert('XSS')</script> 并檢查回顯僅檢測反射型,不適用于 DOM 型

局限性與改進(jìn)方向

  • 端口掃描:容易被防火墻攔截,可改用 SYN 半開掃描(需更高權(quán)限)。
  • Web 漏洞檢測:非?;A(chǔ),實際環(huán)境中應(yīng)集成更全面的 payload 和智能分析(如基于 DOM 的變化)。
  • 服務(wù)識別:目前僅靠端口猜測,可增加 Banner 抓取。
  • 多線程安全:已使用 SemaphoreSlim 控制并發(fā),避免資源耗盡。

5. 擴(kuò)展建議

如果你想增強(qiáng)這個掃描器,可以考慮以下方向:

  1. Banner 抓取:在端口開放后發(fā)送特定協(xié)議探測包(如 HTTP GET、SMTP EHLO),獲取服務(wù)版本信息。
  2. 漏洞庫匹配:將識別到的服務(wù)版本與 CVE 數(shù)據(jù)庫對比。
  3. 爬蟲與表單掃描:對發(fā)現(xiàn)的 Web 服務(wù)進(jìn)行爬取,自動填充表單進(jìn)行 SQLi / XSS 測試。
  4. 報告生成:將掃描結(jié)果輸出為 JSON 或 HTML 報告。
  5. 插件化架構(gòu):使用 MEF 或反射加載自定義檢測模塊。

以上就是基于C#實現(xiàn)一個簡單的漏洞掃描器的詳細(xì)內(nèi)容,更多關(guān)于C#漏洞掃描器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#單例模式Singleton的實現(xiàn)詳解

    C#單例模式Singleton的實現(xiàn)詳解

    單例模式(Singleton?Pattern)是日常開發(fā)中最簡單的設(shè)計模式之一,它提供了一種創(chuàng)建對象的最佳方式,本文主要為大家介紹的是C#單例模式的實現(xiàn)方法,需要的可以參考一下
    2023-05-05
  • C#操作目錄與文件的方法步驟

    C#操作目錄與文件的方法步驟

    本篇文章是對C#操作目錄與文件的方法步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Unity計時器功能實現(xiàn)示例

    Unity計時器功能實現(xiàn)示例

    計時器在很多地方都可以使用,本文主要介紹了Unity計時器功能實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 如何最大限度地降低多線程C#代碼的復(fù)雜性

    如何最大限度地降低多線程C#代碼的復(fù)雜性

    這篇文章主要介紹了如何最大限度地降低多線程C#代碼的復(fù)雜性,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 基于Unity3D實現(xiàn)仿真時鐘詳解

    基于Unity3D實現(xiàn)仿真時鐘詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Unity3D模擬實現(xiàn)一個簡單是時鐘效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • C#實現(xiàn)一個Word保護(hù)性模板文件

    C#實現(xiàn)一個Word保護(hù)性模板文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實現(xiàn)一個Word保護(hù)性模板文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考一下
    2024-01-01
  • 使用Cursor進(jìn)行C#編程的詳細(xì)步驟

    使用Cursor進(jìn)行C#編程的詳細(xì)步驟

    Cursor 是一款功能強(qiáng)大的代碼編輯器,它憑借其人工智能輔助功能,為開發(fā)者帶來了諸多便利,本文將給大家介紹了用Cursor 進(jìn)行C#編程的超詳細(xì)指南,需要的朋友可以參考下
    2025-03-03
  • Linq兩個List集合取交集的實現(xiàn)

    Linq兩個List集合取交集的實現(xiàn)

    這篇文章主要介紹了Linq兩個List集合取交集的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • c#對xml增刪改查操作示例

    c#對xml增刪改查操作示例

    本文主要介紹c#對xml增刪改查操作的示例,大家參考使用吧
    2014-01-01
  • C#面向?qū)ο笤O(shè)計原則之接口隔離原則

    C#面向?qū)ο笤O(shè)計原則之接口隔離原則

    這篇文章介紹了C#面向?qū)ο笤O(shè)計原則之接口隔離原則,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

永济市| 温泉县| 兴仁县| 永靖县| 舟山市| 闻喜县| 开原市| 习水县| 台东县| 繁峙县| 东乡族自治县| 水城县| 芷江| 双城市| 来安县| 南丰县| 苍山县| 东明县| 临沂市| 汝阳县| 涡阳县| 类乌齐县| 陵川县| 搜索| 双柏县| 子长县| 德令哈市| 温宿县| 天峨县| 开原市| 洛阳市| 揭阳市| 同仁县| 汾西县| 方正县| 乐山市| 陵水| 柞水县| 安庆市| 米易县| 江达县|