我正在用C编写一个端口扫描程序,我想检测一个开放端口上运行的服务及其版本。
我已经编写了扫描程序代码,但现在我不知道如何检测运行服务
我该怎么办?
答案 0 :(得分:4)
如果您决定在自己的代码中执行此操作,则可以连接到端口,查看是否有任何数据,如果没有,则发送几个字节,然后再次检查。
然后将其与预期的响应进行匹配。
要了解您要查找的内容,您可以使用telnet手动连接到端口并点击它。在许多情况下(Web服务器是一个简单的示例),您必须发送一些格式正确的数据才能获得可用的响应。
nmap完成了所有这些以及更多工作(例如广泛的检查,例如查找字节顺序和arp流量的时间)
更新:有几个人提到了众所周知的端口,但这无法帮助您发现在非标准端口上运行的标准服务,例如在自定义端口上运行的ssh或http服务器。
答案 1 :(得分:1)
如果服务器首先发送内容,请使用它来识别协议。
如果没有,请根据某些协议(例如http)发送内容,并查看服务器发回的内容(有效响应或错误)。您可能需要使用不同的协议进行多次尝试,并且良好的顺序对于最小化连接数非常重要。
某些协议可能很难识别,很容易使用您不了解的独特协议制作自定义服务器,甚至可以隐藏其他原型的简单虚假服务器下的真实服务器,如http。
如果您只是想知道端口通常是什么,请检查"well known ports"和官方reserved ports。
同时检查nmap源代码。