You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Erlang/Elixir中获取完全限定域名(或仅域名)?

获取Erlang中的域名

你已经知道用:inet.gethostname/0拿到主机名了,那要获取域名的话,咱们可以借助Erlang的:inet模块里的其他函数来实现,下面给你两种常用的方法:

方法一:通过主机名正向解析完整域名

先获取主机名,再用:inet.gethostbyname/1查询该主机的完整信息,从返回的hostent结构体中提取包含域名的完整主机名:

iex(1)> {:ok, hostname} = :inet.gethostname()
{:ok, 'Michaels-MacBook-Pro'}
iex(2)> {:ok, host_info} = :inet.gethostbyname(hostname)
iex(3)> host_info#hostent.h_name
'Michaels-MacBook-Pro.local'

这里的h_name字段返回的是官方完整主机名,包含了域名部分(比如示例中的.local)。如果只需要单独的域名,你可以对这个结果做字符串分割处理,去掉前面的主机名部分。

方法二:通过IP反向解析获取域名

先把主机名转换成IP地址,再通过:inet.gethostbyaddr/1反向解析得到完整主机名:

iex(1)> {:ok, hostname} = :inet.gethostname()
{:ok, 'Michaels-MacBook-Pro'}
iex(2)> {:ok, ip_addr} = :inet.getaddr(hostname, :inet)
{:ok, {192, 168, 1, 100}}
iex(3)> {:ok, {full_hostname, _}} = :inet.gethostbyaddr(ip_addr)
{:ok, {'Michaels-MacBook-Pro.local', [], [{192, 168, 1, 100}]}}
iex(4)> full_hostname
'Michaels-MacBook-Pro.local'

这种方法依赖于系统的反向DNS配置,如果你的主机没有正确配置反向解析,可能会返回失败或者不完整的结果。

小技巧:单独提取域名部分

如果只需要纯域名,可以用:string:tokens/2对完整主机名进行分割:

iex(5)> :string:tokens(host_info#hostent.h_name, '.')
['Michaels-MacBook-Pro', 'local']

取列表的第二个元素就是你要的域名啦~

注意事项

这两种方法都依赖于系统的DNS或本地主机配置(比如/etc/hosts文件),如果配置不正确,可能无法获取到预期的域名。

内容的提问来源于stack exchange,提问作者mconigliaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:07:21