Untitled
user_3431143
plain_text
3 years ago
2.9 kB
6
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...