Untitled
user_3431143
plain_text
2 years ago
2.9 kB
3
Indexable
import scapy.all as scapy import requests import json import time import os.path import netifaces WEBHOOK_URL = "https://your-webhook-url.com" JSON_FILE = "devices.json" def get_network_info(): interfaces = netifaces.interfaces() for interface in interfaces: try: iface_data = netifaces.ifaddresses(interface) if iface_data.get(netifaces.AF_INET): ip_address = iface_data[netifaces.AF_INET][0]['addr'] netmask = iface_data[netifaces.AF_INET][0]['netmask'] network = netifaces.cidr_to_netmask(netmask) return ip_address, network except ValueError: pass return None, None def get_ip_range(ip_address, network): ip_list = [int(i) for i in ip_address.split('.')] net_list = [int(i) for i in network.split('.')] start_ip = [str(ip_list[i] & net_list[i]) for i in range(4)] end_ip = [str((ip_list[i] & net_list[i]) | (~net_list[i] & 255)) for i in range(4)] return '.'.join(start_ip), '.'.join(end_ip) def get_mac(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] return answered_list[0][1].hwsrc if answered_list else None def scan_network(): devices = [] ip_address, network = get_network_info() if not ip_address: print("Could not determine network information.") return devices start_ip, end_ip = get_ip_range(ip_address, network) ip_range = f"{start_ip}-{end_ip}" 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] for item in answered_list: mac_address = item[1].hwsrc ip_address = item[1].psrc device = {"ip": ip_address, "mac": mac_address, "status": "online"} devices.append(device) return devices def send_webhook(devices): data = {"devices": devices} headers = {'Content-type': 'application/json'} response = requests.post(WEBHOOK_URL, data=json.dumps(data), headers=headers) if response.status_code == 200: print("Webhook sent successfully!") else: print(f"Failed to send webhook. Status code: {response.status_code}") def save_devices(devices): with open(JSON_FILE, 'w') as f: json.dump(devices, f) def load_devices(): devices = [] if os.path.isfile(JSON_FILE): with open(JSON_FILE, 'r') as f: try: devices = json.load(f) except json.JSONDecodeError: print(f"JSON file '{JSON_FILE}' is corrupt or empty.") return
Editor is loading...