我正在用C编写端口扫描器,并且想要检测在开放端口及其版本上运行的是什么服务。
我已经写了扫描器代码,但现在我不知道如何检测正在运行的服务。
我能做什么?C检查在开放端口上运行的是什么服务
回答
如果您决定在自己的代码中执行此操作,则可以连接到端口,查看是否有任何数据,如果没有,则发送几个字节,然后再次检查。
然后将其与预期响应进行匹配。
想要知道你在找什么,你可以用telnet手动连接到端口,并戳它。在许多情况下(Web服务器就是一个简单的例子),您必须发送一些格式正确的数据才能获得可用的响应。
NMAP做这一切以及更多(例如广泛的检查,如寻找字节顺序和ARP通信量的时间)
UPDATE:几个人都提到众所周知的端口,但不会帮助你发现标准服务运行在非标准端口上,例如运行在自定义端口上的ssh或http服务器。
我同意这里的所有内容,但会重复我在上述评论中所说的内容:即使您为每个人所知的协议编写“最小客户端”,也无法以100%的准确率实现此目标。 – 2013-03-08 21:30:57
@NikBougalis绝对如此。检测和发送数据以获取响应的方式几乎是无止境的。我不会承担这样的项目,除了a)为了好玩,或者b)为nmap不知道的内部定制服务 – 2013-03-08 21:49:12
如果服务器先发送一些东西,用它来标识协议。
如果没有,请根据某些协议(例如http)发送内容,然后查看回送的服务器(有效响应或错误)。您可能需要使用不同的协议进行多次尝试,并且良好的顺序对于减少连接数量非常重要。
某些协议可能很难识别,并且很容易使用您不知道的独特协议定制服务器,甚至隐藏真正的服务器,如http等简单的假冒服务器。
如果你只是想知道端口通常是什么,请检查"well known ports"和官方reserved ports。
另请参阅nmap源代码。
- 1. 检查C/C++中的开放端口
- 2. 检查客户端端口是开放的,并转发[C#,ASP.NET]
- 3. 如何使ASP.NET开发服务器在端口80上运行?
- 4. 检查服务是否正在运行?
- 5. Linux服务器上的Tomcat未在端口80上运行
- 6. 检查是否在Linux服务器上运行的jar文件
- 7. 为什么检查服务是否正在运行,是否给出错误
- 8. C程序 - 如何检查Web服务是否正在运行
- 9. 检查多台机器上的开放端口
- 10. 检查SQL服务器服务是否正在运行
- 11. 检查运行在窗口上的php
- 12. 如何检查JBoss是否在Unix服务器上运行?
- 13. 在端口3306上在MAMP上运行MySQL有什么好处?
- 14. 在具有不同端口的服务器上运行neo4j
- 15. NTVS未在我指定的端口上运行节点服务
- 16. 在不同的端口上使用dev_appserver.py运行多个服务
- 17. 在两个不同的端口上运行Tomcat服务器
- 18. 在运行在特定端口上的网络中查找服务器
- 19. 检查“服务器”服务是否正在运行 - 多语言C#.Net
- 20. 为什么在检查打开的串行端口时会出现异常?
- 21. 检查端口是否打开
- 22. 如何查找并停止在端口443上运行服务器的进程
- 23. 检查应用程序是否在服务器上运行或本地运行
- 24. 运行多个服务,控制端口
- 25. 什么是保持ATL服务运行
- 26. 如何确定端口是否在Windows服务器上打开?
- 27. 检查HTTP端口是否在Windows上打开
- 28. 端口Matlab程序在Apache服务器上运行
- 29. 无法在端口80上运行节点服务器
- 30. 在不同端口上运行Hudson作为Windows服务
您可以在这里查看http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers – Blood 2013-03-08 21:25:07
考虑[IANA知名港口](http://www.iana.org/assignments/service-names-port - 值/服务名称,端口numbers.xml)。 – 2013-03-08 21:26:17
我知道哪些服务*在端口(22-> ssh)上运行,但我想知道的是:我如何检查*确定*服务运行的是什么以及它的版本。 – polslinux 2013-03-08 21:26:55