├── .gitignore ├── README.md └── parsing_html.sh /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore UNIX backup files 2 | *~ 3 | *.swp 4 | *.log 5 | *.html 6 | *.txt 7 | *.php 8 | *.hosts 9 | *.ip 10 | *.ips 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Parsing HTML 2 | 3 | [![Bash-5.0.3](https://img.shields.io/badge/Bash-5.0.3-green)](https://www.gnu.org/software/bash/) 4 | 5 | Este script tem a funcionalidade de realizar parsing em páginas html, procurando por links e hosts ativos. 6 | 7 | ## Requisitos 8 | 9 | * Bash >= 5.0 10 | * AWK >= 4.2 11 | * Wget >= 1.20 12 | 13 | ## Funcionamento 14 | 15 | ```bash 16 | ./pasing_html.sh www.google.com 17 | ``` 18 | ou 19 | ```bash 20 | ./pasing_html.sh -f index.html 21 | ``` 22 | -------------------------------------------------------------------------------- /parsing_html.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ################################################################################ 4 | # Titulo : Parsing HTML # 5 | # Versao : 1.9 # 6 | # Data : 16/10/2019 # 7 | # Homepage : https://www.desecsecurity.com # 8 | # Tested on : MacOS/Linux # 9 | # -----------------------------------------------------------------------------# 10 | # Descrição: # 11 | # Esse programa tem a função de procurar todos os links que podem ser # 12 | # considerados uteis para analise, e verificar quais deles estão ativos. # 13 | # # 14 | ################################################################################ 15 | 16 | # ============================================================================== 17 | # Constantes 18 | # ============================================================================== 19 | 20 | # Constantes para facilitar a utilização das cores. 21 | RED='\033[31;1m' 22 | GREEN='\033[32;1m' 23 | YELLOW='\033[33;1m' 24 | RED_BLINK='\033[31;5;1m' 25 | END='\033[m' 26 | 27 | # Constantes criadas utilizando os valores dos argumentos 28 | # passados, para evitando a perda dos valores. 29 | ARG01="${1}" 30 | ARG02="${2}" 31 | 32 | # Constante utilizada para guadar a versão do programa. 33 | VERSION='1.9' 34 | 35 | # Função chamada quando cancelar o programa com [Ctrl]+[c] 36 | trap __Ctrl_c__ INT 37 | 38 | # ============================================================================== 39 | # Função chamada ao pressionar as teclas Ctrl+c 40 | # ============================================================================== 41 | 42 | __Ctrl_c__() { 43 | __Clear__ 44 | echo -e "\n${RED_BLINK}!!! Ação abortada !!!${END}\n\n" 45 | exit 1 46 | } 47 | 48 | # ============================================================================== 49 | # Banner do programa 50 | # ------------------------------------------------------------------------------ 51 | # Função responsável por apenas mostrar o banner do programa junto com algumas 52 | # opções básicas. 53 | # ============================================================================== 54 | 55 | __Banner__() { 56 | echo -e " 57 | ${YELLOW} 58 | ################################################################################ 59 | # # 60 | # PARSING HTML # 61 | # Desec Security # 62 | # Version ${VERSION} # 63 | # # 64 | ################################################################################ 65 | ${END} 66 | 67 | Usage : ${GREEN}${0}${END} [OPTION] [URL] 68 | Example : ${GREEN}${0}${END} www.site.com 69 | 70 | Try ${GREEN}${0} -h${END} for more options." 71 | } 72 | 73 | # ============================================================================== 74 | # Menu de ajuda 75 | # ------------------------------------------------------------------------------ 76 | # Função responsável por explicar para o usuário o propósito do programa e como 77 | # ele funciona, mostrando todas as suas opções. 78 | # ============================================================================== 79 | 80 | __Help__() { 81 | echo -e " 82 | NAME 83 | ${0} - Software para procura de links em páginas web. 84 | 85 | SYNOPSIS 86 | ${0} [Options] [URL] 87 | 88 | DESCRIPTION 89 | O ${0} é usado para procurar links em páginas web e verificar se existem 90 | hosts vivos. 91 | 92 | OPTIONS 93 | -h, --help 94 | Mostra o menu de ajuda. 95 | 96 | -v, --version 97 | Mostra a versão do programa. 98 | 99 | -f, --file 100 | Procura links no arquivo informado. 101 | Ex: ${0} -f file.txt" 102 | } 103 | 104 | # ============================================================================== 105 | # Verificação básica 106 | # ------------------------------------------------------------------------------ 107 | # Função responsável por verificar todos os requisitos básicos, para o 108 | # funcionamento do programa, como verificando se os programas e scripts de 109 | # terceiros estão instalados e se os argumentos foram passados corretamente. 110 | # ============================================================================== 111 | 112 | __Verification__() { 113 | # Verificando as dependências. 114 | if ! [[ -e /usr/bin/wget ]]; then 115 | echo -e "\nFaltando programa ${RED}wget${END} para funcionar.\n" 116 | exit 1 117 | elif ! [[ -e /usr/bin/host ]]; then 118 | echo -e "\nFaltando programa ${RED}host${END} para funcionar.\n" 119 | exit 1 120 | fi 121 | 122 | # Verificando se não foi passado argumentos. 123 | if [[ "${ARG01}" == "" ]]; then 124 | __Banner__ 125 | exit 1 126 | fi 127 | } 128 | 129 | # ============================================================================== 130 | # Limpando arquivos temporários 131 | # ------------------------------------------------------------------------------ 132 | # Função para apagar todos os arquivos temporários criados durante a execução 133 | # do programa. 134 | # ============================================================================== 135 | 136 | __Clear__() { 137 | rm -rf /tmp/"${ARG01}" &>/dev/null 138 | rm -rf /tmp/tempfile &>/dev/null 139 | } 140 | 141 | # ============================================================================== 142 | # Download da página 143 | # ------------------------------------------------------------------------------ 144 | # Função responsável por criar o diretório para amazenar o download da página 145 | # index do site, e arquivos que serão criados posteriomente. 146 | # ============================================================================== 147 | 148 | __Download__() { 149 | # É criado e utilizado um diretório em /tmp, para não sujar o sistema do 150 | # usuário. 151 | __Clear__ 152 | 153 | mkdir /tmp/"${ARG01}" && cd /tmp/"${ARG01}" 154 | 155 | echo -e "\n${GREEN}[+] Download do site...${END}\n\n" 156 | if wget -q -c --show-progress "${ARG01}" -O FILE;then 157 | echo -e "\n${GREEN}[+] Download completo!${END}\n\n" 158 | else 159 | echo -e "\n${RED}[+] Falha no download!${END}\n\n" 160 | exit 1 161 | fi 162 | } 163 | 164 | # ============================================================================== 165 | # Copiando arquivo da opção -f 166 | # ------------------------------------------------------------------------------ 167 | # Função responsável por verificar se o nome do arquivo foi informado e se ele 168 | # existe, caso exista será criado um diretório temporário em /tmp e copiar o 169 | # arquivo para lá, mudando o seu nome para FILE. 170 | # ============================================================================== 171 | 172 | __OpenFile__() { 173 | if [[ "${ARG02}" == "" ]]; then 174 | echo -e "\n${RED}!!! Necessário informar nome do arquivo !!!${END}\n" 175 | exit 1 176 | elif ! [[ -e "${ARG02}" ]]; then 177 | echo -e "\n${RED}!!! Arquivo não encontrado !!!${END}\n" 178 | exit 1 179 | fi 180 | 181 | __Clear__ 182 | 183 | mkdir /tmp/tempfile 184 | cp "${ARG02}" /tmp/tempfile/FILE 185 | cd /tmp/tempfile 186 | } 187 | 188 | # ============================================================================== 189 | # Filtrando links 190 | # ------------------------------------------------------------------------------ 191 | # Função responsável por capturar todos os links completos contidos na página 192 | # informada e salvalos no arquivo "links" 193 | # ============================================================================== 194 | 195 | __FindLinks__() { 196 | # Quebranco as linhas para melhorar a seleção dos links, onde 197 | # se encontram as palavras 'href' e 'action'. 198 | sed -i "s/ /\n/g" FILE 199 | grep -E "(href=|action=)" FILE > .tmp1 200 | 201 | # Capturando o conteudo entre aspas e apostrofos. 202 | grep -oh '"[^"]*"' .tmp1 > .tmp2 203 | grep -oh "'[^']*'" .tmp1 >> .tmp2 204 | 205 | # Removendo as aspas e apostrofos. 206 | sed -i 's/"//g' .tmp2 207 | sed -i "s/'//g" .tmp2 208 | 209 | # Captura apenas as linhas que contenham pontos, e remove as 210 | # semelhantes. 211 | grep "\." .tmp2 | sort -u > links 212 | } 213 | 214 | # ============================================================================== 215 | # Filtrando hosts 216 | # ------------------------------------------------------------------------------ 217 | # Função responsável por criar uma cópia do arquivo "links" gerado pela função 218 | # __FindLinks__, para quebrar as urls e selecionando todos os links simples 219 | # contidos no arquivo. 220 | # ============================================================================== 221 | 222 | __FindHosts__() { 223 | # Quebrando as URLs para facilitar a procurar de links no corpo da URL. 224 | cp links links2 225 | sed -i "s/?/\n/g 226 | s/\/\/\//\n\/\//g" links2 227 | 228 | # Utilizando expressões regulares para procurar os links simples. 229 | grep -oh "//[^/]*/" links2 > .tmp10 230 | grep -oh "//[^/]*" links2 >> .tmp10 231 | grep -oh "ww.*\.br" links2 >> .tmp10 232 | grep -oh "ww.*\.net" links2 >> .tmp10 233 | grep -oh "ww.*\.gov" links2 >> .tmp10 234 | grep -oh "ww.*\.org[^.]" links2 >> .tmp10 235 | grep -oh "ww.*\.com[^.]" links2 >> .tmp10 236 | 237 | # Removendo as barras e filtrando as linhas com pontos. 238 | sed -i "s/\///g" .tmp10 239 | grep "\." .tmp10 | sort -u > hosts 240 | } 241 | 242 | # ============================================================================== 243 | # Verificando e mostrando Hosts ativos 244 | # ============================================================================== 245 | 246 | __LiveHosts__() { 247 | echo -e "${YELLOW} 248 | ################################################################################ 249 | # Hosts ativos # 250 | ################################################################################ 251 | ${END}" 252 | 253 | # Como será uma das ultimas funções executadas, seu resultado será 254 | # mostrado na tela ao mesmo tempo. 255 | while read -r linha; do 256 | host "${linha}" 2>/dev/null | grep "has address" | awk '{print $4 "\t\t" $1}' 257 | done < hosts 258 | } 259 | 260 | # ============================================================================== 261 | # Mostrando links encontrados 262 | # ============================================================================== 263 | 264 | __ShowLinks__() { 265 | echo -e "${YELLOW} 266 | ################################################################################ 267 | # Links encontrados. # 268 | ################################################################################ 269 | ${END}" 270 | 271 | while read -r linha; do 272 | echo "${linha}" 273 | done < links 274 | } 275 | 276 | # ============================================================================== 277 | # Mostrando Hosts encontrados 278 | # ============================================================================== 279 | 280 | __ShowHosts__() { 281 | echo -e "${YELLOW} 282 | ################################################################################ 283 | # Hosts encontrados. # 284 | ################################################################################ 285 | ${END}" 286 | 287 | while read -r linha; do 288 | echo "${linha}" 289 | done < hosts 290 | } 291 | 292 | # ============================================================================== 293 | # Mostrando quantidade de links e Hosts encontrados. 294 | # ============================================================================== 295 | 296 | __ShowResume__() { 297 | echo -e " 298 | ${YELLOW}================================================================================${END} 299 | Found : 300 | $(wc -l links) 301 | $(wc -l hosts) 302 | ${YELLOW}================================================================================${END}" 303 | } 304 | 305 | # ============================================================================== 306 | # Função principal do programa 307 | # ============================================================================== 308 | 309 | __Main__() { 310 | __Verification__ 311 | 312 | case "${ARG01}" in 313 | "-v"|"--version") 314 | echo -e "\nVersion: ${VERSION}\n" 315 | exit 0 316 | ;; 317 | "-h"|"--help") 318 | __Help__ 319 | exit 0 320 | ;; 321 | "-f"|"--file") 322 | __OpenFile__ 323 | __FindLinks__ 324 | __ShowLinks__ 325 | __FindHosts__ 326 | __ShowHosts__ 327 | __LiveHosts__ 328 | __ShowResume__ 329 | __Clear__ 330 | ;; 331 | *) __Download__ 332 | __FindLinks__ 333 | __ShowLinks__ 334 | __FindHosts__ 335 | __ShowHosts__ 336 | __LiveHosts__ 337 | __ShowResume__ 338 | __Clear__ 339 | ;; 340 | esac 341 | } 342 | 343 | # ============================================================================== 344 | # Inicio do programa 345 | # ============================================================================== 346 | 347 | __Main__ 348 | --------------------------------------------------------------------------------