1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import scapy.all as scapy import socket import netifaces import threading def get_ip_and_mac(ip): """Obtiene la dirección MAC del dispositivo dado su IP.""" arp_request = scapy.ARP(pdst=ip) broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff") arp_request_broadcast = broadcast/arp_request answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0] for element in answered_list: return element[1].psrc, element[1].hwsrc return None, None def scan(ip_range): """Escanea el rango de IPs dado.""" arp_request = scapy.ARP(pdst=ip_range) broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff") arp_request_broadcast = broadcast/arp_request answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0] devices = [] for element in answered_list: devices.append({'ip': element[1].psrc, 'mac': element[1].hwsrc}) return devices def scan_ports(ip): """Escanea puertos abiertos en una IP dada.""" open_ports = [] for port in range(1, 1025): # Escaneo de puertos del 1 al 1024 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) result = sock.connect_ex((ip, port)) if result == 0: open_ports.append(port) sock.close() return open_ports def print_results(devices): """Imprime los resultados del escaneo.""" for device in devices: ip = device['ip'] mac = device['mac'] ports = scan_ports(ip) print(f"IP: {ip}, MAC: {mac}, Open Ports: {ports}") def main(): # Obtén la interfaz de red iface = netifaces.gateways()['default'][netifaces.AF_INET][1] # Obtén la red en base a la interfaz ip = netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr'] netmask = netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['netmask'] ip_base = '.'.join(ip.split('.')[:3]) + '.' # Escanea el rango de IPs ip_range = ip_base + '1/24' # Cambia /24 según tu red print(f"Scanning network {ip_range}...") devices = scan(ip_range) print("Scanning results:") print_results(devices) if __name__ == "__main__": main() |