vDNS
Publicado por Percio Andrade Castelo Branco (última atualização em 12/06/2017)
[ Hits: 6.926 ]
Homepage: null
Download 1431748206.vdns (versão 2)
Download 1495570501.vdns (versão 3)
Olá pessoal, o vDNS é um script que consiste em auxiliar na verificação de DNS, ele consegue capturar de forma rápida e precisa valores como MX/TXT/A/NS entre outros e comparar se estão corretos diretamente do servidor de hospedagem e dos rootservers de domínios, entre outras opções.
Atenção: Script ainda não finalizado, no entanto suas funções estão funcionando corretamente.
Utilização do script:
vdns [-a] [-n] [-d] [-w] [-p] [-m] [-r] [-f] [-k] [-s] [-b] [-i] [domain] | [ -u update ] | [ -h --help ]
Opções:
-a : Consulta completa de DNS
-n : Retorna somente os servidores NS
-d : Retorna somente os servidores NSR
-w : Retorna somente o valor do WWW
-p : Retorna o teste de ping ao WWW
-m : Retorna somente o MX
-r : Retorna somente o reverso
-f : Retorna somente o SPF
-k : Retorna somente o DKIM
-b : Retorna somente a situação de registro do domínio na registro.br
-i : Retorna somente a situação de registro do domínio na nic.com
-u : Verifica se existe alguma atualização.
-s : Salva a consulta em um arquivo de texto.
-h : Exibe as opções disponíveis.
Exemplos:
$ vdns -a domain.com
$ vdns -k domain.com
$ vdns -s domain.com
Versão 2 - Enviado por Percio Andrade Castelo Branco em 16/05/2015
Changelog: - Adicionada busca para domínios .es.
- Diversas correções efetuadas.
- Melhorias no layout.
- Busca de registros Office.
- Adição de verificação de bloqueios na registro.br.
Versão 3 - Enviado por Percio Andrade Castelo Branco em 23/05/2017
Changelog: 1.5 -
* - Change query in registro.br due to client removal 'isavail'
* - Fixed domain check .es
* - Fixed domain verify input (.com/.br etc)
* - Added check if packages perl-libwww and perl-IO-Sockets is installed #Thanks for Alessandro Maia for report
* - Added update url check for vDNS ( now is working :D )
* - Added registro.br variable for url consult $REG_BR_WHOIS
* - Change of query of the domain situation in the registro.br due to the removal of the protocol 'isavailble'
* - Changes in help layout function
* - Added propagation function check for domain
* - Added option show in bind format
* - Added option fast consult in Google Servers
* - And a lot of bugs corrected
#!/bin/bash ################################################################## # Author : Percio Andrade # Email : percio.andrade@hotmail.com.br # Info : Shell script to consult dns and register from domain # Version : 1.3 ( beta ) ################################################################## # If you find any bug please, make contact. ## INITIAL CONFIG VERSION="1.3" DATE=`date` DOMAIN=$2 ## DOCUMENTATION RFC2181="http://tools.ietf.org/html/rfc2181" vDNS="https://raw.github.com/percioandrade/vdns/master/vdns" ## INDICATORS BAR="-- DOMAIN -------------- TTL --------- TYPE ---------- VALUE ------" MXBAR="-- DOMAIN -------------- TTL --------- TYPE --- PTY --- VALUE ------" ## BASHCSS pret='\E[0;30m' # Black verm='\E[0;31m' # Red verd='\E[0;32m' # Green amar='\E[0;33m' # Yellow azul='\E[0;34m' # Blue mage='\E[0;35m' # Magenta cian='\E[0;36m' # Ciano bran='\E[0;37m' # White rese=$(tput sgr0) # No color. OK="${verd}[OK]${rese}"; ATT="${amar}[!]${rese}"; FAIL="${verm}[!]${rese}"; ## HELP INFO function SHOW_HELP(){ echo " usage: vdns [-a] [-n] [-d] [-w] [-p] [-m] [-r] [-f] [-k] [-s] [-b] [-i] [domain] | [ -u update ] | [ -h --help ] Options: -a | --all : Full DNS lookup -n | --ns : Only return servers NS -d | --dns : Only return servers NSR -w | --www : Only return WWW -p | --ping : Only return ping check on WWW -m | --mx : Only return MX -r | --reverse : Only return reverse -f | --spf : Only return SPF -k | --dkim : Only return DKIM -b | --br : Consult domain on registro.br -i | --int : Consults domain o nic.com -u | --update : Verify if exist update -s | --save : Save Query on txt file -h | --help : Shows available functions eg: vdns -a domain.com vdns -k domain.com vdns -s domain.com " exit } ## CHECK DEPENDECIES - if [ ! -f '/usr/bin/dig' ];then echo -e " ${FAIL} - The application ${amar}dig${rese} is not installed on your computer, please install in order to run this script: - RedHat: yum install dig - Debian: apt-get install dig - Arch: pacman -S dnsutils " exit elif [ ! -f '/usr/bin/curl' ];then echo -e " ${FAIL} - The application ${amar}curl${rese} is not not installed on your computer, please install in order to run this script: - RedHat: yum install curl - Debian: apt-get install curl - Arch: pacman -S curl " exit fi ## CHECK VERSION function SHOW_VERSION(){ vCURL=$(curl -s ${vDNS} | grep -m1 "VERSION=" | cut -d '"' -f2) if [ "$3" != "${vCURL}" ];then echo -e "\n${ATT} - Is there a new update for vdns. Version ${verm}$vCURL${rese}, please update on ${vDNS} \n" else echo -e "\n${OK} - Your vdns version is up to date ${verd}$VERSION${rese}\n" fi } ## ARGUMENT CHECK if [ -z "$1" ];then echo "No arguments parsed, use -h for help information." exit elif [ "$1" = "-u" ];then SHOW_VERSION exit elif [ "$1" = "-h" ];then SHOW_HELP exit elif [ "$1" = "-" ];then echo "Incorrect argument, please use -h for hel information." exit fi ## DOMAIN CHECK if [ -z "$2" ];then echo "Please inform a domain, use -h for help information." exit fi ## INIT QUERIES echo -ne '\nPlease Wait...\n' echo -e " ########################################### - DNS info for: ${DOMAIN} ########################################### " function WHOIS_REGISTRO_BR(){ CURLWHOISBR=$(curl -s https://registro.br/cgi-bin/whois/?qr=${DOMAIN}|grep -o 'negada') if [ "$CURLWHOISBR" = "negada" ];then echo "http://www.webproxy.net/view?q=https://registro.br/cgi-bin/whois/?qr=${DOMAIN}" else echo "https://registro.br/cgi-bin/whois/?qr=${DOMAIN}" fi } function REGISTRO_BR(){ # rSEARCH=$(curl -H "charset=iso-8859-1" -s --data "qr=${DOMAIN}&botao=PESQUISAR" https://registro.br/cgi-bin/avail/|egrep -o 'disponível|já|início|similar|inválido'); # OLD 1.0 rSEARCH=$(curl -s https://registro.br/cgi-bin/avail/?qr=${DOMAIN}|egrep -o "disponível|já|início|similar|inválida"); if [ "${rSEARCH}" = "já" ];then rBR=$(echo -e "\n${OK} - ${DOMAIN} was registered on registro.br. [ Whois: `WHOIS_REGISTRO_BR` ].\n") elif [ "${rSEARCH}" = "disponível" ];then echo -e "\n${ATT} - ${DOMAIN} avaible for registration on registro.br.\n" exit elif [ "${rSEARCH}" = "início" ];then echo -e "\n${ATT} - ${DOMAIN} is waiting for liberation on registro.br.\n" exit elif [ "${rSEARCH}" = "similar" ];then echo -e "\n${ATT} - ${DOMAIN} is already registered under similar syntax.\n" exit elif [ "${rSEARCH}" = "negada" ];then echo -e "\n${FAIL} - Your IP was blocked on registro.br, cannot retrieve whois information. You can browser manualy in `WHOIS_REGISTRO_BR` .\n" elif [ "${rSEARCH}" = "inválida" ];then echo -e "\n${FAIL} - This domain ${DOMAIN} is invalid.\n" exit else echo -e "\n${FAIL} - Cannot retrieve whois information. You can browser manualy in `WHOIS_REGISTRO_BR` .\n" exit fi } function INTERNATION_DOMAIN(){ rINTER=$(curl -s http://nic.com/whois?domain=${DOMAIN}|grep -o "is not in the whois database") if [ "${rINTER}" == "is not in the whois database" ]; then echo -e "\n${ATT} - ${DOMAIN} not registered, exiting.\n"; exit; else rINT=$(echo -e "\n${OK} - ${DOMAIN} registered. [ Whois: http://www.whois.com/whois/$DOMAIN ]") fi } ## TDL CHECK cDOMAIN=$(echo ${DOMAIN} | grep . | cut -d. -f1) if [ "${DOMAIN}" = "${cDOMAIN}.com.br" ];then REGISTRO_BR elif [ "${DOMAIN}" = "${cDOMAIN}.es" ]; then echo "Spanish Domain doens't have Whois database." else INTERNATION_DOMAIN fi echo -ne '\nRNS - #### (10%)\r' ## GET ROOT SERVER ROOTS=$(dig DS +additional $DOMAIN | grep SOA | awk '{print $5}' | sort -dbf) ## GET FIST NAMESERVER SRV=$(dig CNAME +noadditional +noquestion +nocomments +nocmd +nostats +norec $DOMAIN. @$ROOTS | grep -m1 NS | awk '{print $5}' | sort -dbf) ## GET IP FROM ROOTSERVER IPNS=$(dig A +noquestion +nocomments +nocmd +nostats +norec $DOMAIN. @$ROOTS | sort -dbf | grep A | awk '{print $5}') echo -ne 'NSR - ####### (20%)\r' ## CHECK ROOTSERVER NAMESERVER=$(dig CNAME +noadditional +noquestion +nocomments +nocmd +nostats +norec $DOMAIN. @$ROOTS | grep -v SOA | sort -dbf) echo -ne 'DNS - ########## (30%)\r' ## GET IP FROM WEBHOST IPDNS=$(dig NS +noquestion +nocomments +nocmd +nostats +norec $DOMAIN. @$SRV | sort -dbf | grep A | awk '{print $5}') ## CHECK DNS NS=$(dig NS +noadditional +noquestion +nocomments +nocmd +nostats +norec $DOMAIN @$SRV | sort -dbf) ## If NS fail from query "NS" we get directly from domain FAILNS=$(dig NS +nostats +nocmd +nocomments +noquestion $DOMAIN | grep NS) echo -ne 'WWW - ############ (40%)\r' ## CHECK WWW FROM DOMAIN A=$(dig WWW +short $DOMAIN @$SRV | sort -dbf) echo -ne 'MX - ############### (50%)\r' ## CHECK MX MX=$(dig -t MX +noall +answer $DOMAIN @$SRV | sort -dbf) echo -ne 'RVS - ################# (60%)\r' ## CHECK REVERSE REVERSE=$(dig -x $A +additional +short +norec) echo -ne 'SPF - ################### (70%)\r' ## CHECK SPF SPF=$(dig TXT +short $DOMAIN @$SRV | sort -dbf) echo -ne 'DKIM - #################### (80%)\r' ## CHECK DKIM DEFAULT DKIM=$(dig -ttxt default._domainkey.$DOMAIN @$SRV +short | grep -v spf1) echo -ne 'PING - ######################(90%)\r' ## CHECK PING vPING=$(ping -q -c 1 $DOMAIN >/dev/null) echo -ne "${OK} - ######################(100%)\n" ########################### ### DO NOT MODIFY BELOW ### ########################### ## NS QUERY function SHOW_NS(){ echo " -------------------------------------------| --=== NS ===-- -------------------------------------------| " if [ "${NAMESERVER}" = "no" ]; then # nic.br echo -e "${ATT} - Your IP has been blocked on registro.br, please try query again within 15 minutes.\n" elif [ "${NAMESERVER}" = "${ROOTS}" ] || [ -z "${NAMESERVER}" ]; then echo -e "${FAIL} - Unable to obtain DNS servers of your domain. Verify that the domain exists and/or is configured correctly.\n" else echo -e "${OK} - NS received from your nameservers listed as parents servers on root server ${verd}${ROOTS}${rese} are:\n\n$BAR\n\n"; paste <(echo "$NAMESERVER") <(echo "$IPNS"); echo -e "\n\n${OK}: The parent server ${verd}${ROOTS}${rese} has your nameservers listed. This is a must if you want to be found as anyone that does not know your DNS servers will first ask the parent nameservers." fi } ## NSR QUERY function SHOW_DNS(){ echo " -------------------------------------------| --=== NSR ===-- -------------------------------------------| " if [ -z "${NS}" ] || [ -z "${FAILNS}" ];then echo -e "${FAIL} - Unable to get the nameservers directly from the server hosting.\n\n" elif [ "${NS}" = "${NAMESERVER}" ] || [ ! "${FAILNS}" ]; then echo -e "${OK} - NS records got from your nameservers listed at the parent NS are:\n\n$BAR\n\n" paste <(echo "$NS") <(echo "$IPDNS"); else echo -e "${ATT} - Unable to get the nameservers directly from the hosting server, the following query is for NS directly on domain:\n\n$BAR\n\n" paste <(echo "$FAILNS") <(echo "$FAILIP"); echo -e "${FAIL} The following nameservers are listed at your nameservers as nameservers for your domain ${DOMAIN}, but are not listed at the parent nameservers at ${ROOTS} (see $RFC2181 ). You need to make sure that these nameservers are working. If they are not working ok, you may have problems!" fi } ## WWW QUERY function SHOW_WWW(){ echo " -------------------------------------------| --=== WWW ===-- -------------------------------------------| " if [ -z "${A}" ];then echo -e "${FAIL} - WWW value from does not seem to point to an IP.\n" else echo -e "${OK} - Domain points the value WWW for:\n\n${A}\n" fi } ## PING QUERY function SHOW_PING(){ if ! ${vPING};then echo -e "${FAIL} - Domain did not answer to ping.\n" elif [ "${vPING}" = "${A}" ]; then echo -e "${OK} - Domain is getting a return ping which answers to the same DNS server.\n" else echo -e "${OK} - Domain had response from ping to the IP:\n\n${A}" fi } ## MX QUERY function SHOW_MX(){ echo " -------------------------------------------| --=== MX ===-- -------------------------------------------| " if [ -z "${MX}" ];then echo -e "${ATT} - Domain has no MX entry registered.\n" else echo -e "${OK} - Domain points the MX to:\n\n$MXBAR\n\n${MX}\n" fi } ## REVERSE QUERY function SHOW_REVERSE(){ if [ -z "${REVERSE}" ];then echo -e "${ATT} - No reverse DNS (PTR) entries for ${A}. You should contact your ISP and ask him to add a PTR record for your ips.\n" else echo -e "${OK} - Reverse DNS (PTR) found for: \n\n${A} -> ${REVERSE}\n" fi } ## SPF QUERY function SHOW_SPF(){ if [ -z "${SPF}" ] || [ "${SPF}" = "'TXT'" ]; then echo -e "${FAIL} - There are no registered SPF values.\n" else echo -e "${OK} - The SPF registered is:\n\n${SPF}" fi } ## DKIM QUERY function SHOW_DKIM() { echo " -------------------------------------------| --=== DKIM ===-- -------------------------------------------| " if [ -z "${DKIM}" ];then echo -e "${ATT} - Default DKIM is not registered.\n" else echo -e "${OK} - Default DKIM registered for domain is:\n\n${DKIM}\n\m" fi } while getopts "handwpmrkfsbi" opt; do case ${opt} in h) SHOW_HELP ;; a) echo $rBR echo $rINT SHOW_NS SHOW_DNS SHOW_WWW SHOW_PING SHOW_MX SHOW_REVERSE SHOW_SPF SHOW_DKIM ;; n) SHOW_NS ;; d) SHOW_DNS ;; w) SHOW_WWW ;; p) SHOW_PING ;; m) SHOW_MX ;; r) SHOW_REVERSE ;; f) SHOW_SPF ;; k) SHOW_DKIM ;; b) echo $rBR ;; i) echo $rINT ;; h) SHOW_HELP ;; s) echo "Query on $DATE for $DOMAIN" >> $DOMAIN.txt && for SAVE in SHOW_NS SHOW_DNS SHOW_WWW SHOW_PING SHOW_MX SHOW_REVERSE SHOW_SPF SHOW_DKIM; do ${SAVE} >> ${DOMAIN}.txt;done ; echo -e "Your file was saved on `pwd`/$DOMAIN.txt\n"; ;; \? ) echo "Invalid option: - $opt" >&2 ;; : ) echo "Missing argument - $opt" >&2; exit 1;; * ) echo "Option not implemented: - $opt" >&2; exit 1;; esac done shift $(($OPTIND - 1)) exit
Script para Gerenciamento de Pacotes no Slackware
Calculando tempo para reportar relatórios ou as famosas log`s.
Gerenciar usuários do OpenLDAP com Sistema ZIMBRA
Verificar e efetua o download da nova versão do antivirus McAfee
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)