0

我正在用 C 语言编写端口扫描器,我想检测在开放端口上运行的服务及其版本。
我已经编写了扫描仪代码,但现在我不知道如何检测正在运行的服务。
我能做些什么?

4

2 回答 2

4

如果你决定用自己的代码来做,你可以连接到端口,看看你是否得到任何数据,如果没有,则发送几个字节,然后再次检查。

然后将其与预期响应相匹配。

要了解您在寻找什么,您可以使用 telnet 手动连接到端口并戳它。在许多情况下(Web 服务器就是一个简单的示例),您必须发送一些格式正确的数据才能获得可用的响应。

nmap 已经完成了所有这些以及更多工作(例如,广泛的检查,例如查找字节顺序和 arp 流量的时间)

更新:一些人提到了众所周知的端口,但这不会帮助您发现在非标准端口上运行的标准服务,例如在自定义端口上运行的 ssh 或 http 服务器。

于 2013-03-08T21:28:06.663 回答
1

如果服务器先发送一些东西,则使用它来识别协议。

如果不是,则根据某种协议发送一些东西,例如 http,然后查看服务器发回的内容(有效响应或错误)。您可能需要使用不同的协议进行多次尝试,并且良好的顺序对于最大限度地减少连接数非常重要。

有些协议可能很难识别,很容易用你不知道的独特协议制作自定义服务器,甚至将真实服务器隐藏在其他 proto 的简单假服务器下,例如 http。

如果您只想知道端口通常是什么,请查看“知名端口”和官方保留端口

还要检查nmap源代码。

于 2013-03-08T21:30:10.110 回答