`
yaojingguo
  • 浏览: 209065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Use getaddrinfo to recognize hostname

阅读更多

 

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
 
#ifndef   NI_MAXHOST
#define   NI_MAXHOST 1025
#endif

int main(int argc, const char *argv[]) 
{
    struct addrinfo * result;
    struct addrinfo * res;
    int error;

    if (argc != 2) {
      printf("usage: program hostname\n");
      return 1;
    }
 
    /* hint */
    struct addrinfo hint;
    hint.ai_family = AF_INET;
    hint.ai_flags = 0;
    hint.ai_protocol = 0;
    /* if set to 0, 3 addrinfos will be returned */
    hint.ai_socktype = SOCK_STREAM;

    /* must be set to 0 or NULL */
    hint.ai_addrlen = 0;
    hint.ai_addr = NULL;
    hint.ai_canonname = NULL;
    hint.ai_next = NULL;

    error = getaddrinfo(argv[1], NULL, &hint, &result);
 
    if (error != 0) {   
        fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
        return 1;
    }   
 
    /* loop over all returned results and do inverse lookup */
    for (res = result; res != NULL; res = res->ai_next) {   
        char hostname[NI_MAXHOST] = "";

        error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0); 
 
        if (error != 0) {
            fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
            continue;
        }
 
        if (*hostname) {
            printf("hostname: %s\n", hostname);
        }
 
    }   
 
    freeaddrinfo(result);
 
    return 0;
}
 
0
0
分享到:
评论

相关推荐

    getaddrinfo.c 内部代码

    《深入解析getaddrinfo.c:C语言在Linux DNS解析中的应用》 在计算机网络编程中,DNS(Domain Name System)是互联网的一项基础服务,它负责将人类可读的域名转换为IP地址。在Linux系统中,`getaddrinfo()`函数是...

    gaidns:基于getaddrinfo的dns服务器

    这是一个基于getaddrinfo的DNS服务器。 如果您有一种不常见的方式来解析DNS并将其转换为适当的名称服务器,则很有用。 服务器本身会解析传入的DNS请求,查询getaddrinfo的IP地址,并使用这些地址制定有效的DNS响应...

    get_address_info.zip_dns _getaddrinfo

    "getaddrinfo", a function that provides protocol-independent translation from an ANSI host name to an IP address written in C

    解决 socket.gaierror: [Errno 11001] getaddrinfo failed

    Socket.getaddrinfo, 首先是从之前处理好的域名数据集中读取域名 其次循环挨个处理 做好异常处理 但是结果显然不尽如人意,但是当你手动将单个域名,放进去解析,是没有问题的。 然后我就蒙了,后来经过一圈的查阅...

    PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法

    主要介绍了PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法,需要的朋友可以参考下

    python中getaddrinfo()基本用法实例分析

    本文实例讲述了python中getaddrinfo()基本用法。分享给大家供大家参考。具体如下: import sys, socket result = socket.getaddrinfo("192.1.1.100", None) print result[0][4] print result 输出结果: ('172.20...

    一个小的libc :: getaddrinfo包装器,用于Rust执行dns查找。-Rust开发

    还包括用于libc变体的getaddrinfo和getnameinfo包装器。 dns-lookup libc的一个小型包装程序,用于执行简单的DNS查找。 您可以使用lookup_host函数获取给定主机名的IP地址列表,并使用lookup_name函数获取给定IP地址...

    VUE Error: getaddrinfo ENOTFOUND localhost

    主要介绍了VUE Error: getaddrinfo ENOTFOUND localhost,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    ip mac hostname 之间相互获取方法

    本文将深入探讨如何在Windows环境下,利用VC++的MFC库以及相关的API函数,如getnameinfo和getaddrinfo,来实现IP、MAC和主机名之间的相互获取。 首先,我们要理解这三个概念的基础知识。IP地址(Internet Protocol ...

    androidstudio.docx

    在Android开发过程中,我们经常会遇到各种问题,其中“Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated”是一个常见的错误,通常出现在尝试进行网络访问时。...

    getaddrinfo_example:Jiri Hnidek的基于精要的针对Android的getaddrinfo()测试

    适用于Android的getaddrinfo()测试 基于。 先决条件 使用SDK脚本创建独立的Android工具链: Android$ ./Sdk/ndk-bundle/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir ~/forge/...

    glibc-master.zip

    int getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res); ``` 参数`hostname`表示要查询的主机名,`servname`为端口号或服务名,`hints`是一个可选...

    redis 连接报错 GET_LIKE_ERROR 处理过程.rar

    redis 连接报错 GET_LIKE_ERROR 处理过程.rar

    addrinfo实现

    getaddrinfo.c 内部代码,开发APP获取CName,测试用例:www.microsoft.com www.baidu.com www.google.com

    MFC IP地址 网关 MAC地址获取

    获取IP地址通常通过Winsock API中的`gethostbyname()`或`getaddrinfo()`函数来实现。`gethostbyname()`适用于IPv4,而`getaddrinfo()`则支持IPv4和IPv6。在MFC中,你可以创建一个CWinApp或CWnd派生类的对象,并在其...

    C++编程系列之获得主机名和IP地址

    获取主机名通常可以使用`gethostname`函数,这个函数存在于`&lt;unistd.h&gt;`头文件中。以下是一个简单的示例: ```cpp #include #include #include int main() { char hostname[256]; if (gethostname(hostname, ...

    如何用C++编程获得某台机器的IP地址

    if ((error = getaddrinfo(hostname, NULL, &hints, &res)) != 0) { std::cerr (error) ; return ""; } char ip[INET6_ADDRSTRLEN]; for (struct addrinfo* ptr = res; ptr != nullptr; ptr = ptr-&gt;ai_next) ...

    《python数据分析基础》:[Errno 11004] getaddrinfo failed

    本问题涉及的是在使用Seaborn的`pairplot`函数时遇到的一个错误:“[Errno 11004] getaddrinfo failed”。这个错误通常与网络连接有关,而不是数据分析本身,但它可能会影响数据加载或可视化过程。让我们深入了解...

    第五讲 高级套接字编程.ppt

    int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result); ``` - `hostname`:要查询的主机名或IP地址。 - `service`:服务名或端口号。 - `hints...

Global site tag (gtag.js) - Google Analytics