Varredura de PING Utilizando o Python
Uma varredura de PING, conhecida como varredura ICMP, é uma técnica muito utilizada na TI para o diagnóstico, determinando quais endereços IP estão em uso dentro de uma rede, sendo eles normalmente computadores ou servidores. Neste material, explico melhor o que é uma varredura de PING e disponibilizo um script em Python com essa finalidade.
[ Hits: 13.859 ]
Por: Diego Mendes Rodrigues em 09/11/2020 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/
""" Script para realizar a verificação se IPs, ou Hosts, estão respondendo através do utilitário PING. O ping é um utilitário que usa o protocolo ICMP para testar a conectividade entre equipamentos, sendo ele um comando disponível praticamente em todos os sistemas operacionais atuais - Diego Mendes Rodrigues """ import socket from subprocess import Popen, DEVNULL def verificar_rede(ips_da_rede='192.168.0.%d', inicial=1, final=254, exibir_apenas_ativos=True): """Verificar uma rede/subrede :param ips_da_rede: IPs da rede, no formato '192.168.0.%d' :param inicial: Número inicial da rede/subrede, exemplo = 1 :param final: Número final da rede/subrede, exemplo = 254 :param exibir_apenas_ativos: True caso sejam impressos no terminal apenas os IPs ativos via PING :return: True caso os testes tenham sido realizados, False caso contrário """ # Validação if len(ips_da_rede) <= 0 or inicial < 1 or final < 2 or final > 254 or not isinstance(exibir_apenas_ativos, bool): print('Todos os parâmetros devem ser informados de forma correta') return False # ip -> processo p = {} # Realizando a varredura for n in range(inicial, final + 1): ip = ips_da_rede % n p = Popen(['ping', '-n', '1', '-w', '5', ip], stdout=DEVNULL) return __verificar(p, exibir_apenas_ativos) def verificar_hosts(hosts_verificados, exibir_apenas_ativos=True): """Verificar os hosts ao invés de IPs, sendo que os hosts serão convertidos para IPs :param hosts_verificados: Lista com os hosts que serão verificados, exemplo = ['www.debian.org', 'www.ubuntu.com'] :param exibir_apenas_ativos: True caso sejam impressos no terminal apenas os IPs dos hosts ativos via PING :return: True caso os testes tenham sido realizados, False caso contrário """ # Validação if len(hosts_verificados) <= 0 or not isinstance(exibir_apenas_ativos, bool): print('Todos os parâmetros devem ser informados de forma correta') return False ips = for host in hosts_verificados: try: ip_do_host = socket.gethostbyname(host) ips.append(ip_do_host) except Exception as e: ips.append(f'Erro ao resolver o IP do host \'{host}\': {e}') pass # ip -> processo p = {} for ip in ips: if ip != 'Erro': p = Popen(['ping', '-n', '1', '-w', '5', ip], stdout=DEVNULL) else: print(f'{ip}') return __verificar(p, exibir_apenas_ativos) def __verificar(p_itens, exibir_apenas_ativos=True): """Função Interna que realiza a verificação dos IPs utilizando o PING :param p_itens: Itens que serão verificados :param exibir_apenas_ativos: exibir_apenas_ativos: True caso sejam impressos no terminal apenas os IPs ativos :return: True caso os testes tenham sido realizados, False caso contrário """ # Validação if len(p_itens) <= 0 or not isinstance(exibir_apenas_ativos, bool): print('Todos os parâmetros devem ser informados de forma correta') return False while p_itens: for ip, proc in p_itens.items(): if proc.poll() is not None: del p_itens if proc.returncode == 0: print('%s ativo' % ip) elif proc.returncode == 1: if not exibir_apenas_ativos: print('%s sem resposta' % ip) else: print('%s erro' % ip) break return True def main(): """Função principal da aplicação que realiza a verificação dos IPs/Hosts utilizando o PING """ # Verificar a rede 192.168.0.0/24 print('VERIFICAR A REDE 192.168.0.0/24') if not verificar_rede('192.168.0.%d', 1, 254, True): print('Falha ao verificar a rede 192.168.0.0/24') # Verificar diversos hosts print('\nVERIFICAR DIVERSOS HOSTS') hosts_para_verificar = ['www.debian.org', 'www.ubuntu.com', 'www.vivaolinux.com.br', 'urlerrada.io'] if not verificar_hosts(hosts_para_verificar, True): print('Falha ao verificar os hosts') if __name__ == "__main__": """Execução automática pelo terminal """ main()
Como forçar alteração de senha de usuário no próximo login no Linux
Instalar o Nagios 4 no Ubuntu ou Debian
Adicionar mensagens iniciais no terminal nas sessões de sudo
Instalar o TeamViewer no Ubuntu/Debian
Instalando MariaDB no Debian e Ubuntu
PEP 8 - Guia de estilo para código Python
Como isolar seus projetos Python com virtualenv (ambiente virtual)
Como baixar vídeos do Facebook via terminal
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
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (2)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta