【问题标题】:Get running service daemon in C on specific port?在特定端口上在 C 中运行服务守护程序?
【发布时间】:2011-05-22 09:03:50
【问题描述】:

我必须获取在从输入接收的特定端口中工作的守护程序(可能还有它的版本)。类似“22”->“SSH”。

我该怎么办?

【问题讨论】:

  • 什么?这里的人乐于助人,但不是千里眼。请将您的问题编辑成接近实际问题的内容。

标签: c linux service daemon


【解决方案1】:

试试这样的:

#include <netdb.h>

char servname[50];
struct addrinfo *ai;
getaddrinfo(0, "22", 0, &ai);
getnameinfo(ai->ai_addr, ai->ai_addrlen, 0, 0, servname, sizeof servname, 0);
freeaddrinfo(ai);

注意:此代码不完整。您应该检查错误,如果您的端口号最初是整数而不是字符串,则可以使用snprintf 制作十进制字符串以传递给getaddrinfo。

与旧的getservbyport() 接口不同,我给出的解决方案是线程安全的,并且可以从库代码中调用。

【讨论】:

  • 我认为有一个问题:getnameinfo 给我,在 22 或其他,服务的名称(如“ssh”或“ftp”..)但我需要使用服务的真实名称和版本,比如 OpenSSH_5.2p1,有些人认为像“ssh -version”命令或其他服务。
  • 然后您需要连接到端口并使用任何特定于协议的方法来请求服务器的名称。当然,不能保证服务器会愿意告诉你它的名字(可以说,好的服务器不应该)。
【解决方案2】:

不清楚是只想在本地服务数据库中查找端口(如果是,请使用R's answer),还是要主动检查端口以尝试确定侦听服务。

如果是后者,那么最好的方法可能是对本地感兴趣的端口运行nmap。

【讨论】:

  • 我认为 OP 正在尝试编写自己的 nmap 或者尝试扩展一些现有的漏洞利用脚本以检查已知易受攻击的服务器...
猜你喜欢
  • 2014-05-31
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2023-03-10
  • 2019-08-09
  • 1970-01-01
  • 2011-10-13
  • 2019-02-15
相关资源
最近更新 更多