getnameinfo() - 反向 DNS 查找(IP 地址到主机名)C/C++

2024-01-01

对于 IPAddress 66.249.68.9(“dig -x”正确地说“crawl-66-249-68-9.googlebot.com”),我可爱的程序声称它是 ip68-9-0-0.ri.ri.cox.net 。

我不在乎我最终是否会采用类似于下面代码的方式,只是希望能够以 IPV4 IP 地址开始并以主机名结束。

额外问题,什么是服务?我想我不需要它,并且会给 getnameinfo NULL 。但是,程序正在为 serviceBuffer 输出“17145”。

#include <string>
#include <iostream>
using namespace std;

#include <netdb.h> // struct sockaddr, AF_INET, NI_NAMEREQD, getnameinfo
#include <string.h> // memset
#include <arpa/inet.h> // inet_pton

int main() {
   const string IPAddress { "66.249.68.9" };

   struct sockaddr structSockAddr;
   memset(&structSockAddr, 0, sizeof(structSockAddr));

   structSockAddr.sa_family = AF_INET;
   int inetPtonReturnValue { inet_pton(AF_INET, IPAddress.c_str(), &structSockAddr.sa_data) };
   if(1 != inetPtonReturnValue) {
      cout << "inetPtonReturnValue : " << inetPtonReturnValue << endl; // 0 = src doesn't contain valid address, -1 = af isn't a valid family
   }

   char hostBuffer[10000];
   char serviceBuffer[1000];

   int getNameInfoReturnValue { getnameinfo(&structSockAddr, sizeof(structSockAddr), hostBuffer, sizeof(hostBuffer), serviceBuffer, sizeof(serviceBuffer), NI_NAMEREQD) };

   if(0 != getNameInfoReturnValue) {
      cout << "getNameInfoReturnValue : " << getNameInfoReturnValue << endl
           << "gai_strerror() : " << gai_strerror(getNameInfoReturnValue) << endl;
   } else {
      cout << "IPAddress : " << IPAddress << endl
           << "hostBuffer : " << hostBuffer << endl
           << "serviceBuffer : " << serviceBuffer << endl;
   }
}

您正在使用一个struct sockaddr打电话时inet_pton但调用签名要求这是一个struct in_addr对于 AF_INET(或struct in6_addr对于 IPv6)。然后你必须用它来构建一个struct sockaddr用于后面的功能。

按照目前的情况,您将地址的一些字节写入包含实际 IP 地址的字段之前的字段,因此最终您的 sockaddr 字段中只有 IP 的最后 2 个八位字节。

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

getnameinfo() - 反向 DNS 查找(IP 地址到主机名)C/C++ 的相关文章

随机推荐

  • 位置更新自动暂停 iOS

    我正在使用phonegap 构建一个iOS 应用程序 当应用程序在后台运行时 我试图让 iOS 将其当前位置更新到我的应用程序 我已经注册了位置更新后台模式 但它不可靠 经过一番研究 我认为 iOS 会自动暂停位置更新 CLLocation
  • 将 Proguard 用于 Scala AWS Lambda

    我有一个关于 proguard 与 scala aws lambda 函数一起使用的问题 我创建了一个非常简单的 aws lambda 函数 如下所示 package example import scala collection Java
  • Google 容器注册表权限

    我正在尝试将 docker 映像推送到 GCP 但仍然收到此错误 unauthorized You don t have the needed permissions to perform this operation and you ma
  • 访问 DataReader 中的特定行

    我有一个数据读取器 可以在 js 轮播中显示比赛周列表 我需要能够添加一个 if 语句来更改当前游戏周的 div 类 这是我当前的代码 if dReader HasRows while dReader Read gameweekList T
  • 当 cfhttp 上 throwonerror=true 时如何获取 cfhttp.filecontent ?

    我使用以下命令进行 REST 服务调用cfhttp与throwonerror属性设置为 true 当我使用 try catch 语句捕获错误时 我似乎找不到一种方法来输出 REST 服务调用尝试返回的错误 该错误将驻留在cfhttp fil
  • 如何从 C# 应用程序调用 docker run

    我有一个 WPF 应用程序 在处理文件时需要使用 docker 进程 docker 容器构建在盒子上 目前在使用 WPF 应用程序处理文件后 用户必须启动命令提示符并输入 docker run it rm v folderdedirect
  • 尝试一下,catch似乎不起作用

    我有以下代码 我认为它可以让我捕获错误 而不是生成错误 写出 发生错误 不幸的是 它仍然显示错误 无法重新启动计算机 访问被拒绝 我知道为什么会发生这种情况 但我希望能够捕获错误并重新格式化它 我究竟做错了什么 try Restart Co
  • 使用 Hibernate 和 JPA 映射 Map

    我尝试以下映射 ElementCollection private Map
  • 使用 iTextSharp 从现有 PDF 中读取 XMP

    如何使用 iTextSharp 从现有 PDF 文件中读取 XMP 我对 itextSharp 非常无知 但这对我来说很有效 PdfReader pdf new PdfReader fileName string metadataXml S
  • HTML + Javascript 渲染器输出 HTML 或纯文本?

    如果我使用 String plain Html fromHtml html toString 渲染简单的 html 其中包含 any plain vanila HTML goes here 一切都美好而花花公子 但是 如果该页面包含大量 J
  • Java 如何使 JFrame 作为最大化窗口启动

    我想知道如何使 java JFrame 最大化 我不希望它是全屏的 周围没有窗口 我只是希望它像普通程序 例如网络浏览器 一样启动 我已经知道如何使用 Dimension screenSize Toolkit getDefaultToolk
  • Safari - 当选项卡位于后台时,HTML5 音频不会播放

    我有一个反应应用程序 它使用反应声音 基本上是 HTML5 音频 在触发新通知时播放声音 我希望当选项卡在 Safari 中处于后台时播放此声音 但这似乎不起作用 当选项卡位于前台时 声音会播放 有谁知道这个问题的解决方法 None
  • Chrome 中的 .blur 和 .onblur

    更新了没用 http jsfiddle net xvepL 4 http jsfiddle net xvepL 4 让我有点抓狂 Chrome 不使用 blur 仅适用于 onblur 但其他浏览器使用 blur 有没有办法解决这个问题 这
  • 自动热键 3 次点击 = 音量静音

    在 autohotkey 中 我试图做到这一点 以便当我按下鼠标左键 3 次并延迟 10 毫秒它变成音量静音 LButton if Send Volume Mute else Send LButton Return Use A TickCo
  • Pytest 仅运行具有特定标记属性的测试

    我在用着 pytest mark为了唯一地标识特定的测试 因此我创建了自定义标记 pytest mark key 我这样使用它 pytest mark key test 001 def test simple self self passi
  • 在 PHP 中使用heredoc有什么好处? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery 如果单选按钮被选中

    可能的重复 检查特定单选按钮是否已选中 https stackoverflow com questions 2195125 check of specific radio button is checked 我目前有这 2 个单选按钮 以便
  • nginx 和带有代理传递的尾部斜杠

    我对 nginx 1 4 1 使用以下配置 server listen 8000 server name correct name gr location test register proxy set header X Forwarded
  • WPF 按钮图标被镜像,为什么?

    当按如下方式定义图像时 此按钮看起来不错 请参见屏幕截图 请注意 带有字母 T 的盾形图标已正确显示
  • getnameinfo() - 反向 DNS 查找(IP 地址到主机名)C/C++

    对于 IPAddress 66 249 68 9 dig x 正确地说 crawl 66 249 68 9 googlebot com 我可爱的程序声称它是 ip68 9 0 0 ri ri cox net 我不在乎我最终是否会采用类似于下