Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C getprotobyname主机的名称_C_Linux_Network Programming - Fatal编程技术网

C getprotobyname主机的名称

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 =

我的项目遇到了一个小小的死胡同。我需要检索网络中任何给定设备(具有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");
}
#包括
#包括
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使用“跟踪器”服务器帮助人们找到彼此,基本上是公共注册。