皮皮网
皮皮网

【左侧伸缩框架源码】【智慧餐厅2.9.2源码】【食品朔源码查询】linux gethostbyname源码

来源:泡泡邮件php源码 发表时间:2024-11-27 05:37:20

1.linux 以URL访问TCP
2.在Linux下如何查阅gethostbyname函数的源码说明
3.gethostbyname与DNS

linux gethostbyname源码

linux 以URL访问TCP

       在Linux的socket编程中,一个常见的源码操作是通过URL来访问TCP服务。无需预先设定路径,源码程序员可以直接利用gethostbyname这个网络信息函数来解析URL中的源码域名,这个函数会查找系统中的源码左侧伸缩框架源码/etc/hosts文件或者DNS服务,以确定域名与其对应的源码智慧餐厅2.9.2源码IP地址。然而,源码gethostbyname并不直接返回IP地址,源码而是源码返回一个hostent结构,这个结构在后续的源码connect调用中扮演关键角色。

       URL中的源码参数部分,包括路径和查询参数,源码通常会被包含在HTTP请求的源码食品朔源码查询头部,也就是源码"HTTP请求首部"中。因此,源码Linux socket编程中,开发者主要关注的穿越火线辅助源码是通过gethostbyname获取域名对应的IP地址,然后构建完整的HTTP请求头,即可进行TCP连接的建立。

       总之,在Linux的匿名科创 源码socket编程中,处理URL的核心步骤是获取域名的IP地址和构造HTTP请求头部,这对于与远程服务器进行通信至关重要。一旦这些基础操作完成,就可以有效地实现TCP访问。

在Linux下如何查阅gethostbyname函数的说明

       itoa不是c标准库函数,是各种编译器对c便准库的扩张之一

       有一些c编译器支持这个函数(比如vc)

       但gcc不支持,有些linux发行版自行修改在gcc中加入了扩展版的c标准库所以支持,因此你平台上的gcc不一定支持itoa,因此也man不到了

       建议用sprintf替代itoa,或者自己写一个itoa(网上找的):

       char* itoa(int val, int base){

        static char buf[] = { 0};

        int i = ;

        for(; val i ; --i, val /= base)

        buf[i] = "abcdef"[val % base];

        return buf[i+1];

       }

gethostbyname与DNS

        域名查询(Domain Name Query)在Linux上的执行主要由glibc库函数 gethostbyname 与 gethostbyaddr 来完成,通过 strace 跟踪可知 gethostbyname 的执行流程如下:

        注:关于DNS与 dig 命令的介绍请阅读 阮一峰 老师的文章 DNS原理入门 。

        先介绍下我的系统环境:

        在没有配置 nscd 的服务器上,用 strace 追踪 gethostbyname ,其大致流程摘录如下(省略的部分用 ...... 表示)。库函数 gethostbyname 的使用可参考 该页面 。

        要想查看某个程序是否调用 gethostbyname ,只需用 ltrace 命令跟踪一下查看其库函数调用即可:

        注:在 man gethostbyname 中有一句:

        笔者所在公司的服务器上并没有配置 nscd ,但笔者的阿里云个人服务器上却默认配置了 nscd 。从 man nscd 摘录如下:

        Linux服务器上一般都会配置 dnsmasq 服务,用于缓存DNS请求结果,节省应用程序的域名解析时间。笔者的笔记本 Ubuntu . LTS 也默认配置了 dnsmasq ,同样笔者的 macOS Sierra 上也默认有一个叫 mDNSResponder 的服务。 dnsmasq 简介如下:

        dnsmasq 通常会绑定本地 .0.0.1: ,假设配置的DNS服务器是Google Public DNS,则 dnsmasq 的配置 /etc/dnsmasq.conf 一般如下:

        这样, /etc/resolv.conf 的配置如下。注意第一项 nameserver 是本地IP .0.0.1 ,也就利用上了 dnsmasq 的DNS缓存功能。

        网络上广泛使用的DNS服务器通常是 bind ,简介如下:

        用 strace 追踪可知, dig 命令是通过读配置文件 /etc/resolv.conf ,然后向其中列出的DNS服务器发出DNS请求。

        在日常开发和学习中,遇到问题或对某个东西感到疑惑的时候,对程序进行调用跟踪和对网络进行抓包,是非常有效的分析方式。

        用 strace 来跟踪系统函数调用,细节请参考 man strace 。

        用 ltrace 来跟踪库函数调用,细节参考 man ltrace 。

        用 wireshark (GUI)、 tshark 、 tcpdump 来进行网络抓包,细节参考各自的 man 说明页。

        更加强大和复杂的动态追踪技术,请参考 SystemTap 和DTrace( DTrace for Linux , wikipedia ),我还没尝试过。还可以阅读大神章亦春(春哥)写的文章 动态追踪技术漫谈 。

相关栏目:综合