是否可以让终端重复nslookup
从192.168.1.2
开始192.168.1.20
,查看网络中的所有计算机,而无需进入服务器。这可能吗?
答案1
nslookup
本身不支持 CIDR 表示法、范围或通配符,因此最好的选择可能是一个简单的 bash 循环。
for ip in 192.168.1.{2..20}; do nslookup $ip; done
答案2
dfarrell07 的答案以一般的方式解决了这个问题,而不是依赖于nslookup
- 我认为这是正确的方法。
但是为了多样性和 shell 语法示例,这里是另一种方法,与域名查找更相关:
查找程序可以被指示一次处理所有地址;这对于 来说似乎有些棘手nslookup
(可能需要使用expect
),因此我将改用dig
。
有一个选项-x
用于dig
进行反向查找。该选项仅接受一个地址,因此仅列出它们是行不通的。但命令行上可以有多个查询,因此可以重复使用该选项。
我们不能使用192.168.1.{2..20}
来表示地址列表,因为我们需要-x
在每个地址前面加上 。使用会在地址前面'-x 192.168.1.'{2..20}
放置—— 但不是作为单独的命令行参数 ——会得到一个参数,而它应该看到和。我将使用子 shell 扩展作为分离单词的变通方法 —— 但我相信有更简洁的方法可以做到这一点。 -x
dig
-x 192.168.1.2
-x
192.168.1.2
此命令应列出您想要的主机名:
dig +noall +answer $(echo '-x 192.168.1'{2..20})
显示类似
$ dig +noall +answer $(echo '-x 193.99.144.'{80..83})
80.144.99.193.in-addr.arpa. 20800 IN PTR redirector.heise.de.
81.144.99.193.in-addr.arpa. 20134 IN PTR www.ix-konferenz.de.
83.144.99.193.in-addr.arpa. 21599 IN PTR limesurvey.heise.de.
关于单独的命令行参数:您可以尝试以下命令,它们将显示相同的输出,但在第一个命令中,echo
前面的获得 11 个参数,每个参数-x
和 IP 地址都是单独的,而在第二个命令中,仅echo
获得 7 个参数:
$ echo dig +noall +answer $(echo '-x 193.99.144.'{80..83})
dig +noall +answer -x 193.99.144.80 -x 193.99.144.81 -x 193.99.144.82 -x 193.99.144.83
$ echo dig +noall +answer '-x 193.99.144.'{80..83}
dig +noall +answer -x 193.99.144.80 -x 193.99.144.81 -x 193.99.144.82 -x 193.99.144.83