linux - Shell 脚本支持——不同 URL 上的多个 nslookups

标签 linux bash shell scripting

我的公司托管 2 个数据中心,预计流量将以循环方式路由。我们有很多 URL,预计流量将由两个 DC 提供。我通过连续的 nslookup 检查流量是否到达两个 DC

for i in {1..100}; do nslookup www.xyz.com ; done | grep 'Address:' | grep -v 10 | sort | uniq | wc -l

如果字数为 1,我知道流量只会流向一个 DC,这是一个错误,但是,如果输出为 2,我知道一切都按预期运行。

目前,我有很多网站,并将它们放在一个文件中。我想编写一个脚本来“cat”文件并对每个整体进行 nslookup,回显条目和字数统计变量。希望输出看起来像

www.xyz.com ==> 2 DCs active
www.123.com ==> 1 DC active

我想不出实现此输出的逻辑。请求您的支持..

最佳答案

免责声明:我假设这里不涉及选播。

首先,最好指定您要询问的 DNS 服务器。使用狂野的 nslookup 可能会为您提供缓存数据。

因此,假设它们都由同一 DNS 服务器提供服务(并且这些不是任播),您可以使用 dig @DNSSERVER +short <query> 轻松(清楚地)查找规则。

所以首先创建一个像这样的文本文件..(第一个变量行是域,逗号后面是您要查找的 DNS 服务器)

domains.txt:

google.com,4.2.2.3
sampledomain.org,8.8.4.4
joeblogs.net,

我故意让 joeblogs 没有可供查找的 DNS 服务器,它将回退到您工作站上的默认 DNS 服务器或缓存

现在我制作了一个简单的脚本:

  • 逐行循环文件
  • 总结 DNS 结果
  • 每 10 秒重新开始

dig.sh

#!/usr/bin/env bash
DEFAULT_DNS_SERVER=4.2.2.3
while true ; do
        while read line
        do
                domain="$(cut -d "," -f 1 <<<"$line")"
                server="$(cut -d "," -f 2 <<<"$line")"
                if [ "X$server" == "X" ]; then
                        export server="$DEFAULT_DNS_SERVER"
                fi
                result="$(dig +short @"$server" "$domain" | wc -l)"
                echo "$domain ==> ${result} DCs active"
        done < domains.txt
sleep 10
done

然后运行它.. EG:

stark@fourier ~ $ ./dig.sh 
google.com ==> 6 DCs active
sampledomain.org ==> 4 DCs active
joeblogs.net ==> 1 DCs active
google.com ==> 11 DCs active
sampledomain.org ==> 4 DCs active
joeblogs.net ==> 1 DCs active

...等等...

要在基于 ubuntu 的现代发行版上安装“dig”(我使用 Mint Cinnamon): sudo apt-get install dnsutils

祝你好运

关于linux - Shell 脚本支持——不同 URL 上的多个 nslookups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25120487/

相关文章:

linux - OS如何让被中断的进程一直运行在指定的CPU上?

linux - 根据找到第一个模式找到一个模式并打印行 sed, awk grep

linux - 如何在启动后不登录的情况下启动 gtk 应用程序?

linux - 在内核模块中实现 CPU 扩展

node.js - Linux 狂欢 : How to open a websocket connection as client

linux - 如何在 Linux 上获取 4 个并行进程的结果

linux - sudo 还是不 sudo?

linux - 如何在 shell 脚本中动态生成新的变量名?

shell - sbatch+srun : Large amount of single thread jobs

java - Unix shell : Turn file with directory names to ':' separated classpath