我的项目陷入了一个小死胡同。我需要检索网络中任何给定设备(带有linux内核)的受支持协议。我知道该getprotobyname
方法可以完成工作,但是据我目前的了解,我仅成功实现了该方法,以获取运行代码的本地计算机的协议详细信息。代码如下,
#include <stdio.h>
#include <netdb.h>
int main (int argc, char *argv[]) {
int i;
struct protoent *proto = getprotobyname("ipv6");
if ( proto != NULL )
{
printf("Official name: %s\n", proto->p_name);
printf("Port#: %d\n", proto->p_proto);
for ( i = 0; proto->p_aliases[i] != 0; i++ )
.
printf("Alias[%d]: %s\n", i+1,
proto->p_aliases[i]);
}
else
perror("protocol not found");
}
我的查询是如何实现此解决方案,在该解决方案中我可以解析目标设备的IP地址,以便getprotobyname
可以尝试识别目标设备协议。非常感谢任何示例代码段或参考。解决这个问题将使我不堪重负,并再次感谢:)
编辑
执行我的要求的任何其他方法也将非常有帮助:)
简而言之:你不能。
getprotocolbyname()
只是从本地(/ etc / protocols)文本文件(协议名称,ip头协议标识号,...)中检索静态信息,并打算将数字映射到人类可读的协议信息。
任何协议出现在该文件中的事实并不意味着本地计算机完全支持它。这与/ etc / services非常相似,后者将端口号与服务名称匹配。如果服务出现在文件中,则并不表示机器提供了该服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句