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
Mittels Ping-Befehl Info bekommen
-
- User
- Beiträge: 34
- Registriert: Montag 10. März 2014, 09:27
Zuletzt geändert von JohannesGolf am Donnerstag 8. Mai 2014, 14:12, insgesamt 2-mal geändert.
@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‽
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‽
-
- 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.
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.
@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...
mutetella
EDIT: Hab' gerade das hier gelesen, vielleicht hilft's Dir ja...
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...
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 )
@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:
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:
``nmap`` kann auch mehrere Hosts nacheinander prüfen. Es gibt verschiedene Möglichkeiten mehr als einen Host anzugeben.
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
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'}}}}}