如何阻止 TCP 端口扫描器?

How to discourage TCP port scanners?

我有许多自定义应用程序充当服务器,接受 TCP 连接。它们不是网络服务器,也不会说 http;这都是自定义协议。它们向世界开放,尽管通常位于不知名的港口。他们经常被探测,我认为主要是扫描器试图找到无人看守的网络服务器。

我正在努力想出最好的方法来阻止这种情况。检查第一个到达的令牌是否为 GET 或 POST 等对我来说很简单,这不是我的任何自定义协议的一部分,因此表明我正在被扫描器戳。我想让尝试这样做的人感到不安,只是作为一项 public 服务。

我不熟悉扫描仪中使用的代码,我希望这里有人熟悉。理想情况下,我可以回复一些让扫描仪崩溃、混淆它或浪费它时间的东西。

约束是,我宁愿不必让套接字打开很长时间。如果我这样做,有人可能会响应数百个连接,从而导致 DoS。

到目前为止,我已经尝试使用 308(永久重定向)回复 CIA 的网站。但是端口扫描器可能会遵循重定向吗?

我已经尝试发回带有错误格式 UTF-8 的请求正文,希望有人没有处理好。但我无法知道那有多有效。

我目前发回的字符串是:

"HTTP/1.1 308 I'm a teapot. And you're an annoyance.\r\n"
"Content-Type: text/html; charset=utf-8\r\n"
//"Content-Length: 7673\r\n" //ugh, browser makes connection linger
//send him somewhere nice:
"Location: https://www.cia.gov\r\n"
"\r\n"
//make the body incomplete, ill-formed trash
"<html \xF0\x9F\x96\x95 \xf3\xf3\xf3\xf3\xf3\xf3\xf3\xf3\xf3\xf3"

我的问题,简单地说,就是"is there a better way?"这一定是人们经常处理的问题。我最好关闭连接,还是喷出二进制垃圾......?注意:我在运送病毒软件时划清界线。我的用户极有可能错误地将浏览器指向这些端口。

我对这个问题没有抱太大希望,回复水平符合预期。因此,我将只宣布我的少量发现——一般来说,扫描仪的重复访问是相当罕见的,但发送格式错误的响应似乎比什么都不做或重定向到中央情报局更有 10% 的可能性阻止重复访问者。这是基于小样本量,所以不要认为它值那么多。