C检查开放端口上正在运行的服务

时间:2013-03-08 21:21:46

标签: c port-scanning

我正在用C编写一个端口扫描程序,我想检测一个开放端口上运行的服务及其版本。
我已经编写了扫描程序代码,但现在我不知道如何检测运行服务 我该怎么办?

2 个答案:

答案 0 :(得分:4)

如果您决定在自己的代码中执行此操作,则可以连接到端口,查看是否有任何数据,如果没有,则发送几个字节,然后再次检查。

然后将其与预期的响应进行匹配。

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

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

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

答案 1 :(得分:1)

如果服务器首先发送内容,请使用它来识别协议。

如果没有,请根据某些协议(例如http)发送内容,并查看服务器发回的内容(有效响应或错误)。您可能需要使用不同的协议进行多次尝试,并且良好的顺序对于最小化连接数非常重要。

某些协议可能很难识别,很容易使用您不了解的独特协议制作自定义服务器,甚至可以隐藏其他原型的简单虚假服务器下的真实服务器,如http。

如果您只是想知道端口通常是什么,请检查"well known ports"和官方reserved ports

同时检查nmap源代码。