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: 14.153 ]
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()
Instalar o TeamViewer no Ubuntu/Debian
Nmap - Comandos úteis para um administrador de sistemas Linux
Instalar o Go (Golang) no Debian e Ubuntu
Adicionar mensagens iniciais no terminal nas sessões de sudo
Instalando Adicionais para Convidados para VirtualBox no Debian, Linux Mint e Ubuntu
Gerar Códigos QRCode com Python
Crie um bot para Telegram e gerencie a escala de plantonistas
Python para pesquisadores: material didático
Redes definidas por Software com Mininet e POX - Criando meu primeiro Controlador
Criando um leitor de RSS com Python
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Separar trafego da VPN da VPS (0)
Formatando cartão de memoria que nao formata[AJUDA] (17)
warsaw parou de funcionar após atualização do sistema (solução) (0)
Desde que seja DDR3, posso colocar qualquer memória? [RESOLVIDO] (6)