Dns解析为ip

本文详细解析了gethostbyname函数及其返回的hostent结构,包括name参数的作用、hostent结构的组成部分(如h_name、h_aliases、h_addrtype等),以及如何使用inet_ntoa函数将IP地址转换为互联网标准点分格式字符串。此外,通过实例展示了如何从hostent结构中获取SMTP服务器IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct hostent FAR *PASCAL FAR gethostbyname(const char FAR * name);

其中,name指的是指向一个域名的指针,该函数返回的是一个hostent型的结构体。

struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; };

inet_ntoa函数将一个IP转换成一个互联网标准点分格式的字符串。

char FAR * inet_ntoa( struct in_addr in);
 
hostent->h_name指的是主机的规范名,例如www.google.com.hk的规范名其实是www-wide.l.google.com
hostent->h_aliases指的是主机的别名,例如www.google.com.hk就是google他自己的别名,有时候,有的主机有好几个别名,这些其实都是为了易于用户的记忆而为自己的网站多取的名字
hostent->h_addrtype指的是主机IP地址的类型,可能是IPV4(AF_INET)或者是IPV6(AF_INET6)
hostent->h_length指的是主机IP地址的长度,如果是IPV4,则是4
hostent->h_addr_list表示主机的IP地址,需要使用inet_ntoa转换成字符串格式的IP地址。IP地址可能有1——更多个。

 

 

char * smtpIp(char * url) {     HOSTENT * iphost;     char ipconfig[20];

    if((iphost = gethostbyname(url)) != NULL)     {         int i = 0;

        while(iphost->h_addr_list[i])         {             char ip[20];             memcpy(&ip, inet_ntoa(*((struct in_addr *)iphost->h_addr_list[i])), 20);             printf("%s", ip);

            memset(ip, '\0', 20);             i++;         }     } }

### 如何解决 Active Directory 域服务源域控制器 DNS 解析 IP 地址失败问题 #### 验证并配置 DNS 服务器地址 确保客户端和域控制器都使用正确的 DNS 服务器地址。如果存在多个 DNS 域,需确认 `DNS 后缀搜索顺序` 设置无误[^1]。 #### 清理过期或重复的 DNS 记录 检查是否存在引用相同计算机账户的过时或重复的 DNS 记录,并清理这些记录以防止冲突。这可以通过命令行工具如 `dnscmd.exe` 或者通过 DNS 管理控制台完操作。 #### 反向查找区域配置 创建并验证反向查找区域的存在及其准确性,确保其不会将请求错误地映射到其他名称作为 A 记录。对于 IPv4 地址而言,通常需要建立指针(PTR)记录来支持从 IP 到主机名的转换过程[^2]。 #### 测试连通性和响应情况 利用 `ping` 工具测试目标域名、域控制器以及 DNS 服务器之间的可达性;同时借助 `nslookup` 或 `dig` 来查询指定主机对应的 IP 是否正确返回,以此评估当前网络环境下的解析能力。 #### 修改本地 DNS 设置 针对 DC 上 `/etc/resolv.conf` 文件内的 nameserver 参数进行调整,使其指向 AD 内部使用的 DNS 服务器地址(例如:search samdom.example.com nameserver 10.99.0.1),从而保证内部资源能够被有效识别与访问。 #### 路由器端口转发设定 当涉及到外部网络连接时,还需注意主路由器上的 DNS 设定,应将其首选 DNS 指向企业内提供服务的服务器 IP 地址,而非公共 DNS 服务商所提供的默认选项(比如阿里云提供的 223.5.5.5)。这样做有助于提高局域网内部通信效率的同时也减少了对外依赖的风险[^3]。 ```bash # 使用 nslookup 查看 DNS 解析结果 nslookup domain_controller_name_or_ip_address # 更新 resolv.conf 文件样例 echo "search samdom.example.com" | sudo tee /etc/resolv.conf echo "nameserver 10.99.0.1" | sudo tee -a /etc/resolv.conf ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值