📄 doc
字号:
#!/bin/csh -f#################################################################### Doc - Version 2.0.1 (9/14/90)# [Version 2.0 8/22/90]# [Version 1.1 5/17/90]# [Version 1.0 4/25/90]## Developed by: Steve Hotz (hotz@isi.edu)# Paul Mockapetris (pvm@isi.edu)# USC Information Sciences Institute (USC-ISI)# Marina del Rey, California# 1990## Implementation debugging & design comments by# some "dandy" folks:# Andrew Cherenson Steve Hubert Edward Vielmetti## This program is Public Domain, and may be freely distributed# and used for any non-profit purpose as long as this notice# is not removed.####################################################################################################################################### Any configuration changes that you may need to make will# likely be in the next few areas.########################################################################### alias to DiG Version 2.0 (if not in path)### alias dig '/nfs/u5/hotz/bin.sun3/dig'######## Differences in 'tr' program##### System V's tr requires []### set nonomatch# set tolower="tr '[A-Z]' '[a-z]'"####### BSD version##set tolower="tr 'A-Z' 'a-z'"####XX# ######## where are auxiliary awk files (doc[134].awk)#### Need to set this if you want to include 'doc' in your path,## and run while in other working directories.###set auxd=/nfs/u5/hotz/auto/set auxd=""######## Number of dig retries#### Dig default is four, but this makes for a considerable wait## when servers are down. Two retries seems to be a good trade-off## between time and completeness.##set RET="+ret=2"######## Default standard output options##set eflag=0 # error info onlyset wflag=0 # warning infoset vflag=0 # verboseset dflag=0 # debug -- *real* verboseset pflag=0 # skip parent domain testing######################################################################################################################################## Unless you want to add/modify tests that are being made,## you will likely not need to change things below this line.##onintr cleanupset version = "Doc-2.0.1"set ddflag=0 ## DDBUG numeric checkpoints for developmentset error = (FORMAT_ERROR SERVER_FAIL NXDOMAIN UNIMPLEMENTED \ REQ_REFUSED CONN_REFUSED TIME_OUT CONN_REFUSED \ UNKNOWN UNEXPECTED)set fferror=0 ## count of errors foundset ffwarn=0 ## count of warningsset ffallone=0 ## unfinished business (dig failed to parent servers)set ffalltwo=0 ## unfinished business (dig failed to AUTH servers)set aborted=0 ######XX# ########################################### Parse arguments && initialization#while ("$1" =~ -*) switch ($1) case "-p": set pflag=1 breaksw case "-d": set dflag=1 case "-v": set vflag=1 case "-w": set wflag=1 case "-e": set eflag=1 default: breaksw endswshiftendif ($1 == "") goto showif ($1 =~ *.) then set dom=$1else set dom=${1}.endifif ($2 == "") then set dad=`echo $dom | sed "s/[a-zA-Z0-9-]*.//p"` if ("$dad" == "") then set dad="." else set dad = $dad[1] ## sed variants do different things with p endifelse if ($2 =~ *.) then set dad=$2 else set dad=${2}. endifendifset stat = `dig | awk '/DiG/ && / 2./ {print "ok"; exit}'`if ($stat != "ok") thenecho "Abort: This program requires DiG Version-2.x to run."exit 1endif####XX# set agree=0echo "${version}: Starting test of $dom parent is $dad"echo "${version}: Test date - `date`"echo "${version}: Starting test of $dom parent is $dad" >> log.$domecho "${version}: Test date - `date`" >> log.$domecho "" >> logXX.$domecho "######## Query Log ########" >> logXX.$domecho "" >> logXX.$domset domservall=""############################################################# Get nameservers for parent zone##if ( -e DNsrv.$dad ) thencat DNsrv.${dad} > $dom.$dad.nsecho "Note: Using pre-specified $dad NSlist from file." >> log.$domif ($vflag) echo "Note: Using pre-specified $dad NSlist from file."goto skip1endifdig ns ${dad} +pfset=0xa224 | awk '$3=="NS" {print $4}' | $tolower > $dom.$dad.nsset stat = $statusif ($stat != 0) then set estr= $error[$stat] echo "DIGERR ($estr): dig for parent NS failed (dig ns $dad)" >> log.$dom echo "DIGERR ($estr): dig for parent NS failed (dig ns $dad)" if ($ddflag) echo "DDBUG: 1" goto dig1err1endifset dadcount=`wc -l < $dom.$dad.ns`if ($dadcount == 0) then echo "ABORT: No NS found for parent domain $dad" >> log.$dom echo "ABORT: No NS found for parent domain $dad" @ ffallone++ if ($ddflag) echo "DDBUG: 2" goto dig1err2endifskip1:echo "## Nameservers for $dad (dig ns $dad):" >> logXX.$domecho "" >> logXX.$domcat $dom.$dad.ns >> logXX.$domecho "===================" >> logXX.$domecho "" >> logXX.$dom####XX# ############################################################ Check SOA's of parent domain at each server for parent##set sns=""set aafile=""set aaserv=""set noaaserv=""set cntone = 0if ($pflag) thenecho "Note: Skipping parent domain testing" >> log.$domif ($vflag) echo "Note: Skipping parent domain testing"set aaserv = `cat $dom.$dad.ns`goto skip2endifforeach i (`cat $dom.$dad.ns`) if ($dflag) echo DEBUG: digging @$i for soa of $dad if ($dflag) echo DEBUG: digging @$i for soa of $dad >> log.$dom dig @$i soa $dad +norec $RET +pfset=0xa224 | $tolower > $dom.$dad.soa.$i set stat = $status if ($stat != 0) then set estr=$error[$stat]echo "DIGERR ($estr): dig @$i for SOA of parent ($dad) failed" >> log.$domecho "DIGERR ($estr): dig @$i for SOA of parent ($dad) failed" rm $dom.$dad.soa.$i if ($ddflag) echo "DDBUG: 3" continue endif echo "## SOA record for $dad domain from nameserver $i" >> logXX.$dom echo "" >> logXX.$dom cat $dom.$dad.soa.$i >> logXX.$dom echo "===================" >> logXX.$dom echo "" >> logXX.$dom set serial=`awk -f ${auxd}doc1.awk $dom.$dad.soa.$i` set stat=$status if ($vflag) echo "soa @$i for $dad has serial: $serial" echo "soa @$i for $dad has serial: $serial" >> log.$dom#####XX# ############################################################## Examine SOA information for parent from parent servers#### fix for shells which return unsigned 8 bit exit codes if ($stat > 127) then @ stat = $stat - 256 endif if ($stat < 0) then @ ffwarn++ set noaaserv = ($noaaserv $i) echo "WARNING: non-authoritative answer for $dad from $i" >> log.$dom if ($wflag) echo "WARNING: non-authoritative answer for $dad from $i" if ($ddflag) echo "DDBUG: 4" else if ($stat == 0) then @ ffwarn++ echo "WARNING: no SOA record for $dad from $i" >> log.$dom if ($wflag) echo "WARNING: no SOA record for $dad from $i" if ($ddflag) echo "DDBUG: 5" else if ($stat > 1) then set aaserv = ($aaserv $i) @ ffwarn++ echo "WARNING: multiple SOA records found for $dad from $i" >> log.$dom if ($wflag) echo "WARNING: multiple SOA records found for $dad from $i" if ($ddflag) echo "DDBUG: 6" else############################################################# Look for multiple serial numbers among SOA records from## servers that are authoritative for parent domain.## aafile/aaserve: files/list of authoritative servers for parent## noaaserv: servers not authoritative for parent## set aafile = ($aafile $dom.$dad.soa.$i) set aaserv = ($aaserv $i) @ cntone++ set another=1 foreach j ($sns) if ($serial == $j) then set another=0 break endif end if ($another) then set sns=($sns $serial) endif endifend ## foreach#####XX# if ($#sns > 1) then @ ffwarn++ echo "WARNING: Found $#sns unique SOA serial #'s for $dad" >> log.$dom if ($wflag) echo "WARNING: Found $#sns unique SOA serial #'s for $dad" if ($ddflag) echo "DDBUG: 7"else if ($sns != "") then if ($cntone > 1) then echo "SOA serial #'s agree for $dad domain" >> log.$dom if ($vflag) echo "SOA serial #'s agree for $dad domain" endifelse echo "SYSerr: No servers for $dad returned SOAs ..." >> log.$dom echo "SYSerr: No servers for $dad returned SOAs ..." if ($ddflag) echo "DDBUG: 8" goto dig2err1endif#####XXX At this point, might want to add check to compare entire#####XXX SOA (not just serial #) -- appropriate SOAs in ${aafile}s################################################################################################################## Ask all autoritative servers of parent zone for## NS records of domain being tested.##skip2:set nslists="" # files with lists of NS recs (unique)set nslistsaa="" # (as above) from servers claim AUTHset nsdad="" # server list not AUTH for domainset nsdadaa="" # server list also AUTH for domainset nsdadno=0set nsdadnoaa=0foreach i ($aaserv) dig @$i ns $dom +pfset=0xa7e4 +norec $RET | $tolower > $dom.raw.$i set stat = $status if ($stat != 0) then set estr=$error[$stat] echo "DIGERR ($estr): dig @$i for NS of $dom failed" >> log.$dom echo "DIGERR ($estr): dig @$i for NS of $dom failed" if ($ddflag) echo "DDBUG: 9" continue endif echo "## NS records for $dom domain from nameserver $i" >> logXX.$dom echo "" >> logXX.$dom cat $dom.raw.$i >> logXX.$dom echo "===================" >> logXX.$dom echo "" >> logXX.$dom####XX# ###################################################### Examine query response: (1) find list of nameservers,## (2) determine if authoritative response, (3) look for glue## awk -f ${auxd}doc3.awk $dom.raw.$i | sort -u > $dom.ns.$i set stat=$status set another=1## fix for shells which return unsigned 8 bit exit codes if ($stat > 127) then @ stat = $stat - 256 endif if ($stat < 0) then set isaa = 1 @ stat = $stat + 127 else set isaa = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -