Ama*_*rus 6 domain-name-system bash shell-scripting
我在 bash 变量 ( ) 中有一个域名$TARGET
,并且我想以可靠的A
方式在 bash 脚本中获取它的 IPv4(记录)地址(我还想获取 IPv6AAAA
记录(如果存在))。
即 bash/unix 命令将: (i) 打印 DNS 解析的 IP 地址(并且仅是 IP 地址) (ii) 如果没有找到该域的 DNS 记录,则不向 stdout 打印任何内容(或非零退出) (iii) 让我选择索取A
或AAAA
记录。
host "$TARGET"
打印出很多人类可读的内容,但我不愿意解析它们。
dig +short
看起来很有希望,但在某些情况下,它还会打印我不理解或不关心的其他警告消息。
$ dig +short -t A "$TARGET"
;; Warning: Client COOKIE mismatch
1.2.3.4
Run Code Online (Sandbox Code Playgroud)
Debian 测试/书呆子。Bash v5.2(通过 apt 安装)
fue*_*ero 11
我不确定您是否想实际查询名称服务器还是依赖系统的名称解析:
$ getent ahosts one.one.one.one. | awk '{ print $1 }' | sort -u
1.0.0.1
1.1.1.1
2606:4700:4700::1001
2606:4700:4700::1111
$ getent ahosts nonexistent.host | awk '{ print $1 }' | sort -u
$ getent ahosts www.what-is-my-ipv4.com | awk '{ print $1 }' | sort -u
185.26.156.187
Run Code Online (Sandbox Code Playgroud)
ahostsv4
您还可以使用和使其返回 v4 或 v6 地址ahostsv6
。
如果您只是使用hosts
,则需遵守您的/etc/gai.conf
设置。
nslookup
、dig
、 和host
是用于查询 DNS 名称服务器的工具。如果您的配置不是由名称服务器提供的(如 /etc/hosts 中给出的信息),这些工具将不会显示它们,因为它们直接询问名称服务器。
如果您想检查“通常”分辨率是否有效(即中指定的方式
/etc/nsswitch.conf
),您可以使用getent
:Run Code Online (Sandbox Code Playgroud)getent hosts www.winaproduct.com
您走在正确的轨道上dig
。您可以抑制特定的 cookie 相关错误(根据手册页)。下面,我还选择将所有错误重定向到/dev/null
以防万一,因为您希望失败保持沉默。
[jg7@comp1 ~]$ TARGET="google.com"
[jg7@comp1 ~]$ dig +short +nobadcookie -t A "$TARGET" @8.8.8.8 2>/dev/null
64.233.177.139
64.233.177.138
64.233.177.101
64.233.177.113
64.233.177.100
64.233.177.102
[jg7@comp1 ~]$ dig +short +nobadcookie -t AAAA "$TARGET" @8.8.8.8 2>/dev/null
2607:f8b0:4002:c08::65
2607:f8b0:4002:c08::8a
2607:f8b0:4002:c08::64
2607:f8b0:4002:c08::71
Run Code Online (Sandbox Code Playgroud)
如果这不是您要找的,请告诉我。
[编辑] 使用 bash 变量以便更接近原始问题。
getent ahosts[v4|v6]
一般来说,使用 getaddrinfo() 的任何内容都是正确的答案,因为它将使用与系统其余部分相同的名称解析机制(DNS、mDNS、NetBIOS、NIS、LDAP\xe2\x80\xa6),并执行domain
与系统其余部分相同的后缀搜索(即 resolv.conf )。
例如,如果 getent 不可用,您可以执行以下操作:
\ngaiv4="import sys, socket\nres = socket.getaddrinfo(sys.argv[1], 0, socket.AF_INET, socket.SOCK_STREAM)\nfor e in res: print(e[4][0])"\npython -c "$gaiv4" serverfault.com\n
Run Code Online (Sandbox Code Playgroud)\n我通常出于其他原因安装了 ndisc6 软件包,并且它恰好有name2addr
:
name2addr -m -4 www.google.com\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2591 次 |
最近记录: |