在C#中使用并行处理来测试网站抵御DDOS的能力。

我有一个网站,我也在探索C#中的并行处理,我想这将是一个好主意,看看我是否可以写我自己的DDOS测试脚本,看看网站将如何处理DDOS攻击.然而,当我运行它时,似乎只有13个线程在使用,并且它们总是返回200个状态码,从来没有任何东西表明响应不快不准确,当进入网站并在脚本运行的同时刷新时,网站加载很快。

我知道有一些工具可以进行渗透测试等等,但我只是想知道为什么我不能使用Parallel loop来对网站进行足够多的并发HTTP请求,使其难以快速加载并返回响应。似乎我从Twitter Rush中得到的问题更多,仅仅是通过在网站上推送一个新页面的链接,以及100多个BOTS都并发地冲到网站上进行抓取、扫描、检查等,而不是任何我可以使用Parallel循环扔给它的东西。

是我做错了什么,限制了并发线程的数量,还是我无法控制。我可以直接抛出许多长篇大论的搜索查询,我知道这些查询会扫描整个DB,在每个请求中返回0个结果,因为我已经看到了这种情况,根据要扫描的数据大小和搜索查询的复杂性,它可能会导致CPU峰值和缓慢的负载。

所以,如果不讲究使用其他工具,有没有办法抛出100多个并行请求来加载一个页面,而不是最大13个线程,它可以完美地处理。

下面是代码,URL和要做的HTTP请求数是作为命令行参数传递进来的。

static void Attack(string url, int limit)
{
    Console.WriteLine("IN Attack = {0}, requests = {1}", url, limit);
    try
    {
        Parallel.For(0, limit, i =>
        {

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.ServicePoint.ConnectionLimit = limit;
            HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;

            int statuscode = Convert.ToInt32(webResponse.StatusCode);

            Console.WriteLine("iteration {0} on thread {1} Status {2}", i,
                                Thread.CurrentThread.ManagedThreadId, statuscode);
        });
    }
    catch (AggregateException exc)
    {
        exc.InnerExceptions.ToList().ForEach(e =>
        {
            Console.WriteLine(e.Message);
        });
    }
    catch (Exception ex)
    {
        Console.WriteLine("In Exception: " + ex.Message.ToString());
    }
    finally
    {
        Console.WriteLine("All finished");
    }
}

解决方案:

你可以像这样试试。

        var socketsHandler = new SocketsHttpHandler
        {
            PooledConnectionLifetime = TimeSpan.FromSeconds(1),
            PooledConnectionIdleTimeout = TimeSpan.FromSeconds(1),
            MaxConnectionsPerServer = 10
        };

        var client = new HttpClient(socketsHandler);

        for (var i = 0; i < limit; i++)
        {
            _ = await client.GetAsync(url);
        }

给TA打赏
共{{data.count}}人
人已打赏
未分类

类 "turtles "没有属性 "forward"(Python Turtle)。

2022-9-8 20:43:39

未分类

基于Flask框架中的头的请求验证。

2022-9-8 20:43:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索