getaddrinfo,我没有得到任何 canonname

2024-01-03

我正在尝试读取有关特定主机的所有信息并打印出所有信息。 我可以读取并打印出所有地址,但我没有读取任何 ai_canonname!

首先,我认为我的示例(www.google.com|www.irs.gov|...)没有规范名称,但过了一会儿我发现我根本没有得到任何名称。 你认为我做错了什么或者你有一个可行的例子吗?

这是我的代码,

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <sys/time.h>
#include <arpa/inet.h>

int main(int argc, char **argv)
{
    struct addrinfo *result, *rp, hints;
    int error;
    char canonname[32][256];
int canonnum = 0;
char ip[32][64];
int ipnum = 0;
struct timeval tv;
uint64_t starttime, endtime;

if(argc<2)
{
    printf("Usage: %s <address>\n", argv[0]);
    return 0;
}

/* Record Start time */
gettimeofday(&tv, NULL);
starttime = tv.tv_usec;

memset(&hints, 0, sizeof(hints));
memset(canonname, 0, 32*256*sizeof(char));
memset(ip, 0, 32*64*sizeof(char));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET;

error = getaddrinfo(argv[1], NULL, &hints, &result);
if (error != 0)
{   
    if (error == EAI_SYSTEM)
    {
        perror("getaddrinfo");
    }
    else
    {
        fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
    }
    return -1;
}
strcpy(canonname[0], "");
if(result->ai_canonname != NULL)
    strcpy(canonname[0], result->ai_canonname);
canonnum++;
for(rp = result; rp != NULL; rp = rp->ai_next) {
    if(rp !=result && rp->ai_canonname != NULL)
    {
        if(strcmp(rp->ai_canonname, "")!=0)
        {
            strcpy(canonname[canonnum],rp->ai_canonname);
            canonnum++;
        }
    }
    struct sockaddr_in *inaddr_ptr;
    if (rp->ai_addr->sa_family == AF_INET)
        inaddr_ptr = (struct sockaddr_in *)rp->ai_addr;
    sprintf(ip[ipnum],"%s\n", inet_ntoa(inaddr_ptr->sin_addr));
    ipnum++;
}

/* Gets the end time and prints out the execution time */
gettimeofday(&tv, NULL);
endtime = tv.tv_usec;
printf("Execution time: %llu milliseconds\n",(endtime - starttime)/100);
printf("Official name: %s\n", canonname[0]);
printf("Aliases:\n");
for(int i=1;i<canonnum;i++)
    printf("%s\n",canonname[i]);
printf("Addresses:\n");
for(int i=0;i<ipnum;i++)
    printf("%s",ip[i]);
freeaddrinfo(result);
return 0;
}

规格为getaddrinfo() http://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html说你应该添加:

hints.ai_flags = AI_CANONNAME;

你会得到你所要求的。

$ ./gai www.ibm.com
Execution time: 4499 milliseconds
Official name: www.ibm.com
Aliases:
Addresses:
129.42.60.216
$ ./gai www.google.com
Execution time: 248 milliseconds
Official name: www.google.com
Aliases:
Addresses:
74.125.239.50
74.125.239.49
74.125.239.48
74.125.239.52
74.125.239.51
$ ./gai www.irs.gov
Execution time: 2872 milliseconds
Official name: 63-146-70-67.dia.static.qwest.net
Aliases:
Addresses:
63.146.70.67
63.146.70.96
$  ./gai www.irs.gov
Execution time: 2299 milliseconds
Official name: 63-146-70-96.dia.static.qwest.net
Aliases:
Addresses:
63.146.70.96
63.146.70.67
$

我不知道如何看待国税局身份的变化。看起来,规范并不意味着那么规范。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getaddrinfo,我没有得到任何 canonname 的相关文章

  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • 在后台扫描 Android 8+ 上的 BLE 设备

    我在 Android 8 上使用 BLE 扫描仪 API 中的以下方法 扫描 BLE 信标 startScan List
  • 将 C++ 对象(尤其是 stl 容器)移动到特定的内存位置

    我正在与一个内存管理器合作 有时需要对内存进行碎片整理 基本上 我将浏览内存管理器分配的对象列表并重新定位它们 class A SomeClass data This member is allocated by the special m
  • “索引、关注”或“关注”有什么区别?

    下面的列表有什么区别 首先 你可能知道元机器人 标签 元机器人标签是告诉蜘蛛或爬虫要抓取或索引哪个页面 关注手段 页面将被抓取 没有关注意味着 页面不会被抓取 指数均值 您的页面显示在搜索结果中 无索引意味着 您的页面未显示在
  • Rails 3 SQL 查询选择与连接

    我的选择功能和连接有问题 这是我当前的查询 search Building joins INNER JOIN floors ON floors building id buildings id INNER JOIN spaces ON sp
  • 是否支持内存映射文件作为 uwp 应用程序和 win32 进程之间的 ipc

    官方文档没有正确说明 uwp 是否支持通过内存映射文件的 ipc 我正在研究 uwp 应用程序及其桌面扩展之间的 ipc 场景 虽然我可以使用创建内存映射文件System IO MemoryMappedFiles从 uwp 应用程序code
  • 在打字稿中导出实用函数?

    我正在尝试这样做 伪代码 export const isDefined Function
  • Spring Security 3.1.3 @EnableWebSecurity

    我无法找到 Spring Security 3 1 3 中哪个包包含 EnableWebSecurity 我已经添加了 core config web 和 ldap 安全包 但注释仍然不可用 是否已被其他注释替换 我认为 Spring Se
  • 使用 Blazor 单击提交后清除输入字段

    我想知道是否有人知道如何在按下保存按钮 已提交 后清除所有输入字段 当我返回页面时 我的价值观仍然存在 这是我正在使用的代码 page testform inject BlazorApp6 Data Person person inject
  • 解组单个元素列表失败

    我正在运行一个示例 我再也找不到了 布莱斯 道恩斯博客 http blog bdoughan com在 Glassfish 3 上使用 EclipseLink 2 5 MOXy for JAXB 服务 XmlRootElement XmlA
  • 如何在xsd中引用属性

    我尝试定义一个可以在后续元素定义中引用的属性
  • Python Pika - 消费者进入线程

    我正在开发一个带有后台线程的Python应用程序 用于消费来自RabbitMQ队列的消息 主题场景 我在按钮的 on click 事件上启动线程 这是我的代码 请注意 self receive command def on click st
  • MVC3 中的 CSS 背景图像

    我正在尝试为我的 MVC3 应用程序创建样式表 我不知道如何格式化背景图像 url background image url Content images gradient tile page top png or background i
  • python 错误:“模块”对象没有属性“AF_UNIX”

    这是我的Python代码 if name main import socket sock socket socket socket AF UNIX socket SOCK STREAM sock connect 0 0 0 0 4000 i
  • 重写函数而不删除静态属性

    如果我有一个这样的函数 function a console log a 然后分配一个静态属性 如下所示 a static foo 但是假设我想用另一个函数覆盖该函数 如下所示 var old a a function console lo
  • Spring data mongodb,如何设置SSL?

    到目前为止 我还没有找到关于该主题的良好解释 文档 我在用
  • fwrite 是原子的吗?

    一个简单的问题 我需要在我的程序中添加一些日志记录 如果两个进程在同一文件上使用 fwrite 但不是同一文件描述符 则写入的日志消息将是原子的或混合的 有长度限制吗 是定义了 ANSI C 行为还是定义了实现 如果后者在 MacOSX L
  • 以编程方式添加 SwitchCompat 错误

    我正在尝试添加android support v7 widget SwitchCompat以编程方式 我收到此错误 java lang NullPointerException Attempt to invoke interface met
  • 检查用户输入是否在txt文件中,使用批处理

    我正在为局域网联网计算机批量制作聊天风格的系统 我想检查用户名是否被占用 如果不允许 我如何检查用户在这一行中输入的内容 set p name2 我已经在测试文件中尝试过这个 但无法让它工作 startup set fail set nam
  • findOne 可以工作,但不能获取全部/查找

    findOne 工作正常 db collection updates function err collection collection findOne author req user id function err doc 我正在尝试获
  • getaddrinfo,我没有得到任何 canonname

    我正在尝试读取有关特定主机的所有信息并打印出所有信息 我可以读取并打印出所有地址 但我没有读取任何 ai canonname 首先 我认为我的示例 www google com www irs gov 没有规范名称 但过了一会儿我发现我根本