MAC-Adresse IP über Netzwerk

Ich hoffe, Sie sind alle gut.

Frage ich mich, ob Sie mir helfen könnte oder mich in die richtige Richtung. Ich arbeite derzeit an einem Projekt, das dreht sich um das Netzwerk-management. Wegen der starken zeitlichen Einschränkungen, wo möglich bin ich mit opensource-code. Das Problem das ich habe ist, dass ein Teil des Projekts erfordert es, dass ich in der Lage sein zu erfassen, die MAC-Adressen aller Geräte, die mit dem Netzwerk verbunden sind.

Mein wissen über Netzwerk-orientierter Programmierung ist begrenzt, da ich gearbeitet habe, auch in anderen Bereichen des software-Engineerings für die letzten 4 Jahre. Der Ansatz, den ich genommen habe ist die Verwendung von nmap als Grundlage, um die ip-Adresse und andere Informationen, die ich brauche. Die MAC-Adresse ist nicht enthalten in der nmap-out-put-und von dem, was ich gelesen habe, scheint es ein bisschen flakey. (ich könnte falsch sein).

Deshalb habe ich versucht, dies in einem zwei-Stufen-Ansatz, Erstens bekomme ich die Daten, darunter ip-Adresse, von nmap, welches einwandfrei funktioniert. Mein Nächster Schritt und das bit ich bin mir Schwierigkeiten mit ist ich die ping die ip-Adresse (von meinem python-Programm), die funktioniert. Aber wie bekomme ich die MAC-Adresse aus der IP-Adresse? Anfänglich dachte ich, die ping-ip und ergreifen Sie die MAC im ARP aber ich denke das wird nur funktionieren, wenn die IP-Adresse im selben Subnetz. das problem zusammengesetzte, über den Einsatz, es könnte bis zu 5000 Computer im Netzwerk protokolliert werden muss. Um Ihnen zu zeigen meine python-ping-Ansatz ist dies der code:

import pdb, os
import subprocess
import re
from subprocess import Popen, PIPE

# This will only work within the netmask of the machine the program is running on cross router MACs will be lost
ip ="192.168.0.4"

#PING to place target into system's ARP cache 
process = subprocess.Popen(["ping", "-c","4", ip], stdout=subprocess.PIPE)
process.wait()

result = process.stdout.read()
print(result)

#MAC address from IP
pid = Popen(["arp", "-n", ip], stdout=PIPE)
s = pid.communicate()[0]

# [a-fA-F0-9] = find any character A-F, upper and lower case, as well as any number
# [a-fA-F0-9]{2} = find that twice in a row
# [a-fA-F0-9]{2}[:|\-] = followed by either a ?:? or a ?-? character (the backslash escapes the hyphen, since the  # hyphen itself is a valid metacharacter for that type of expression; this tells the regex to look for the hyphen character, and ignore its role as an operator in this piece of the expression)
# [a-fA-F0-9]{2}[:|\-]? = make that final ?:? or ?-? character optional; since the last pair of characters won't be followed by anything, and we want them to be included, too; that's a chunk of 2 or 3 characters, so far
# ([a-fA-F0-9]{2}[:|\-]?){6} = find this type of chunk 6 times in a row

mac = re.search(r"([a-fA-F0-9]{2}[:|\-]?){6}", s).groups()[0] #LINUX VERSION ARP
mac = re.search(r"(([a-f\d]{1,2}\:){5}[a-f\d]{1,2})", s).groups()[0] #MAC VERSION ARP
print(mac)

Ich habe mir für einige Informationen, aber was ich gefunden habe, scheint ein bisschen vage. Falls Sie wissen irgendwelche Ideen oder Wege der Forschung, dass kann mir helfen, ich wäre dankbar

Cheers

Chris

  • Ich würde gerne eines besseren belehrt, aber ich bezweifle, dass Sie werde in der Lage sein zu bekommen MAC-Adressen, die in anderen Subnetzen.
  • ich Laufe ur obige code aber immer Fehler...Traceback (most recent call last): File "Get_MacAddress_from_ip.py", line 26, in <module> mac = re.search(r"([a-fA-F0-9]{2}[:|\-]?){6}", s).groups()[0] AttributeError: 'NoneType' object has no attribute 'groups'
InformationsquelleAutor Kraken18 | 2011-03-02
Schreibe einen Kommentar