【发布时间】:2011-05-22 09:03:50
【问题描述】:
我必须获取在从输入接收的特定端口中工作的守护程序(可能还有它的版本)。类似“22”->“SSH”。
我该怎么办?
【问题讨论】:
-
什么?这里的人乐于助人,但不是千里眼。请将您的问题编辑成接近实际问题的内容。
我必须获取在从输入接收的特定端口中工作的守护程序(可能还有它的版本)。类似“22”->“SSH”。
我该怎么办?
【问题讨论】:
试试这样的:
#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() 接口不同,我给出的解决方案是线程安全的,并且可以从库代码中调用。
【讨论】:
不清楚是只想在本地服务数据库中查找端口(如果是,请使用R's answer),还是要主动检查端口以尝试确定侦听服务。
如果是后者,那么最好的方法可能是对本地感兴趣的端口运行nmap。
【讨论】:
nmap 或者尝试扩展一些现有的漏洞利用脚本以检查已知易受攻击的服务器...