Difference between revisions of "Get-root-zone"

From CDOT Wiki
Jump to: navigation, search
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
#!/bin/bash
+
[[Category:OPS535]][[Category:rchan]]
# Created by: Raymond Chan
+
= Bash Script=
# for OPS535
+
Sample Bash script for extracting Domain Registration wiki page [[Domainreg]] and create a root zone file.
# (c) 2010
+
Set the following shell (environment) variables before running the script to produce a customized zone file header for that root zone that match your DNS server:
url=http://zenit.senecac.on.ca/wiki/index.php/Domainreg
+
* RNS_FQDN - set this to the fully qualified domain name of your root name server.
+
** <pre> export RNS_FQDN=rns.cp.net</pre>
if [ ! -f raw.txt ]
+
* RNS_IP - set this to the IP address of your root name server.
then
+
* DNS_ADMIN_EMAIL - set this to the email address of your DNS administrator
    echo "Gettting wiki file from the web ..." >&2
+
** <pre> export DNS_ADMIN_EMAIL=admin.cp.net</pre>
    wget -O raw.txt $url
+
 
fi
+
<pre>
+
#!/bin/bash
buffer=$(cat raw.txt| grep ^'</td><td>')
+
# Created by: Raymond Chan
+
# for OPS535
nl=$(echo "$buffer"|wc -l)
+
# (c) 2016 - update for new wiki site
a=0
+
# (c) 2017 - update to prompt user to set the followings
b=5
+
#     fqdn,ip for root name server
+
#     email for dns admin
while [ $a -lt $nl ]
+
# RNS_FQDN, RNS_IP, DNS_ADMIN_EMAIL
do
+
if [ -z "${RNS_FQDN}" ]
    stuff=$(echo "$buffer"| head -"$b" | tail -5|nl|sed -e "s/<\/td><td>/x/g")
+
then
    #  echo "$stuff"
+
echo "Please set the shell variable RNS_FQDN to the FQDN of your" >&2
    fields=$(echo "$stuff"|sed -e "s/ //g"|awk -Fx {'print $2'})
+
echo "root name server and run this script again." >&2
 +
exit 1
 +
fi
 +
 
 +
if [ -z "${RNS_IP}" ]
 +
then
 +
echo "Please set the shell variable RNS_IP to the IP address" >&2
 +
        echo "of your root name server and run this script again." >&2
 +
exit 2
 +
fi
 +
 
 +
if [ -z "${DNS_ADMIN_EMAIL}" ]
 +
then
 +
echo "Please set the shell variable DNS_ADMIN_EMAIL to the" >&2
 +
echo "email address of your DNS administrator and run this" >&2
 +
        echo "script again." >&2
 +
exit 3
 +
fi
 +
# start loading dns information from the web
 +
url=http://zenit.senecac.on.ca/wiki/index.php/Domainreg
 +
 
 +
if [ ! -f raw.txt ]
 +
then
 +
echo "Gettting wiki file from the web ..." >&2
 +
wget -O raw.txt $url
 +
fi
 +
 
 +
buffer=$(cat raw.txt| grep ^'<td>')
  
    parameters=$(echo $fields)
+
nl=$(echo "$buffer"|wc -l)
    paratest=$(echo $parameters | sed -e "s/ //g")
+
a=0
    cc=$(echo $paratest | wc -w)
+
b=6
        # echo "paratest cc is $cc"
+
# generating the zone file header
 +
SN=$(date +%y%j%H) # yydddHH
 +
echo "\$TTL 3600"
 +
echo "@ IN SOA ${RNS_FQDN} ${DNS_ADMIN_EMAIL} (${SN} 1h 15m 30d 1h)"
 +
echo "      IN NS ${RNS_FQDN}"
 +
echo "${RNS_FQDN} IN A ${RNS_IP}"
  
    if [ $cc -gt 0 ]
+
while [ $a -lt $nl ]
    then   
+
do
        #echo $a $parameters
+
stuff=$(echo "$buffer"| head -"$b" | tail -5|nl|sed -e "s/<td>/x/g")
        #read yyy   
+
# echo "$stuff"
        set $parameters
+
fields=$(echo "$stuff"|sed -e "s/ //g"|awk -Fx {'print $2'})
  
        if [ "$1" != "" -a "$3" != "" -a "$4" != "" ]
+
parameters=$(echo $fields)
        then
+
cc=$(echo $parameters | wc -w)
 +
        # echo "paratest cc is $cc"
  
            echo -e "${1}. \tIN \tNS \t$4."
+
if [ "$cc" -gt 0 ]
            echo -e "${4}. \tIN \tA \t$3"
+
then
            echo " "
+
#echo $a $parameters
 +
#read yyy
 +
set $parameters
 +
if [ "$1" != "domainname" ]
 +
then
 +
if [ "$1" != "" -a "$3" != "" -a "$4" != "" ]
 +
then
  
        fi
+
echo -e "${1}. \tIN \tNS \t$4."
    fi
+
echo -e "${4}. \tIN \tA \t$3"
 +
echo " "
 +
 +
fi
 +
fi
 +
fi
  
    let a=a+5
+
let a=a+6
    let b=b+5
+
let b=b+6
  
    #read xxx
+
#read xxx
  done
+
done
 +
</pre>
 +
= Sample Output =
 +
<pre>
 +
$TTL 3600
 +
@ IN SOA rns.cp.net. admin.cp.net. (1735109 1h 15m 30d 1h)
 +
      IN NS rns.cp.net.
 +
rns.cp.net. IN A 192.168.99.253
 +
cp.net. IN NS ns.cp.net.
 +
ns.cp.net. IN A 192.168.99.1
 +
 +
Raymond.com. IN NS ns.raymond.com.
 +
ns.raymond.com. IN A 192.168.98.53
 +
   
 +
gcyao.net. IN NS pri-dns.gcyao.net.
 +
pri-dns.gcyao.net. IN A 192.168.33.53
 +
 +
bdgushue.com. IN NS pri-dns.bdgushue.com.
 +
pri-dns.bdgushue.com. IN A 192.168.14.53
 +
 +
dcwood.com. IN NS pri-dns.dcwood.com.
 +
pri-dns.dcwood.com. IN A 192.168.32.53
 +
 +
falli2.com. IN NS pri-dns.falli2.com.
 +
pri-dns.falli2.com. IN A 192.168.2.53
 +
 +
tnemat.com. IN NS a2-dns.tnemat.com.
 +
a2-dns.tnemat.com. IN A 192.168.25.53
 +
 +
accarneirobrandao.net. IN NS pri-dns.accarneirobrandao.net.
 +
pri-dns.accarneirobrandao.net. IN A 192.168.7.53
 +
</pre>

Revision as of 12:51, 17 December 2017

Bash Script

Sample Bash script for extracting Domain Registration wiki page Domainreg and create a root zone file. Set the following shell (environment) variables before running the script to produce a customized zone file header for that root zone that match your DNS server:

  • RNS_FQDN - set this to the fully qualified domain name of your root name server.
    •  export RNS_FQDN=rns.cp.net
  • RNS_IP - set this to the IP address of your root name server.
  • DNS_ADMIN_EMAIL - set this to the email address of your DNS administrator
    •  export DNS_ADMIN_EMAIL=admin.cp.net
#!/bin/bash
# Created by: Raymond Chan
# for OPS535
# (c) 2016 - update for new wiki site
# (c) 2017 - update to prompt user to set the followings
#	     fqdn,ip for root name server
#	     email for dns admin
#	RNS_FQDN, RNS_IP, DNS_ADMIN_EMAIL
if [ -z "${RNS_FQDN}" ]
then
	echo "Please set the shell variable RNS_FQDN to the FQDN of your" >&2
	echo "root name server and run this script again." >&2
	exit 1
fi

if [ -z "${RNS_IP}" ]
then
	echo "Please set the shell variable RNS_IP to the IP address" >&2
        echo "of your root name server and run this script again." >&2
	exit 2
fi

if [ -z "${DNS_ADMIN_EMAIL}" ]
then
	echo "Please set the shell variable DNS_ADMIN_EMAIL to the" >&2
	echo "email address of your DNS administrator and run this" >&2
        echo "script again." >&2
	exit 3
fi
# start loading dns information from the web
url=http://zenit.senecac.on.ca/wiki/index.php/Domainreg

if [ ! -f raw.txt ]
then
	echo "Gettting wiki file from the web ..." >&2
	wget -O raw.txt $url
fi

buffer=$(cat raw.txt| grep ^'<td>')

nl=$(echo "$buffer"|wc -l)
a=0
b=6
# generating the zone file header
SN=$(date +%y%j%H) # yydddHH
echo "\$TTL 3600"
echo "@ IN SOA ${RNS_FQDN} ${DNS_ADMIN_EMAIL} (${SN} 1h 15m 30d 1h)"
echo "      IN NS ${RNS_FQDN}"
echo "${RNS_FQDN} IN A ${RNS_IP}"

while [ $a -lt $nl ]
do
	stuff=$(echo "$buffer"| head -"$b" | tail -5|nl|sed -e "s/<td>/x/g")
	#  echo "$stuff"
	fields=$(echo "$stuff"|sed -e "s/ //g"|awk -Fx {'print $2'})

	parameters=$(echo $fields)
	cc=$(echo $parameters | wc -w)
        # echo "paratest cc is $cc"

	if [ "$cc" -gt 0 ]
	then	
		#echo $a $parameters
		#read yyy	
		set $parameters
		if [ "$1" != "domainname" ]
		then
			if [ "$1" != "" -a "$3" != "" -a "$4" != "" ]
			then

	 			echo -e "${1}. \tIN \tNS \t$4."
	 			echo -e "${4}. \tIN \tA \t$3"
				echo " "
	
			fi
		fi
	fi

	let a=a+6
	let b=b+6

	#read xxx
done

Sample Output

$TTL 3600
@ IN SOA rns.cp.net. admin.cp.net. (1735109 1h 15m 30d 1h)
      IN NS rns.cp.net.
rns.cp.net. IN A 192.168.99.253
cp.net. 	IN 	NS 	ns.cp.net.
ns.cp.net. 	IN 	A 	192.168.99.1
 
Raymond.com. 	IN 	NS 	ns.raymond.com.
ns.raymond.com. 	IN 	A 	192.168.98.53
 
gcyao.net. 	IN 	NS 	pri-dns.gcyao.net.
pri-dns.gcyao.net. 	IN 	A 	192.168.33.53
 
bdgushue.com. 	IN 	NS 	pri-dns.bdgushue.com.
pri-dns.bdgushue.com. 	IN 	A 	192.168.14.53
 
dcwood.com. 	IN 	NS 	pri-dns.dcwood.com.
pri-dns.dcwood.com. 	IN 	A 	192.168.32.53
 
falli2.com. 	IN 	NS 	pri-dns.falli2.com.
pri-dns.falli2.com. 	IN 	A 	192.168.2.53
 
tnemat.com. 	IN 	NS 	a2-dns.tnemat.com.
a2-dns.tnemat.com. 	IN 	A 	192.168.25.53
 
accarneirobrandao.net. 	IN 	NS 	pri-dns.accarneirobrandao.net.
pri-dns.accarneirobrandao.net. 	IN 	A 	192.168.7.53