基本名字与地址转换

简介:
DNS中的资源记录RR resource record
AAAA
PTR
MX
CNAME

名字和数值地址间的转换:gethostbyname() gethostbyaddr()

服务名字和端口号之间的转换: getservbyname() getservbyport()
解析器代码读 依赖于 配置文件,文件/etc/resolv.conf一般包含本地名字服务器IP地址。
DNS替代方法:静态主机文件,/etc/hosts或者网络信息系统NIS。
复制代码
struct hostent{
    char * h_name;
    char * * h_aliases;
    int h_addrtype;
    int h_length;
    char * * h_addr_list;
};
#define h_addr h_addr_list[0];
复制代码
执行一个对A记录或者AAAA记录的查询
struct hostent * gethostbyname(const char * hostname);
h_errno的常值:
HOST_NOT_FOUND
TRY_AGAIN
NO_RECOVERY
NO_DATA
使用方法:
复制代码
int main(int argc,char ** argv){
char *ptr,**pptr;
char str[INET6_ADDRSTRLEN];
struct hostent *hptr;
while(--argc > 0){
    ptr =  *++argv;
    if((hptr=gethostbyname(ptr)) == NULL){
        err_msg("gethostbyname error for host:%s:%s",
                        ptr,hstrerror(h_errno));
        continue;
        }
    }//给每个命令行参数调用gethostbyname()
    printf("official hostname:%s\n",hptr->h_name); //规范主机名输出
    for(pptr=hptr->h_aliases;*pptr!=NULL;pptr++)
        printf("\tallias:%s\n",*pptr);
    switch(hptr->h_addrtype){
        case AF_INET:
#ifdef    AF_INET6
        case AF_INET6:
#endif
            pptr = hptr->h_addr_list;
            for( ;*pptr != NULL;pptr++) //pptr只想一个指针数组,数组中每个指针都指向一个地址。
                printf("\taddress:%s\n",
                            inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str)));
            break;
        default:
            err_ret("unknown address type");
            break;
    }
exit(0);
}
复制代码
gethostbyaddr()函数
取一个二进制的IP地址并找到对应于这个地址的主机名。
struct hostent * gethostbyaddr(const char *addr,size_t len,int family);
addr是一个真正指向含有IPV4或者IPV6地址结构的指针
uname()返回当前主机名字
int uname(struct utsname * name);
通过调用uname得到主机名字,然后调用gethostbyname得到所有IP地址
复制代码
char ** my_addrs(int * addrtype){
    struct hostent *hptr;
    struct utsname myname;
    if(uname(&myname) < 0)
        return(NULL);
    if((hptr = gethostbyname(myname.nodename)) == NULL)
        return(NULL);
    *addrtype = hptr->haddrtype;
    return(hptr->h_addr_list);
}
复制代码
gethostname函数
返回当前主机名字
int gethostname(char *name,size_t namelen);
name指向主机名存储位置的指针
namelen数组的大小
主机与端口号的映射包含在一个文件中 /etc/services
复制代码
struct servent * getservbyname(const char * servname,const char * protoname);
 
struct servent{
    char * s_name;
    char * * s_aliases;
    int s_port;
    char * s_proto;
};
复制代码
调用方法:
struct servent * sptr;
sptr = getservbyname("ftp","tcp");
sptr = getservbyname("ftp","udp"); //因为ftp仅支持TCP,因此会失败
getservbyport()给定端口号和可选协议,查找相应的服务
struct servent * getservbyport(int port,const char * protname);//port必须为网络字节序
因此调用方法:
struct servent * sptr;
sptr = getservbyport(htons(53),"udp");
信息    数据文件              结构        键值搜索函数
主机    /etc/hosts          hostent     gethostbyaddr,gethostbyname
网络    /etc/networks   netent       getnetbyaddr,getnetbyname
协议    /etc/protocols   protoent         getprotobyname,getprotobynumber
服务    /etc/services     servent      getservbyname,getservbyport
 
本文转自博客园xingoo的博客,原文链接:基本名字与地址转换,如需转载请自行联系原博主。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
2370 2
|
数据采集 PyTorch 数据处理
Pytorch学习笔记(3):图像的预处理(transforms)
Pytorch学习笔记(3):图像的预处理(transforms)
2337 1
Pytorch学习笔记(3):图像的预处理(transforms)
|
3月前
|
Prometheus 监控 Cloud Native
78_资源监控:NVIDIA-SMI进阶
在大语言模型(LLM)训练和推理过程中,GPU资源的高效监控和管理至关重要。随着模型规模的不断增长和计算需求的提升,如何精确监控GPU利用率、及时发现性能瓶颈并进行优化,成为AI研究人员和工程师面临的重要挑战。NVIDIA-SMI作为NVIDIA官方提供的GPU监控工具,提供了丰富的功能来监控和管理GPU资源。本文将深入探讨NVIDIA-SMI的进阶使用方法,以及如何利用其与其他工具结合构建高效的GPU利用率可视化监控系统。
|
10月前
|
人工智能
MV-MATH:中科院开源多模态数学推理基准,多视觉场景评估新标杆
MV-MATH 是中科院自动化所推出的多模态数学推理基准数据集,旨在评估多模态大语言模型在多视觉场景中的数学推理能力。该数据集包含2009个高质量的数学问题,涵盖11个数学领域和3个难度级别,适用于智能辅导系统和多模态学习研究。
270 0
|
存储 运维 监控
日志服务SLS焕新升级:卓越性能、高效成本、极致稳定与智能化
日志服务SLS焕新升级,涵盖卓越性能、高效成本、极致稳定与智能化。新功能特性包括Project回收站、ELasticsearch兼容方案及全链路数据处理能力提升。通过扫描计算模式和数据加工优化,实现更好的成本效果。案例分析展示了一家国内顶级车企如何通过日志服务实现跨云、跨地域的全链路数据处理,大幅提升问题处理效率。
354 9
|
7月前
|
弹性计算 运维 监控
资源利用率提升50%:Serverless 驱动国诚投顾打造智能投顾新范式
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
517 19
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):成熟AI模型与自研如何选择?
本文为AI训练师提供选型指南,探讨使用成熟模型还是自研算法。内容涵盖NLP、CV和多模态场景下主流模型推荐,如DeepSeek-Chat、GPT-4o、ResNet-50等,以及自研模型的应用场景与技术实现。同时提供懒人四步决策法和避雷口诀,帮助快速选择适合的工具。新手建议从预训练模型入手,逐步深入魔改或自研,避免常见坑点。附带场景化对比表,助力高效决策。
675 5
|
10月前
|
运维 Serverless 云计算
Serverless,云计算3.0阶段
Serverless是一种云计算服务模式,让开发者只需专注于编写业务逻辑代码,无需管理底层基础设施如服务器、存储和网络。相比传统Serverful架构,Serverless降低了运维成本,提高了开发效率,并通过弹性伸缩应对流量峰谷,按实际资源消耗付费,显著降低资源浪费和费用开销。
379 3
Serverless,云计算3.0阶段
|
运维 Kubernetes Java
阿里云容器计算服务ACS ,更普惠易用、更柔性、更弹性的容器算力
ACS(阿里云容器计算服务)推出Serverless容器算力,提供更普惠、柔性、弹性的算力资源,适用于多种业务场景,如复合应用、ACK集成、EMR大数据处理等,帮助企业降低成本、提升效率。
|
Linux
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
1854 0