├── .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 | [](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 |
--------------------------------------------------------------------------------