域名解析函数 gethostbyname

news2024/10/7 14:22:38

在实现TCP/UDP编程的时候,服务端绑定的IP地址是点分十进制的,如124.222.215.205,如果提供的是域名,此时我们需要将域名转换成点分十进制的IP地址,这个过程就是 “ 域名解析 ”,实现域名转换的函数就是 gethostbyname。


目录

1、gethostbyname

2、hostent结构体成员 h_addr_list 

3、使用 gethostbyname 函数解析域名

(1) 获取到主机相关信息

(2) 将主机结构体信息中的网络字节序IP转换成本地字节序IP

(3) 完整代码


1、gethostbyname

gethostbyname 函数的作用是获取主机的相关信息,这里的相关信息就包含主机的IP地址。我们需要重点了解的是这个函数的返回值。

 参数name:输入域名或者IP地址

返回值:失败返回NULL,同时 h_errno 会被设置,注意普通函数报错设置的是errno,gethostbyname 函数出错设置的是herror,我们可以通过 hstrerror 函数来获取h_errno对应的错误信息。

成功返回一个结构体,主机的IP地址就放在最后一个参数 h_addr_list 中,h_addr_list 中存放的IP地址是32位网络字节序的整数。

struct hostent {
    char  *h_name;            /* official name of host */
    char **h_aliases;         /* alias list */
    int    h_addrtype;        /* host address type */
    int    h_length;          /* length of address */
    char **h_addr_list;       /* list of addresses */
}

2、hostent结构体成员 h_addr_list 

你或许会觉得好奇,为什么输入一个域名会得到一个IP地址列表?一个域名可能只是一个服务器集群的入口,这里得到的IP地址列表,其实是一个集群中不同服务器的虚拟IP。

为了便于向后兼容,Linux系统将IP地址列表中的第一个地址定义成宏 h_addr,在使用时我们可以直接获取 h_addr 的值来作为解析后的结果,注意,这里的 h_addr 也是32位网络字节序

3、使用 gethostbyname 函数解析域名

下面就使用 gethostbyname 函数来解析百度域名(www.baidu.com)

(1) 获取到主机相关信息

struct hostent* hs = gethostbyname("www.baidu.com");
if(hs == NULL)
{
    herror("gethostbyname");
    return 1;
}

(2) 将主机结构体信息中的网络字节序IP转换成本地字节序IP

struct in_addr in;
in.s_addr =*((uint32_t*)hs->h_addr_list[0]);
char* addr = inet_ntoa(in);        // 网络字节序转本地字节序

(3) 完整代码

#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(){
  // 解析域名,获取到主机信息
  struct hostent* hs = gethostbyname("www.baidu.com");    
  if(hs == NULL)    
  {
    herror("gethostbyname");
    return 1;
  }

  struct in_addr in;
  in.s_addr =*((uint32_t*)hs->h_addr_list[0]);    
  // 将主机信息中的网络字节序IP转换成本地字节序IP
  char* addr = inet_ntoa(in);   
                 
  printf("%s\n", addr);
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python Aws Ubuntu20 配置多IP

1. 业务场景&#xff1a; 高频次交易需要多次访问接口&#xff0c;配置单服务器多IP绕过币安单个IP频率限制 2. AWS实例选择&#xff1a; t3系列&#xff0c;东京A区&#xff0c;ubuntu20 这是我测试的币安延迟最低的配置&#xff08;平均6ms&#xff09; 换一个区域、一个系…

【王道计算机网络笔记】数据链路层-数据链路层设备

文章目录物理层扩展以太网链路层扩展以太网网桥透明网桥源路由网桥以太网交换机直通式交换机存储转发式交换机冲突域和广播域物理层扩展以太网 主机和集线器不能超过100m&#xff0c;超过100m会失真严重&#xff0c;无法恢复&#xff0c;扩展以太网的方法&#xff1a; 通过光纤…

欢迎报名Rust China Hackathon 2022 达坦科技组

12月4日下午&#xff0c;DatenLord就2022Rust China Hackathon大赛活动企业组&#xff08;达坦科技组&#xff09;的赛题进行了空中宣讲会。不仅对赛事流程进行了全面的讲解&#xff0c;同时对赛题背景以及完赛标准和要点进行了深入的剖析。会后更是设置问答环节&#xff0c;细…

目标检测算法——图像分割数据集汇总(附下载链接)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f384;&#x1f384;近期&#xff0c;小海带在空闲之余&#xff0c;收集整理了一批图像分割数据集供大家参考。 整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01;&am…

给visCode编辑器添加背景图

看见很多大牛的visCode编辑器上有个背景图&#xff0c;感觉挺有逼格的&#xff0c;要想跟大牛一样有逼格&#xff0c;那先把编辑器设置的跟大牛的逼格一样高 话不多说&#xff0c;开始 第一步&#xff1a;先安装背景扩展 第二步&#xff1a;点击选择扩展设置 第三步&#xff1…

原码、反码、补码的互相转换

原码、反码、补码的互相转换 简介&#xff1a;本文是为了计算机组成原理复习&#xff0c;本文以具体题目的方式来对原码、反码、补码的互相转换进行讲解。 概述 原码 &#xff1a;最高位是符号位&#xff0c;0代表正数&#xff0c;1代表负数&#xff0c;非符号位为该数字绝对…

实战web漏洞挖掘小技巧

几个月前看到国外的bug bounty tips在传Host攻击技巧&#xff0c;前阵子又看到国内有不少文章总结&#xff0c;冷渗透就不再复述了&#xff0c;直接介绍实际业务场景中碰到的案例。 0x01 自定义Host—窃取Token 1. 找到重置密码处&#xff0c;填写任意一个受害者邮箱帐号&#…

记录--微信小程序获取用户信息(附代码、流程图)

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本篇文章主要总结了微信小程序开发&#xff0c;获取用户信息的整个流程步骤。补充了网上很多碎片化的代码&#xff0c;本人梳理了思路写下了这篇文章。 思路 1、在js文件中&#xff0c;设置userinfo、…

华丰科技将于12月13日上会:业绩波动明显,海通证券等为股东

近日&#xff0c;四川华丰科技股份有限公司&#xff08;下称“华丰科技”&#xff09;在上海证券交易所科创板递交招股书&#xff08;上会稿&#xff09;。据贝多财经了解&#xff0c;华丰科技将于2022年12月13日上会&#xff0c;接受科创板上市委的现场审议。 根据公开信息&am…

【嵌入式硬件芯片开发笔记】LP87702/LP87524电源芯片配置流程

【嵌入式硬件芯片开发笔记】LP87702/LP87524电源芯片配置流程 LP8752x-Q1 10-A Buck Converter With Integrated Switche 具有诊断功能的 LP87702-Q1 双路降压转换器和 5V 升压转换器 LP87702/LP87524从机地址都是0x60 LP87702/LP87524中的设备ID等寄存器&#xff0c;是根据OT…

维护4年的组件化框架 Component 升级到 KComponent 啦

前言 KComponent 它来啦. 从 2018.8 开始, Component 项目正式开源. 到目前已经 4 年的时间了. 这几年中, Component 不断升级优化. 最后趋于稳定. 为了组件化框架更好的发展, KComponent 继承了 Component 的优点, 升级为一个纯 Kotlin 的项目. 不再支持 Java, 注解驱动器也…

Java招生报名咨询系统毕业设计,Java招生咨询问答系统设计与实现,毕业设计论文怎么写毕设源码开题报告需求分析怎么做

功能清单 【系统管理员功能】 关于我们设置&#xff1a;设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信…

20.前端笔记CSS-精灵图

1、为啥要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁的接收和发生请求图片&#xff0c;造成服务器的请求压力过大&#xff0c;这会大大降低页面的加载速度 为了有效减少服务器接收和发生请求的次数&…

[附源码]JAVA毕业设计图书借阅系统演示录像(系统+LW)

[附源码]JAVA毕业设计图书借阅系统演示录像&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

你不知道的goland技巧

很多人使用 Goland 有很长时间的&#xff0c;却没有好好利用上 Goland 工具带给我们的遍历&#xff0c;今天咱们就来解锁一下新技巧 过去我们使用 Goland 就是简单的配置一下 go 的 proxy &#xff0c;以及配置一下 ssh &#xff0c;与服务器进行文件的上传和下载&#xff0c;其…

基于Hadoop的用户购买行为的商品推荐系统

目录 一 绪论 1 1.1 编写目的 1 1.2 背景及意义 1 1.3 开发及运行环境 2 二 需求分析 3 2.1 系统概述 3 2.3 系统功能需求 4 2.3.1 收集原始数据 4 2.3.2 计算物品相似度矩阵 4 2.3.3 计算用户购买向量 5 2.3.4 计算推荐向量并去重和排序 5 2.3.4 数据入库 5 2.3.5 作业控制 5 …

百数:用报表搭建生产进度看板,让生产更高效

现如今我国已经步入了全新的现代化科技时代&#xff0c;国内各个行业对于数字技术也在进行着不断地应用和研究。目前数字技术在企业生产管理系统的运用中具备较为显著的优势&#xff0c;其中生产进度看板就是数字化管理系统的重要应用之一。 生产进度看板是一种可视化管理系统…

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度附Matlab代码和论文复现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Mysql性能测试主要内容

Mysql性能测试主要内容 相信很多做性能测试的朋友都知道&#xff0c;性能测试并不单单只是看服务器cpu、IO、内存、网络等&#xff0c;我们还需要了解Mysql性能&#xff0c;那么我们看看Mysql性能主要内容有哪些呢&#xff1f; MySql数据库介绍 Mysql相信大家做测试的&#…

领导科学论坛杂志领导科学论坛杂志社领导科学论坛编辑部2022年第10期目录

理论前沿 列宁《怎么办&#xff1f;》中理论斗争思想及其当代价值研究 游玲; 1-7 共青团引领青年思想的百年历程及经验启示 许丽珠; 8-14 新发展格局下推进乡村产业振兴的现实困境与实践进路 杨帆; 15-19 “三治融合”治理体系的内部逻辑与创新策略 皋媛;戢仕铭…