Mittels Ping-Befehl Info bekommen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JohannesGolf
User
Beiträge: 34
Registriert: Montag 10. März 2014, 09:27

Hallo zusammen,

ich bräuchte eure Hilfe.
Ich soll für eine kleine Übung mittels des Ping Befehls verschiedene Informationen herausfinden (Unter anderem: IP(ist diese überhaupt vergeben), Name des Gerätes, Betriebssystem von anderen Rechner im Netzwerk)

Was für ein Modul ist dafür geeignet? Oder Was kann mir da weiter helfen?

Mein Code sieht bis jetzt so aus:
https://gist.github.com/JohannesGolf/46 ... d275c96ef9
Zuletzt geändert von JohannesGolf am Donnerstag 8. Mai 2014, 14:12, insgesamt 2-mal geändert.
BlackJack

@JohannesGolf: Statt `os.system()` sollte man das `subprocess`-Modul verwenden um externe Programme auszuführen. Neben den Nachteilen von `os.system()` die man dadurch vermeidet, gibt es die Möglichkeit den „return code” vom externen Programm direkt zu bekommen, ohne eine zusätzliche Shell als weiteren Prozess und Vermittler, *und* man kann auch die Textausgaben erhalten und auswerten.

Die Schleife ist ungünstig organisiert. Man sollte keinen Code wiederholen. Die IP sollte nur an *einer* Stelle erzeugt werden und nicht vor *und* innerhalb der Schleife. Da die Anzahl der Schleifendurchläufe vorher bekannt ist, ist ``while`` auch suboptimal. Bei einer ``for``-Schleife spart man sich das initialisieren der Schleifenvariable vor der Schleife und das aktualisieren am Schleifenende.

Das `socket`-Modul wird importiert, aber dann gar nicht verwendet‽
JohannesGolf
User
Beiträge: 34
Registriert: Montag 10. März 2014, 09:27

@ BlackJack:
Danke für die Hilfe. Die Schleife wurde abgeändert.
Aber ich hab immer noch kleine Probleme mit dem Namen des Endgerätes und dem Betriebsystem.


Die IP's bekomm ich schon hin, jetzt brauch ich "nur" noch den Namen, die MAC Adresse des Endgerätes, das Betriebssystem.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@JohannesGolf
Das OS ermittelst Du via `os.name`, bei allem anderen kann ich Dir nicht helfen, wobei ich nicht glaube, dass das mit Python-Batterien zu bewerkstelligen ist... :wink:

mutetella

EDIT: Hab' gerade das hier gelesen, vielleicht hilft's Dir ja...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ich würde ja in den Code von Projekten wie SATAN schauen, wie die es gemacht haben. Ähnliches müsste auch in Python umsetzbar sein.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@JohannesGolf: Den Namen gibt Ping ja aus, aber für MAC und insbesondere Betriebssystem ist das normale Ping nicht gedacht. Das Betriebssystem kann man auch nur raten anhand von bestimmten Mustern in der Kommunikation. ``nmap`` macht so etwas zum Beispiel. Damit bekommt man auch die MAC-Adresse. Dazu braucht der Prozess allerdings die nötigen Rechte um ”rohe Sockets” zu öffnen und selber IP-Pakete zusammen zu basteln. Beispielaufruf:

Code: Alles auswählen

$ sudo nmap -F -O --osscan-guess 10.0.0.22

Starting Nmap 5.21 ( http://nmap.org ) at 2014-05-09 11:57 CEST
Nmap scan report for xbmc-6ce5.local (10.0.0.22)
Host is up (0.0070s latency).
Not shown: 95 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
111/tcp open  rpcbind
139/tcp open  netbios-ssn
MAC Address: 80:1F:02:4B:6C:E5 (Unknown)
Device type: general purpose|specialized|firewall|webcam|WAP|printer
Running (JUST GUESSING) : Linux 2.6.X|2.4.X (92%), Crestron 2-Series (91%), Check Point embedded (90%), Check Point Linux 2.4.X (90%), AXIS Linux 2.6.X (89%), Linksys embedded (88%), Xerox embedded (88%), D-Link embedded (88%)
Aggressive OS guesses: Linux 2.6.22 (92%), Crestron XPanel control system (91%), Linux 2.6.19 - 2.6.31 (91%), Linux 2.6.24 (90%), Check Point SBox-200 firewall (90%), Check Point VPN-1 UTM appliance (90%), Linux 2.6.9 - 2.6.30 (90%), AXIS 211A Network Camera (Linux 2.6) (89%), AXIS 211A Network Camera (Linux 2.6.20) (89%), DD-WRT v23 - v24 (Linux 2.4.20 - 2.4.37) (89%)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.21%D=5/9%OT=21%CT=7%CU=35381%PV=Y%DS=1%DC=D%G=Y%M=801F02%TM=536
OS:CA6A7%P=i686-pc-linux-gnu)SEQ(SP=109%GCD=1%ISR=10B%TI=Z%CI=I%II=I%TS=7)O
OS:PS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O3=M5B4NNT11NW6%O4=M5B4ST11NW6%O5=M5B4S
OS:T11NW6%O6=M5B4ST11)WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)E
OS:CN(R=Y%DF=Y%T=40%W=3908%O=M5B4NNSNW6%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F
OS:=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5
OS:(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z
OS:%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=
OS:N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%
OS:CD=S)

Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.75 seconds
Wenn man die Daten in einem Programm weiterverarbeiten will, sollte man ``nmap`` aber besser sagen, dass ein strukturierteres Format für die Ausgabe verwendet werden soll. XML zum Beispiel. Da kann man dann mit der entsprechenden Bibliothek (`xml.etree.ElementTree` oder `lxml.etree`) relativ einfach auf die einzelnen Informationen zugreifen.

Oder man installiert sich das `nmap`-Modul. Das erledigt den Aufruf und parst das Ergebnis in eine verschachtelte Wörterbuch- und Listen-Datenstruktur:

Code: Alles auswählen

In [4]: ps.scan('10.0.0.22', arguments='-F -O --osscan-guess')
Out[4]: 
{'nmap': {'command_line': u'nmap -oX - -F -O --osscan-guess 10.0.0.22',
  'scaninfo': {u'tcp': {'method': u'syn',
    'services': u'7,9,13,21-23,25-26,37,53,79-81,88,106,110-111,113,119,135,139,143-144,179,199,389,427,443-445,465,513-515,543-544,548,554,587,631,646,873,990,993,995,1025-1029,1110,1433,1720,1723,1755,1900,2000-2001,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000-6001,6646,7070,8000,8008-8009,8080-8081,8443,8888,9100,9999-10000,32768,49152-49157'}},
  'scanstats': {'downhosts': u'0',
   'elapsed': u'11.78',
   'timestr': u'Fri May  9 12:24:15 2014',
   'totalhosts': u'1',
   'uphosts': u'1'}},
 'scan': {u'10.0.0.22': {'fingerprint': u'OS:SCAN(V=5.21%D=5/9%OT=21%CT=7%CU=37913%PV=Y%DS=1%DC=D%G=Y%M=801F02%TM=536\nOS:CACCF%P=i686-pc-linux-gnu)SEQ(SP=106%GCD=1%ISR=10D%TI=Z%CI=I%II=I%TS=7)O\nOS:PS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O3=M5B4NNT11NW6%O4=M5B4ST11NW6%O5=M5B4S\nOS:T11NW6%O6=M5B4ST11)WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)E\nOS:CN(R=Y%DF=Y%T=40%W=3908%O=M5B4NNSNW6%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F\nOS:=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5\nOS:(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z\nOS:%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=\nOS:N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%\nOS:CD=S)\n',
   'hostname': u'xbmc-6ce5.local',
   'osclass': [{'accuracy': u'92',
     'osfamily': u'Linux',
     'osgen': u'2.6.X',
     'type': u'general purpose',
     'vendor': u'Linux'},
    {'accuracy': '',
     'osfamily': u'2-Series',
     'osgen': '',
     'type': u'specialized',
     'vendor': u'Crestron'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'firewall',
     'vendor': u'Check Point'},
    {'accuracy': u'90',
     'osfamily': u'Linux',
     'osgen': u'2.4.X',
     'type': u'firewall',
     'vendor': u'Check Point'},
    {'accuracy': u'89',
     'osfamily': u'Linux',
     'osgen': u'2.6.X',
     'type': u'webcam',
     'vendor': u'AXIS'},
    {'accuracy': u'89',
     'osfamily': u'Linux',
     'osgen': u'2.4.X',
     'type': u'WAP',
     'vendor': u'Linux'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'WAP',
     'vendor': u'Linksys'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'printer',
     'vendor': u'Xerox'},
    {'accuracy': u'88',
     'osfamily': u'Linux',
     'osgen': u'2.4.X',
     'type': u'general purpose',
     'vendor': u'Linux'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'WAP',
     'vendor': u'D-Link'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'router',
     'vendor': u'Peplink'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'storage-misc',
     'vendor': u'ZyXEL'},
    {'accuracy': u'87',
     'osfamily': u'Linux',
     'osgen': u'2.6.X',
     'type': u'WAP',
     'vendor': u'Linux'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'switch',
     'vendor': u'Aruba'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'webcam',
     'vendor': u'AXIS'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'PBX',
     'vendor': u'Vodavi'},
    {'accuracy': '',
     'osfamily': u'embedded',
     'osgen': '',
     'type': u'printer',
     'vendor': u'Lexmark'}],
   'osmatch': [{'accuracy': u'92', 'line': u'22327', 'name': u'Linux 2.6.22'},
    {'accuracy': u'91',
     'line': u'8120',
     'name': u'Crestron XPanel control system'},
    {'accuracy': u'91', 'line': u'21851', 'name': u'Linux 2.6.19 - 2.6.31'},
    {'accuracy': u'90', 'line': u'23329', 'name': u'Linux 2.6.24'},
    {'accuracy': u'90',
     'line': u'5722',
     'name': u'Check Point SBox-200 firewall'},
    {'accuracy': u'90',
     'line': u'5811',
     'name': u'Check Point VPN-1 UTM appliance'},
    {'accuracy': u'90', 'line': u'25360', 'name': u'Linux 2.6.9 - 2.6.30'},
    {'accuracy': u'89',
     'line': u'4042',
     'name': u'AXIS 211A Network Camera (Linux 2.6)'},
    {'accuracy': u'89',
     'line': u'4059',
     'name': u'AXIS 211A Network Camera (Linux 2.6.20)'},
    {'accuracy': u'89',
     'line': u'19715',
     'name': u'DD-WRT v23 - v24 (Linux 2.4.20 - 2.4.37)'}],
   'status': {'reason': u'arp-response', 'state': u'up'},
   u'tcp': {21: {'name': u'ftp', 'reason': u'syn-ack', 'state': u'open'},
    22: {'name': u'ssh', 'reason': u'syn-ack', 'state': u'open'},
    80: {'name': u'http', 'reason': u'syn-ack', 'state': u'open'},
    111: {'name': u'rpcbind', 'reason': u'syn-ack', 'state': u'open'},
    139: {'name': u'netbios-ssn', 'reason': u'syn-ack', 'state': u'open'}}}}}
``nmap`` kann auch mehrere Hosts nacheinander prüfen. Es gibt verschiedene Möglichkeiten mehr als einen Host anzugeben.
Antworten