Определение подключенного маршрутизатора устройства в локальной сети с помощью Python - PullRequest
0 голосов
/ 21 апреля 2020

Итак, у меня есть 4 маршрутизатора и 1 P C с 4 устройствами, которые подключаются к ближайшему маршрутизатору. Итак, я хочу написать скрипт в python, который работает на P C (Windows) и что P C подключен к 1 основному маршрутизатору, а этот маршрутизатор подключен к трем другим маршрутизаторам.

1 P C -> Основной маршрутизатор (WiFi включен) -> 3 других маршрутизатора (WiFi включен)

Браслет (устройство с поддержкой WiFi) подключится до ближайшего WiFi роутера, доступного из 4 роутеров. Я хочу определить, к какому маршрутизатору подключен этот браслет через скрипт Python. Я также могу сделать IP-адрес браслета Stati c, но я надеялся идентифицировать их по адресу MA C. При необходимости я могу отредактировать конфигурацию маршрутизаторов через веб-страницу.

При необходимости попросите разъяснений.

Надеюсь вскоре услышать.

Edit_1: не путать со мной, спрашивая весь код, я нахожусь в поиске правильных функций, которые можно использовать для этого процесса, и каковы возможные конфигурации, на которые я должен установить маршрутизатор.

Edit_2: Ниже приведен пример кода что позволяет пинговать IP-адреса. Итак, как я могу получить их MA C адрес (функцию), а также пинговать другие точки доступа? Я могу изменить свойства маршрутизаторов.

import socket
from datetime import datetime

net = input("Enter the IP address: ") #e.g. is 192.168.18.1
net1 = net.split('.')
a = '.'

net2 = net1[0] + a + net1[1] + a + net1[2] + a
st1 = int(input("Enter the Starting Number: ")) #e.g. 1
en1 = int(input("Enter the Last Number: ")) #e.g. 10
en1 = en1 + 1

t1 = datetime.now()

def scan(addr):
   s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   socket.setdefaulttimeout(1)
   result = s.connect_ex((addr,135))
   if result == 0:
      return 1
   else :
      return 0

def run1():
   for ip in range(st1,en1):
      addr = net2 + str(ip)
      if (scan(addr)):
         print (addr , "is live")

run1()
t2 = datetime.now()
total = t2 - t1
print ("Scanning completed in: " , total)

Edit_3: Это также ищет MA C Address.

from scapy.all import ARP, Ether, srp

target_ip = "192.168.18.1/24"
# IP Address for the destination
# create ARP packet
arp = ARP(pdst=target_ip)
# create the Ether broadcast packet
# ff:ff:ff:ff:ff:ff MAC address indicates broadcasting
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
# stack them
packet = ether/arp

result = srp(packet, timeout=3, verbose=0)[0]

# a list of clients, we will fill this in the upcoming loop
clients = []

for sent, received in result:
    # for each response, append ip and mac address to `clients` list
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})


# print clients
print("Available devices in the network:")
print("IP" + " "*18+"MAC")
for client in clients:
    print("{:16}    {}".format(client['ip'], client['mac']))

    if (client['mac'] == "f4:f5:e8:37:67:92"):  #Testing mac address filter
        print("Success")
...