Scanner de rede em Python
Publicado por ROBISON PEREIRA MACHADO (última atualização em 28/05/2012)
[ Hits: 18.554 ]
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()
verifySite - um verificador de sites
Importar múltiplos hosts ZABBIX
B.S.A.N.S. - Break Security - Automated Network Scanner [PARTE 1]
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (4)
Conky, alerta de temperatura alta (11)









