使用dig命令写一个定时解析脚本

使用 dig 命令可以很方便地解析域名,有些域名的 A 记录中 IP 地址比较固定,而有些域名的 A 记录会不定时的变动,要想收集这类域名的 A 记录就需要实时更新。因此我写了一个定时解析的 Shell 脚本,配合 Linux 的计划任务去定时解析。

要使用 dig 命令,需要确认提供该命令的软件包是否安装。如果没有安装则使用 yum 安装即可。

1
rpm -qa bind-utils

下面是脚本的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

DNS_IP="8.8.8.8"
# 要请求哪个DNS服务器进行域名解析

serverListfile=$1
# dig 命令有一个参数 -f 指定文件,这里定义传给 dig 的文件

answerFile=""
# Answer_file="/tmp/baidu.res"
# 定义域名解析结果的输出文件路径
# 如果不指定,默认会输出到 /tmp/ 下的一个和脚本名一样且后缀为 .res 的文件

IP_filter(){
/bin/egrep '^(\b([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b){3}'
}
# 定义一个过滤IP的函数

#------------------------------------------------

scriptName=`/bin/basename $0`

if /usr/bin/expr "${scriptName}" : ".*\.sh$" >/dev/null ;then
if [[ ! -f $1 ]]; then
echo -e "\n\tUsage : $(basename $0) filename\n"
echo -e "\n\t必须指定一个域名列表文件\n"
exit 3
fi
outFilename=$(basename ${serverListfile})
answerFile="/tmp/$(echo ${outFilename} | cut -d "." -f 1).res"
else
echo -e "\n\t脚本必须以 '.sh' 结尾 \n"
exit 3
fi

/bin/gawk '!a[$0]++' < <(IP_filter < <(/usr/bin/dig @${DNS_IP} -f ${serverListfile} +short) ) | \
/bin/sort -t "." -k 1.1,1n -k 2,2.0n -k 3.1,3.0n -k 4,4n >> ${answerFile}
/bin/gawk '!a[$0]++' ${answerFile} | /bin/sort -t "." -k 1.1,1n -k 2,2.0n -k 3.1,3.0n -k 4,4n -o ${answerFile}

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@m1 ~]# ls
crondig.sh nordstrom.list
[root@m1 ~]#
[root@m1 ~]# cat nordstrom.list
www.nordstrom.com
m.shop.nordstrom.com
n.nordstrommedia.com
nordstrom.com
predictivesearch.nordstrom.com
recs.p13n.nordstrom.com
secure.nordstrom.com
secure.nordstromimage.com
shop.nordstrom.com
sid.nordstrom.com
tag.aws.nordstromdata.com
www.nordstromrack.com
www.hautelookcdn.com
[root@m1 ~]#
[root@m1 ~]#
[root@m1 ~]# chmod +x crondig.sh
[root@m1 ~]# ./crondig.sh nordstrom.list
[root@m1 ~]# ls
crondig.sh nordstrom.list nordstrom.res
[root@m1 ~]#
[root@m1 ~]# cat nordstrom.res
13.35.99.3
13.35.99.29
13.35.99.62
13.35.99.95
23.208.140.4
52.40.114.142
54.200.207.29
184.85.168.88
184.86.23.205
184.86.210.115

加入计划任务,每隔 15 分钟解析一次即可

1
2
[root@m1 ~]# tail -1 /etc/crontab 
*/15 * * * * root /root/crondig.sh /root/nordstrom.list &>/dev/null
有钱任性,请我吃包辣条
0%