Scanner de rede em Python
Publicado por ROBISON PEREIRA MACHADO (última atualização em 28/05/2012)
[ Hits: 17.942 ]
Homepage: http://robisonpm.blogspot.com/
Este script mostra quantos equipamentos estão online na rede, seus IPs e MACs e por fim, o número total.
Primeiro forneça um IP completo, exemplo: 192.168.0.1
Depois forneça o último octeto a ser escaneado, exemplo: 254
Ele usa threads e em meus testes demora cerca de 6 segundos para escanear minha rede, sendo que mando ele escanear do IP 1 ao 254.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __doc__=""" # SCANNER DE REDE PYTHON 3 - POR ROBISON PEREIRA MACHADO # # FORNEÇA O PRIMEIRO IP COMPLETO (EX: 192.168.0.1) # DEPOIS FORNEÇA O IP FINAL, APENAS O ÚLTIMO OCTETO (EX: 254) # # SE FORNECERMOS O IP 192.168.0.1 E DEPOIS O VALOR 254 # eLE IRÁ ESCANEAR DO IP FINAL 1 ATÉ O 254 # NO FINAL MOSTRARÁ OS IP's E OS MAC's QUE ESTÃO CONECTADOS # E DIRÁ O NÚMERO DE EQUIPAMENTOS ONLINE NA REDE """ import sys import subprocess import os import subprocess import time import threading from threading import Thread class NetworkScanner(object): ips_online=[] threads=[] def scannear_rede(self, ip_inicial, ip_final): ip_base=subprocess.getoutput("echo %s 2> /dev/null | egrep -o \"([0-9]{1,3}\.){3}\"" % ip_inicial) ip_inicial=int(subprocess.getoutput("echo %s 2> /dev/null | egrep -o \"([0-9]{1,3})$\"" % ip_inicial)) ip_final=int(ip_final) while(ip_inicial <= ip_final): ip=ip_base+str(ip_inicial) self.threads.append(threading.Thread(target=self.ping, args=(ip,)).start()) ip_inicial += 1 def ping(self, ip): time.sleep(0.2) ping = os.system('ping -c 1 %s > /dev/null 2> /dev/null' % ip) if(ping==0): mac_adress=subprocess.getoutput("arp -a %s 2> /dev/null | egrep -o \"([a-Z,0-9]{2}\:){5}[a-Z,0-9]{2}\"" % ip) self.ips_online.append((ip,mac_adress,)) while(len(self.threads)==0): time.sleep(0.5) self.threads.pop() print("\n\n*****************\nTHREADS EXISTENTES >> %s\n*****************\n" % len(self.threads)) return def main(): ip_inicial = input("Digite o IP inicial (completo): ") ip_final = input("Digite o IP final (apenas o último octeto. Ex: 254): ") scan = NetworkScanner() scan.scannear_rede(ip_inicial, ip_final) while(len(scan.threads)>0): time.sleep(0.5) #print("\n\n*****************\nTHREADS EXISTENTES >> %s\n*****************\n" % len(scan.threads)) scan.ips_online.sort() for pc in scan.ips_online: print("PC ONLINE >> IP=%s - MAC=%s" % (pc[0], pc[1])) print("\nExistem %s dispositivos online neste momento\n\n" % len(scan.ips_online)) return 0 if __name__ == '__main__': main()
Ligando máquina pela rede usando Python
B.S.A.N.S. - Break Security - Automated Network Scanner [PARTE 1]
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
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
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)