C getprotobyname主机的名称
我的项目遇到了一个小小的死胡同。我需要检索网络中任何给定设备(具有linux内核)的受支持协议。我知道C getprotobyname主机的名称,c,linux,network-programming,C,Linux,Network Programming,我的项目遇到了一个小小的死胡同。我需要检索网络中任何给定设备(具有linux内核)的受支持协议。我知道getprotobyname方法可以完成这项工作,但就我目前所知,我只是成功地实现了它,以获取运行代码的本地机器的协议细节。代码如下: #include <stdio.h> #include <netdb.h> int main (int argc, char *argv[]) { int i; struct protoent *proto =
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");
}
#包括
#包括
int main(int argc,char*argv[]){
int i;
struct protoent*proto=getprotobyname(“ipv6”);
if(proto!=NULL)
{
printf(“官方名称:%s\n”,proto->p\u名称);
printf(“端口:%d\n”,proto->p#u proto);
对于(i=0;proto->p_别名[i]!=0;i++)
.
printf(“别名[%d]:%s\n”,i+1,
proto->p_别名[i];
}
其他的
perror(“未找到协议”);
}
我的问题是如何实现这个解决方案,我可以解析目标设备的IP地址,以便getprotobyname
可以尝试识别目标设备协议。非常感谢任何示例代码段或参考。解决这个问题会减轻我的负担,再次感谢:)
编辑
任何执行我的需求的替代方法都会非常有用:)简言之:你不能
getprotocolbyname()
仅从本地(/etc/protocols)文本文件(协议名称、ip头协议标识号等)检索静态信息,用于将数字映射到人类可读的协议信息
任何协议出现在该文件中的事实并不意味着本地计算机完全支持它。这与将端口号与服务名称匹配的/etc/services非常相似。如果文件中出现服务,这并不意味着机器提供此服务。谢谢您的澄清,先生。。有什么方法可以满足我的需求吗?不幸的是,没有注册中心,就像RPC一样。您可以尝试获取所需信息的唯一方法是扫描每个端口,但是(a)速度太慢,(b)这对其他人的机器来说是一件可怕的事情,(c)连接到正确的端口并不意味着它响应正确的协议。作为一个极端的例子,BitTorrent使用“跟踪器”服务器帮助人们找到彼此,基本上是公共注册。