Scanner de rede em Python
Publicado por ROBISON PEREIRA MACHADO (última atualização em 28/05/2012)
[ Hits: 15.514 ]
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()
Shell reverso em Python - cliente e servidor
auth_ig.py: Script para autenticação do IG
Instalação do Ambiente .NET (#C) no Slackware 15.0
Kali On The Box - Colocando o Kali para rodar no Raspberry Pi
Como contribuir com a atualização de pacotes no Void Linux
Colocar dispositivo móvel Samsung em modo Download pela linha de comando
Instalando Slackware com btrfs
Ajuda com Automatização de Backup do PostgreSQL 9.6 (3)
Debian 11 bullseye não tem terminal transparente (2)
System Halted - ao desligar o computador (7)
Instalação Fedora 36 com "\home&q... separada: Questão sobre Sist... (5)