import scapy.all as scapy
import requests
import json
import time
import os.path
import socket
WEBHOOK_URL = "https://your-webhook-url.com"
JSON_FILE = "devices.json"
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 get_device_name(ip):
try:
hostname = socket.gethostbyaddr(ip)[0]
except socket.herror:
hostname = ""
return hostname
def scan_network():
devices = []
ip_range = "192.168.1.0/24" # Replace with your network IP range
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_name = get_device_name(ip_address)
device = {"ip": ip_address, "mac": mac_address, "name": device_name, "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 devices
def run():
while True:
devices = scan_network()
devices += load_devices()
send_webhook(devices)
save_devices(devices)
time.sleep(5)
run()