Scanner de rede em Python
Publicado por ROBISON PEREIRA MACHADO (última atualização em 28/05/2012)
[ Hits: 18.555 ]
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()
Envio de comandos por ssh sem troca de chaves a múltiplos servidores
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
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
Conky, alerta de temperatura alta (12)
De volta para o futuro - ou melhor, para o presente (parte 2) (2)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (7)









