我对 Linux 还很陌生,所以我的问题是:是否有任何命令或任何其他方式(除了谷歌搜索)来查找 SRV 记录(端口转发)所需的服务名称?我正在使用 Teamspeak3 的音乐机器人(Sinusbot)我想通过 bot.mydomain.com 访问该机器人。访问它的常用方法是 mydomain.com:8087。意思是:我需要类似于“_ts3”、“_minecraft”等的东西,但如果可能的话,我必须通过命令找到它)
答案1
DNS SRV 记录是发布定义的服务端点的一种方式。客户端可以通过检索定义的 DNS 标签来定位服务。
这里的关键是“定义”,如注册的或至少在服务的用户和提供商中众所周知的。我希望确定运行服务的进程的名称是无关紧要的。了解它正在监听的端口是相关的,并且可以使用lsof
评论中提供的参考 nick064 找到。在 Linux 上确定侦听端口时更常见的是netstat -ltunp | grep ${processname}
或ss -ltunp | grep ${processname}
。 (其中 ${processname} 是您感兴趣的实际名称)
运行服务的应用程序或程序的名称不要求与已发布的服务标签相同。许多不同的程序可以在不同的环境中提供相同的服务,并且在 DNS 标签意义上与相同的服务名称相关联。
如果每个运营商为同一服务选择不同的标签,DNS SRV 记录将基本上毫无用处,因为客户端不知道要在 DNS 中查找什么。
正如 Gareth 评论的那样,IANA 维护着一份注册服务列表(在互联网意义上)——其中一些已定义了关联的 DNS SRV 标签。该列表是常见服务与其 IETF RFC 的便捷映射。 Teamspeak 不在该列表中,这意味着您需要咨询您所使用的服务的用户社区,以了解 DNS 标签应该是什么。
RFC 3263,第 4.2 节参考一个例子可能会有用。
答案2
您可以使用以下方式查找所有服务:
service --status-all
您可以通过 grep 解析此内容以在显示的列表中进行搜索:
service --status-all | grep pattern
事实证明您可能需要找到某个流程,在这种情况下:
ps aux | grep pattern
例如,运行ps aux | grep "_ts3"