📄 zt
字号:
#!/bin/sh# -------------------------------------------------------------# Copyright (c) 1991 Regents of the University of Michigan.# All rights reserved.## Redistribution and use is permitted provided that this notice # is preserved and that due credit is given to the University of # Michigan. The name of the University may not be used to endorse # or promote products derived from this software without specific # prior written permission. This software is provided "as is" # without express or implied warranty.# -------------------------------------------------------------RECURSE=0 DEBUG=0 XFER=/etc/named-xfer QUERY=/usr/local/bin/query# -------------------------------------------------------------# Do args# -R Recursive. Grab all zones below give zone too.# -d Debug. Print handy debugging info.# -------------------------------------------------------------if [ $# = 0 ] ; then echo "Usage: [-R] [-d] zone" exit -1fiwhile [ $# != 1 ] ; do case "$1" in -R) RECURSE=1 ;; -d) DEBUG=1 ;; -?) echo Illegal arg $1 exit -1 ;; esac shiftdoneZONELIST=$1while [ 1 ] ; do #---------------------------------------------------- # Loop through the list of zones #---------------------------------------------------- DONE=1 for ZONE in $ZONELIST ; do #---------------------------------------------------- # Get the addr of the zone's nameservers #---------------------------------------------------- $QUERY -t NS -h $ZONE > /tmp/zt.$$ 2> /dev/null if [ $? -ne 0 ] ; then echo Zone $zone unknown or nameserver unavailable exit -1 fi NSLIST=`cat /tmp/zt.$$ | awk '/address/ { print $4 }'` #---------------------------------------------------- # Use named-xfer to bring over a copy of the zone # Use 0 as the serial # since will likely be less # than the current serial number in the SOA #---------------------------------------------------- for I in $NSLIST ; do if [ $DEBUG = 1 ] ; then echo Trying nameserver at address $I fi $XFER -z $ZONE -f /tmp/$ZONE.$$ -s 0 $I if [ $? = 1 ] ; then grep -v ";" /tmp/$ZONE.$$ | awk '{ if ($1 == "$ORIGIN") { origin=$2 if (origin != old) { old = origin print $0 } } else print $0 }' >> /tmp/zt.out.$$ if [ $DEBUG = 1 ] ; then echo Got zone $ZONE fi break elif [ $DEBUG = 1 ] ; then echo Nameserver $I for $ZONE not working fi done rm -f /tmp/zt.$$ #---------------------------------------------------- # If we're doing a recursive query, capture the NS # records to build a new ZONELIST of subdomains #---------------------------------------------------- SUBZONES="" if [ $RECURSE = 1 -a -s /tmp/$ZONE.$$ ] ; then awk '{ if ($1 == "$ORIGIN") origin = substr($2, 1, length($2) - 1) else if ($3 == "NS") { sub = $1 "." origin if (sub != zone) print sub } }' zone=$ZONE /tmp/$ZONE.$$ > /tmp/zl.$$ if [ -s /tmp/zl.$$ ] ; then SUBZONES=`echo $SUBZONES ; sort -u /tmp/zl.$$` DONE=0 fi rm -f /tmp/zl.$$ fi rm -f /tmp/$ZONE.$$ done #---------------------------------------------------- # If we weren't recursive, or we were recursive and # have run out of subdomains, we're done #---------------------------------------------------- if [ $DONE = 1 ] ; then if [ -s /tmp/zt.out.$$ ] ; then cat /tmp/zt.out.$$ else echo "Could not perform a zone transfer of $1" fi rm -f /tmp/zt.out.$$ exit 0 else ZONELIST=$SUBZONES fidoneexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -