我正在寻找一个命令行实用程序,它允许我检查远程计算机的特定端口上正在运行什么服务(例如:http/ftp/ssh)。
我想象这样的程序如何运行的一个例子:
kess@KG-PC:~$ portcheck google.com:80
Port 80 of google.com is running a(n) "http" server
答案1
进行此类识别的最简单方法是建立与此端口的连接并抓取横幅。横幅(通常)可以告诉您这是否是 Apache httpd、openssh 等。横幅列表可能相当大。您也可以尝试一些命令,例如GET / HTTP/1
检查服务是否响应它们。对于纯文本命令telnet
就足够了。对于加密 (SSL/TLS),您可能需要使用openssl s_client
.
AFAIKnmap
可以做这样的事情,所以你可以下载源代码并检查那里是如何完成的。
如果您只想使用一个工具,您可以测试:
nmap -A google.com -p 80
答案2
您可以ss
将该-p
选项与过滤器一起使用,以显示哪个进程正在使用特定端口。
按目标端口过滤:
ss -p dst = :<port>
按源端口过滤:
ss -p src = :<port>
获取进程可能需要 root 权限。
如果您无权访问远程计算机,则可以使用 执行端口扫描nmap
。这将列出开放端口以及与端口关联的常用服务,但不能保证该服务是计算机上实际使用的服务,因为端口可以任意更改。
使用特定端口范围的基本扫描:
nmap -p <first-port>-<last-port> <host>