IP Adressen im Netzwerk auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
FoxDie2888
User
Beiträge: 1
Registriert: Samstag 14. Mai 2011, 08:12

Guten Morgen,

folgendes Problem habe ich: ich möchte in einem Netzwerk mit mehreren Nutzern nur die IP Adressen angezeigt bekommen. Diese dann gelistet bekommen. Ich denke das ist nicht so ein großes Problem leider weiß ich nicht wie ich das realisieren soll. grüße
ruzima
User
Beiträge: 4
Registriert: Montag 6. Juni 2011, 14:12

Hallo,

möchtest du einen Netzwerscanner erstellen oder sollen sich die Benutzer melden?

Beim ersten kannst du z.B: deine IP Range mit Pings durchprobieren.
Im 2. Fall kannst du z.B: einen Broadcast senden, auf den die Mitarbeiter-PCs antworten.

Es kommt auf den Einsatzzweck an. Vielleicht kannst du dein Projekt etwas näher beschreiben.

mfg Manfred
LivingOn
User
Beiträge: 33
Registriert: Montag 11. August 2008, 07:53

Die folgende Lösung benötigt scapy und Root-Rechte, läuft dann aber recht gut ;-)
(die IP-Range muss natürlich angepasst werden!)

Code: Alles auswählen

from scapy.all import arping

class Arping(object):
    
    def __init__(self, iprange):
        self._iprange = iprange
        
    def getOnlineIps(self):
        (online, offline) = arping(self._iprange, verbose=False)
        return [ ether.getfieldval("pdst") for (ether, dummy) in online ]

if __name__ == "__main__":
    arp = Arping("192.168.34.0/24")
    print(arp.getOnlineIps())
lunar

@LivingOn: ARP-Auflösung funktioniert nur bis zum ersten Router im Netzwerk.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lunar hat geschrieben:@LivingOn: ARP-Auflösung funktioniert nur bis zum ersten Router im Netzwerk.
Und bei VLANs kann es auch schon an einem Switch hängen bleiben.
LivingOn
User
Beiträge: 33
Registriert: Montag 11. August 2008, 07:53

FoxDie2888 hat geschrieben:ich möchte in einem Netzwerk mit mehreren Nutzern nur die IP Adressen angezeigt bekommen
Bei Netzwerk bin ich von LAN ausgegangen, da funktioniert ARP recht gut. Im WAN wird es schwieriger...da wäre es hilfreich die betreffenden IPs der Freunde zu kennen.
Vielleicht wäre ja eine Lösung mittels XMPP was für euch. Jeder startet wenn er Online geht eine kleines Script, welches sich bei einen zentralen Jabber-Server anmeldet und seine IP den anderen bekannt gibt. Das sollte normalerweise auch über Netzgrenzen problemlos funktionieren.

@/me
ja bei VLAN funktioniert ARP auch nicht, sind halt getrennte Teilnetze.
lunar

@LivingOn: Trotzdem kann man den OP darauf hinweisen, dass ARP nicht über Netzgrenzen hinweg auflöst, damit der OP nicht viel Zeit mit sinnlosen Versuchen verschwenden muss, für den Fall, dass es eben doch kein LAN ist.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

wie wäre es nmap per subprocess aufrufen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
LivingOn
User
Beiträge: 33
Registriert: Montag 11. August 2008, 07:53

@lunar Du hast natürlich vollkommen Recht!

Da mir bei den teilweise recht kurzen Problembeschreibungen häufig nicht immer ganz klar ist, was der Fragesteller nun wirklich möchte, sollte man allumfassend antworten. Leider fühle ich mich hierzu nicht immer in der Lage (weil ich die Frage falsch verstanden habe, mir die Dimension einer Antwort nicht bewußt ist oder einfach die Zeit fehlt). Ich denke ich lese zukünftig hier nur mit und gleiche meine Ideen mit den möglichen Vorschlägen die hier gemacht werden ab. Mir wird es sicherlich weiterhelfen, ob es Euch etwas bringt, weiß ich nicht. Sorry für die Polemik.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Eine High-Level-Lösung könnte auch Zeroconf sein, so dass man gleich schaut welche Services in Netzwerk verfügbar sind.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
grom
User
Beiträge: 7
Registriert: Freitag 1. November 2019, 09:04

hallo zusammen,

ich möchte im Netzwerk anhand von MAC adressen die IP-Adressen auslesen.
Ein Teil habe ich bereits

Code: Alles auswählen

import os
command  = "arp -a | find \"m-a-c-a-d-r-e-s-s-e\""
os.system(command)
wie kann man den Rückgabewert von os.system(command) weiter verarbeiten oder geht es nur mit subprocess? ich möchte anschließend mit regular expression nach der IP-Adresse suchen.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Ja, das macht man mit dem subprocess-Modul. Da gibt es entsprechende Methoden, um an die Ausgabe zu kommen. Von der Verwendung von os.system wird heute oft abgeraten.
grom
User
Beiträge: 7
Registriert: Freitag 1. November 2019, 09:04

Danke!
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich ist `find` nicht richtig und das Pipe kann man mit subprocess nicht machen, die Filterung würde man auch direkt in Python machen.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@grom: Das ist eher nicht der Weg den man gehen sollte. Irgendwelche Ausgaben von externen Werkzeugen parsen die nicht wirklich dafür vorgesehen sind, sollte man nur machen, wenn es keine ordentliche Lösung gibt. In diesem Fall beispielsweise `python_arptable`:

Code: Alles auswählen

#!/usr/bin/env python3
from python_arptable import get_arp_table


def main():
    mac_address = "70:de:f9:67:d5:e4"
    
    for entry in get_arp_table():
        if entry["HW address"] == mac_address:
            print(f"MAC {mac_address} -> IP {entry['IP address']}")
            break
    else:
        print(f"Keine IP zu {mac_address} gefunden.")
    

if __name__ == "__main__":
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
grom
User
Beiträge: 7
Registriert: Freitag 1. November 2019, 09:04

__blackjack__ hat geschrieben: Montag 20. Juli 2020, 14:09 @grom: Das ist eher nicht der Weg den man gehen sollte. Irgendwelche Ausgaben von externen Werkzeugen parsen die nicht wirklich dafür vorgesehen sind, sollte man nur machen, wenn es keine ordentliche Lösung gibt. In diesem Fall beispielsweise `python_arptable`:

Code: Alles auswählen

#!/usr/bin/env python3
from python_arptable import get_arp_table


def main():
    mac_address = "70:de:f9:67:d5:e4"
    
    for entry in get_arp_table():
        if entry["HW address"] == mac_address:
            print(f"MAC {mac_address} -> IP {entry['IP address']}")
            break
    else:
        print(f"Keine IP zu {mac_address} gefunden.")
    

if __name__ == "__main__":
    main()
Danke __blackjack__
Antworten