首页
学习
活动
专区
圈层
工具
发布

InetAddress.getByName背后发生了什么

域名 根据百度百科的介绍: 域名(Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。...spoofalert:有效值为on/off,仅在nospoof配置为on时有效,即两者均配置为on,当发生IP地址欺骗时记录告警或错误日志 注:老的版本里可能还会有order配置项,指明解析顺序,但从.../etc/nsswitch.conf 名称服务开关(Name Service Switch)配置文件,主要用于指定glibc以及某些应用程序对名称解析的顺序。...: 另外,从man中可以知道gethostbyname,gethostbyaddr已经是过时的方法,正确的方式应该是调用getaddrinfo和getnameinfo。...而java中InetAddress类的getByName、getByAddress、getAllByName等方法,本质上是调用了系统函数getaddrinfo或gethostbyname来进行主机名/

94720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux下编程获取本地IP地址的常见方法

    用户计算机所在网络拓扑结构未知,主机名设置是一个可选项,并且同样可以为一个计算机绑定多个主机名等,这些信息都会有影响。脱离了网络连接,单独的网络地址没有任何意义。...IP地址,在获取本地IP地址时,一般都是回环地址,但可以有效的根据主机名称获取网络中的主机的IP地址,如通过域名获取域名对应的IP地址。...方法三:getaddrinfo()获取本地IP地址 注意,getaddrinfo()可以完成网络主机中主机名和服务名到地址的映射,但是一般不能用来获取本地IP地址,当它用来获取本地IP地址时,返回的一般是...()获取本地IP地址 gethostname()和getaddrinfo()的功能类似,一般用于通过主机名或者服务名,比如域名来获取主机的IP地址。...以上代码获取的是根据主机名称得到的第一个IP地址。

    8.5K20

    通过域名获取主机IP -- struct addrinfo

    * 十进制端口号 或者常用服务名称如"ftp"、"http"等 */ const struct addrinfo *restrict hints, /* 获取信息要求设置 */ struct...servname: 服务名可以是十进制的端口号(“8080”)字符串,也可以是已定义的服务名称,如"ftp"、"http"等,详细请查看/etc/services 文件,最后翻译成对应服务的端口号。...如果此参数设置为NULL,那么返回的socket地址中的端口号不会被设置。...res: 该参数获取一个指向存储结果的 struct addrinfo 结构体列表,使用完成后调用 freeaddrinfo() 释放存储结果空间。...返回值 如果 getaddrinfo() 函数执行成功,返回值为 0 , 其他情况返回值表示错误种别。使用函数gai_strerror() 可以获取可读性的错误信息,用法用strerror()相同。

    6.3K30

    Python网络编程中的套接字名和DNS解析

    这个工具还可以用来为服务器绑定端口,然后连接服务或者是请求规范主机名。当然这是3个最重要getaddrinfo()的标记操作。至于其他的标记,不同的操作系统上可用标记有所不同,但是也有一些是跨平台的。...如果用户正好输入了一个主机名,而系统认为该主机AppleTalk连接的。 2、getaddrinfo()调用失败会引起一个特定的名称服务错误。...表示socket_args列表中的3个元素会被当作3个单独的参数传入构造函数中。使用实际返回的地址时的做法则恰恰相反。 下面说一下DNS解析。...查询的名称 能够将该名称存入缓存的有效时间,以s为单位 类,比如返回互联网地址响应的IN 记录的类型,常见的比如表示IPV4地址的A,IPV6地址的AAAA 最后是数据 下面给出最后的一段代码,解析电子邮件域名...如果SMTP服务器没有响应,就返回一个错误,如果有响应就进入消息队列,按照优先级顺序从小到大尝试发起连接。如果提供了A和AAAA记录,就直接向对应地址发起连接。

    4.4K70

    一次有趣的 DNS 导致 Node 服务故障问题分析实录

    node 部分的请求分为两类,一种是纯 node 的处理,一种是需要先 http 请求后端微服务的处理接口。...现象是涉及 Node 请求后端 Java 服务的都 block 住了,纯 node 处理的请求都飞快返回了。...,getaddrinfo 的实现是同步阻塞的,这与 Node 的异步显然是不搭的,于是 Node 使用线程池来调用 getaddrinfo,模拟异步。...这部分逻辑是 Node 的核心依赖 libuv 实现的,libuv 是一个基于事件驱动的异步 io 库,本身的事件循环部分是单线程的,如果出现阻塞或耗时的操作,不可以阻塞主循环。...我们自己封装的 redis 库在失败时会把错误信息尝试上报给 myou.cvte.com 相关的接口。 到这里,原因就非常清楚了。

    1K30

    得物 Android Crash 治理实践

    IP 地址,它会根据系统配置的名称服务进行解析,沿着调用链查看源码发现在parseNumericAddressNoThrow方法内部调用Libcore.os.android_getaddrinfo时中有...return result;}解决过程解决思路是代理android_getaddrinfofornet函数,捕捉调用原函数过程中出现的段错误信号,接着吃掉这个信号并返回-1,使之转换为JAVA异常进而走进...,偶尔会出现因状态异常导致的SIGABRT崩溃。...【柳暗花明】C++的异常处理机制在throw执行时,会开始在调用栈中向上查找匹配的catch块,检查每一个函数直到找到一个具有合适类型的catch块,上述的错误信息代表未找到匹配的catch块。...的上下文,另外一个线程仍执行close并在此过程中尝试获取这个bio有多少未写出去的字节数时出现野指针导致的段错误。

    59410

    解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed

    错误原因该错误通常是由于以下原因之一导致的:DNS解析错误:无法通过URL解析出正确的主机名。网络连接问题:无法连接到主机或无法完成网络请求。解决方案1....检查URL的正确性首先,确保你的URL是正确的并且可以正常访问。在URL中可能存在错误的拼写、缺少协议头(如​​http://​​、​​https://​​)或其他格式问题。...确保你的计算机已连接到互联网,尝试连接其他网站或服务,看看是否能够访问。检查防火墙设置。某些防火墙或安全软件可能会阻止你的程序访问网络。确保你的程序被许可通过防火墙。检查代理服务器配置。...如果你正在使用代理服务器进行网络连接,确保配置正确并且代理服务器能够正常工作。3. 使用IP地址替代主机名如果DNS解析出现问题,你可以尝试使用IP地址替代主机名。...因此,在使用​​urlopen​​函数时,最好使用异常处理机制来捕获可能出现的异常,并执行相应的错误处理逻辑。

    2.5K20

    【Python】已解决:nltk.download(‘stopwords‘) 报错问题

    [Errno 11004] [nltk_data] getaddrinfo failed> False 这个错误通常发生在尝试从NLTK的服务器下载停用词列表时。...二、可能出错的原因 网络连接问题:getaddrinfo failed通常指示DNS解析失败,这可能是因为计算机无法连接到NLTK的服务器,可能是由于网络断开、网络配置错误或DNS服务器问题。...NLTK服务器问题:虽然不常见,但NLTK的服务器可能暂时不可用或正在维护,导致无法下载资源。...如果网络连接正常,但问题仍然存在,可以尝试以下方法: 手动下载并放置到NLTK的数据目录:可以从NLTK的官方网站或其他可靠来源手动下载停用词列表,并将其放置在NLTK的数据目录中。...错误处理:在实际应用中,应该添加适当的错误处理机制来捕获和处理可能出现的网络错误。 资源备份:对于重要的资源文件,如停用词列表,建议备份到本地或私有服务器,以防外部资源不可用。

    58710

    InetAddress.getLocalHost() 执行很慢?

    其中用到的协议是 mdns,也即多播dns(Multicast DNS),它主要实现了在没有传统 dns 服务器的情况下使局域网内的主机实现相互发现和通信,使用的端口为 5353,遵从 dns 协议。...看看对应的源码源码比较好找,参见下图:我们再次把hosts中的主机名去掉,并使用 Arthas 工具的 trace 命令看看链路耗时:提示:如果抓包时出现 No class or method is affected...另外,在 getaddrinfo 源码中没有找到火焰图给出的调用链,我们暂时不再深入。...getaddrinfo 调用返回错误码,此时 jdk 会转而调用 lookupIfLocalhost 方法,它内部调用了操作系统的 getifaddrs 方法,以获取本机所有 ip 地址:对应的源码可以参考...参考文章 如何查找 jdk 中的 native 实现 从Chrome源码看DNS解析过程 getaddrinfo工作原理分析 浅谈getaddrinfo函数的超时处理机制

    5.7K41

    VC++ IPv6的支持

    ,未与其他主机建立连接的SOCKET,后续会采用这个socket来进行收发包的操作 nodename: 主机名,或者主机的IP地址的字符串 servicename: 服务名称,也可以是对应的端口号的字符串...,传入服务名时需要传入那些知名的服务,比如HTTP、FTP等等, 其实这个字段本身就是需要传入端口的,传入服务名,最后函数会根据服务名称转化为这些服务的默认端口 LocalAddressLength,...servname: 知名服务的名称或者端口的字符串 hints:一个地址结构,该结构规定了应该如何进行地址转化。...几个例子 因为IPV6 不能再像V4那样直接往地址结构中填写IP了,因此在IPV6的场合需要大量使用getaddrinfo函数,来根据具体的IP字符串或者根据主机名来自动获取地址信息,然后根据地址信息直接调用...getaddrinfo函数得到的addrinfo结构中地址信息,下面给出第二种思路的部分代码: if(0 !

    1.8K20

    Linux网络编程基础API

    flags参数为数据收发提供了额外的控制,它可以取表所示选项中的一个或几个的逻辑或。...不同的选项具有不同类型的值,如表中“数据类型”一列所示。 值得指出的是,对服务器而言,有部分socket选项只能在调用listen系统调用前针对业听socket设置才有效。...同样,service 参数可以接收服务名,也可以接收字符串表示的十进制端口号。hints参数是应用程序给getaddrinfo的一个提示,以对getaddrinfo的输出进行更精确的控制。...addrinfo结构体中,ai_ protocol 成员是指具体的网络协议,其含义和socket系统调用的第三个参数相同,它通常被设置为0。ai_fags 成员可以取表中的标志的按位或。...getnameinfo和getaddrinfo函数成功时返回0,失败时返回错误码,可能的错误码如表: Linux下strerror函数能将数值错误码error转换成易读的字符串形式,同样下面的函数可将表错误码转换成字符串形式

    1.8K20

    【Python】已解决:nltk.download(‘averaged_perceptron_tagger’) Error loading averaged_perceptro

    二、可能出错的原因 这个错误可能由以下几个原因导致: 网络连接问题:计算机可能无法连接到NLTK的下载服务器,这可能是由于网络配置错误、防火墙限制或网络不可用等原因造成的。...DNS解析失败:getaddrinfo failed表明在将服务器域名解析为IP地址时出现了问题,这通常与网络配置或DNS服务器设置有关。...NLTK服务器问题:虽然不常见,但也有可能是NLTK的服务器暂时不可用或维护中。...如果自动下载仍然失败,你可以尝试从NLTK的官方网站或其他可信来源手动下载所需的数据包,并将其解压到NLTK的数据目录中。...防火墙与代理设置:如果你位于一个使用防火墙或代理服务器的网络环境中,确保这些设置不会阻止你访问NLTK的服务器。 数据目录权限:确保你有权限写入NLTK的数据目录,否则下载的数据包无法正确保存。

    89910

    DNS 报文结构和个人 DNS 解析代码实现——解决 getaddrinfo() 阻塞问题

    :服务器内部错误 3:名字不存在 4:这个错误码不支持 5:请求被拒绝 6:name 在不应当出现时出现(什么鬼) 7:RR 设置不存在 8:RR 设置应当存在但是却不存在(什么鬼) 9:服务器不具备改管理区的权限...10:name 不在管理区中 --- 资源记录(RR)的格式 每一条 RR 的格式如下: 数据类型 Ethereal 里的名字 说明 variable Name 资源的域名——其实前文已经出现了 uint16...我的这些代码可以完全代替阻塞的 getaddrinfo() 函数,甚至也可以集成到异步 I/O 库中。...使用流程如下: 调用 socket() 创建一个 UDP 套接字并 bind() 调用 AMCDns_GetDefaultServer() 获取系统默认配置的 DNS 服务器 如果不使用系统默认的 DNS...调用 AMCDns_SendRequest() 请求指定域名的 IP 信息 调用 AMCDns_RecvAndResolve() 获取摘要的或完整的响应。

    8.2K71

    一次 Node.js 服务线上问题引出的 DNS 缓存方案研究与思考

    于是我们登录服务器,筛选了下Node.js服务的日志: image.png 通过日志,我们可以很直观的看出问题所在:DNS解析失败 整理思路 作为一个日均流量过千万的Node.js服务,每个请求都需要解析...平时还好,如果DNS服务出现了问题,或者网络抖动,很容易在Node.js服务与内网接口服务都正常的情况下,导致线上业务不可用 针对这种情况,我们需要在Node.js服务端对DNS解析做一层缓存 首先我们需要明确一点...getaddrinfo 函数 dns.lookup()方法调用到最终,调用的是底层的getaddrinfo()函数(也就是上文报错点) 在C/C++代码中getaddrinfo函数是同步调用,所以需要...Node.js v14中最大为1024 可能会出现的问题 当请求在DNS查询阶段耗时过长时,由于默认线程池过小,服务处理请求的速度跟请求数量远远不匹配,服务运行时间越长积压的请求数连接数就越多 关于默认缓存...dns.resolve()无法解析本地hosts配置 的域名,单纯使用lookup-dns-cache会导致本地开发环境出现报错。

    2.7K30

    一次 Node.js 服务线上问题引出的 DNS 缓存方案研究与思考

    于是我们登录服务器,筛选了下Node.js服务的日志: 通过日志,我们可以很直观的看出问题所在:DNS解析失败 整理思路 作为一个日均流量过千万的Node.js服务,每个请求都需要解析N个内网接口域名...平时还好,如果DNS服务出现了问题,或者网络抖动,很容易在Node.js服务与内网接口服务都正常的情况下,导致线上业务不可用 针对这种情况,我们需要在Node.js服务端对DNS解析做一层缓存 首先我们需要明确一点...** getaddrinfo 函数 dns.lookup()方法调用到最终,调用的是底层的getaddrinfo()函数(也就是上文报错点) 在C/C++代码中getaddrinfo函数是同步调用,所以需要...Node.js v14中最大为1024 可能会出现的问题 当请求在DNS查询阶段耗时过长时,由于默认线程池过小,服务处理请求的速度跟请求数量远远不匹配,服务运行时间越长积压的请求数连接数就越多 关于默认缓存...()无法解析本地hosts配置 的域名,单纯使用lookup-dns-cache会导致本地开发环境出现报错。

    1.3K20
    领券