实际工作或者维护过程中常常需要通过域名反查下其对应的IP地址。解决方法有多种,既可以通过网上提供的域名反查IP查询工具查询,也可以在Linux系统中通过命令进行查询。
本教程主要讲解如何在Linux系统中通过命令查看域名对应的IP地址,主要讲解以下5个命令:
-
dig
:它是一个用于查询 DNS 名称服务器的灵活命令行工具。 -
host
:它是用于执行 DNS 查询的简单程序。 -
nslookup
:它用于查询互联网域名服务器。 -
fping
:它用于向网络主机发送 ICMP ECHO_REQUEST 数据包。 -
ping
:它用于向网络主机发送 ICMP ECHO_REQUEST 数据包。
通过dig
命令查询域名对应IP
dig命令它是一个功能强大且灵活的命令行工具,用于查询 DNS 名称服务器。它执行 DNS 查询,并显示来自查询的名称服务器的返回信息。大多数 DNS 管理员使用 dig
命令来解决 DNS 问题,因为它灵活、易用且输出清晰。
如何使用 dig 命令查找域的 IP 地址呢?看示例:
dig www.linux.com
输出:
; <<>> DiG 9.10.6 <<>> www.linux.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18721
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linux.com. IN A
;; ANSWER SECTION:
www.linux.com. 300 IN A 23.185.0.3
;; Query time: 538 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue Dec 03 18:04:41 CST 2019
;; MSG SIZE rcvd: 58
当然如果你需要一次查询多个域名的IP地址,可以通过将多个域名信息放到一个文本文件中,每行一个,然后编写shell脚本进行读取文件然后循环批量查询输出。
shell脚本命令类似如下:
#!/bin/bash
for server in `cat /opt/scripts/domains-list.txt`
do echo $server "-"
dig $server +short
done | paste -d " " - - -
通过host
命令查询域名对应IP
host 命令可用于执行 DNS 查询。它通常用于将名称转换为 IP 地址,反之亦然。如果未提供任何参数或选项,host
将打印它的命令行参数和选项摘要。
host www.linux.com
输出:
www.linux.com has address 23.185.0.3
www.linux.com has IPv6 address 2620:12a:8000::3
www.linux.com has IPv6 address 2620:12a:8001::3
同理,可以通过编写shell脚本实现批量查询,示例如下:
for server in `cat /opt/scripts/domains-list.txt`
do host $server | grep "has address" | sed 's/has address/-/g'
done
通过nslookup
命令查询域名对应IP
nslookup 命令是一个用于查询互联网域名服务器(DNS)的程序。
nslookup
有两种模式,分别是交互式和非交互式。交互模式允许用户查询名称服务器以获取有关各种主机和域的信息,或打印域中的主机列表。非交互模式用于仅打印主机或域的名称和请求的信息。
它是一个网络管理工具,可以帮助诊断和解决 DNS 相关问题。命令示例如下:
nslookup www.linux.com
输出:
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: www.linux.com
Address: 23.185.0.3
同理,使用以下 bash 脚本查找多个域的 IP 地址
#!/bin/bash
for server in `cat /opt/scripts/domains-list.txt`
do echo $server "-"
nslookup $server | tail -n+4 | sed -e '/^$/d' -e 's/Address://g' | grep -v 'Name|answer' | xargs -n1 done | paste -d " "
done
通过fping
命令查询域名对应IP
fping 命令是类似 ping
之类的程序,它使用互联网控制消息协议(ICMP)echo 请求来确定目标主机是否响应。
fping
与 ping
不同,因为它允许用户并行 ping 任意数量的主机。另外,它可以从文本文件输入主机。
fping
发送 ICMP echo 请求,并以循环方式移到下一个目标,并且不等到目标主机做出响应。
如果目标主机答复,那么将其标记为活动主机并从要检查的目标列表中删除;如果目标在特定时间限制和/或重试限制内未响应,那么将其指定为不可访问。
fping命令程序并不默认安装在Linux发行版中,一般需要进行安装,常见的发行版安装命令如下:
sudo apt install fping
yum install fping
or
dnf install fping
fping默认使用示例:
fping -A www.linux.com
输出:
23.185.0.3 is alive
更多关于fping的使用方法可以通过在终端中键入man fping
来学习。
通过ping
命令查询域名对应IP
ping 命令(数据包互联网抓手Packet Internet Groper)是一个网络程序,用于测试 Internet 协议(IP)网络上主机的可用性/连接性。
ping命令通过向目标主机发送互联网控制消息协议(ICMP)Echo 请求数据包并等待 ICMP Echo 应答来验证主机的可用性。
它基于发送的数据包、接收的数据包、丢失的数据包,通常包含最小/平均/最大时间来汇总统计结果。
命令示例:
ping -c 2 www.linux.com
输出:
PING www.linux.com (23.185.0.3): 56 data bytes
64 bytes from 23.185.0.3: icmp_seq=0 ttl=42 time=117.995 ms
64 bytes from 23.185.0.3: icmp_seq=1 ttl=42 time=310.108 ms
--- www.linux.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 117.995/214.052/310.108/96.057 ms
我们可以看到输出内容中起对应的IP地址,如果需要过滤输出,增加更多相应的命令处理:
ping -c 2 www.linux.com | head -2 | tail -1 | awk '{print $5}' | sed 's/[(:)]//g'
输出:
23.185.0.3
写在最后
以上内容为在Linux系统中使用5个命令来获取域名对应的IP地址。建议你可以在自己的服务器或者自己的Linux同上进行尝试,也可以通过编写shell脚本进行批量处理或通过相应的命令对输出进行处理输出自己想要的内容。