You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET中间件中返回ECONNREFUSED以隐藏API?

问题描述

我搭建了一个接收第三方Webhook的小型Web服务器,目前处于测试阶段且会记录所有请求。但发现来自搜索引擎、IP爬虫等的随机请求远多于自身业务请求。我写了一段简单中间件来处理这类请求:

app.Use(async (context, next) =>
{
    await next();

    // Do not respond to random fkn bot and search engine garbage.. just be silent!
    if (context.Response.StatusCode != 200)
    {
        context.Abort();
    }
});

测试时发现:服务器运行状态下访问404端点,中间件返回socket hang up;服务器未运行时则返回ECONNREFUSED——这才是我希望在端点不存在时返回的结果。我想让服务器对外表现得像不存在一样保持静默,但context.Abort()返回的socket hang up会明确暴露服务存在,请问能否强制返回ECONNREFUSED(哪怕有少量处理延迟)?

解决方案

无法直接返回ECONNREFUSED。这个错误属于TCP协议层面,只有当目标端口没有任何进程监听时才会触发。你的服务器已经在监听端口,TCP连接已经完成握手,此时不可能再返回该错误。

要实现“让服务器看起来不存在”的效果,可以尝试以下方案:

  • 提前终止未完成的TCP连接:把请求判断逻辑放在await next()之前,一旦识别出非业务请求,立刻调用context.Abort()。此时TCP连接还未完全建立,客户端会收到connection reset类错误,比socket hang up更接近“服务不存在”的表现。
  • 通过防火墙/反向代理拦截:在服务器前端部署Nginx或防火墙规则,直接拦截非业务请求的IP、路径或特征,让这些请求根本无法到达你的Web服务器。此时客户端会收到ECONNREFUSED或超时错误,完全隐藏服务的存在。
  • 静默超时处理:对于非法请求,不做任何响应也不关闭连接,让客户端等待直到超时。这种方式客户端会得到timeout错误,同样能达到隐藏服务的效果,但要注意配置服务器的连接超时参数,避免资源占用过高。

内容的提问来源于stack exchange,提问作者Piotr Kula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:01:22