Eine der Umgebungen, in denen Python mehr Stärke erlangt hat, ist die Entwicklung von Programmen für das Netzwerk, da wir dank seiner Klassen für die Verwaltung von Sockets die Netzwerkstruktur zu unseren Gunsten verwenden können. Diese Struktur kann lokal oder über das Internet erfolgen Dies gibt uns eine große Vielseitigkeit und Kraft in den Programmen, die wir ausführen können.
Dies stellt vielleicht keinen großen Unterschied dar. Die Möglichkeit, ohne Instanzen zu arbeiten, eröffnet uns jedoch einige Möglichkeiten, z. B. kürzere Skripts zu erstellen und leistungsfähige Tools zu verwenden, ohne unseren Code zusätzlich zu komplexieren.
Erhalten Sie den Namen und die IP-Adresse unseres Teams
Diese erste Übung ist sehr interessant, da wir über die Kommandokonsole unseres Systems mit Python und einigen Codezeilen Informationen von unserem eigenen Team erhalten können.
Der von uns geschriebene Code wird in Version 2.7 von Python ausgeführt, sodass möglicherweise Änderungen vorgenommen werden müssen, wenn eine andere Version verwendet wird. Ein Tool, das uns bei Problemen mit der Versionskompatibilität helfen kann, ist Virtualenv , mit dem wir verschiedene Versionen von Python in unabhängigen Installationen ausführen können, ohne dafür komplexe Konfigurationen vornehmen zu müssen.
Zuerst öffnen wir unsere Kommandokonsole und betreten das interaktive Terminal von Python . Wenn wir die Sprache korrekt installiert haben, sollten wir nur das Wort Python platzieren und haben Zugriff darauf:
Diese Konsole ist sehr nützlich, um Anweisungen zu testen, wie wir im folgenden Beispiel sehen werden. Für Anwendungen, bei denen der von uns ausgeführte Code beibehalten werden muss, ist dies möglicherweise nicht die beste Alternative, wie wir später im Tutorial sehen werden.
Zuerst müssen wir unsere Bibliothek importieren, dazu verwenden wir den folgenden Befehl:
Import-Socket
Dann können wir anfangen, die gewünschten Informationen zu sammeln. Dazu sollten wir nur wissen, wonach wir suchen. Um beispielsweise den Namen unseres Teams zu erhalten, sollten wir einfach Folgendes schreiben:
computer_name = socket.gethostname ()
Dann können wir die Variable auf dem Bildschirm ausdrucken, um ihren Inhalt zu sehen. Dazu rufen wir einfach die print- Methode auf:
print "Der Computername lautet:% s"% Computername
Dies sollte in unserem interaktiven Terminal zu folgenden Ergebnissen führen:
Wie wir sehen konnten, ist es recht einfach, die Socket- Bibliothek und die Operationen von der Python- Konsole aus zu verwalten. Jetzt können wir zum nächsten Punkt übergehen und die IP-Adresse einmal beziehen, da wir nur etwas Ähnliches tun müssen, nur dass wir die Variable verwenden werden mit dem Namen des Teams, das wir ursprünglich gefangen haben und wir werden Folgendes tun:
equipment_address = socket.gethostbyname (computer_name)
Sobald dies erledigt ist, drucken wir die vorherige Variable:
print "Die IP lautet:% s"% equipment_address
Mal sehen, wie das in unserem Terminal aussieht:
Wie wir sehen konnten, haben wir ohne großen Aufwand äußerst nützliche Informationen erhalten, aber dies ist nichts im Vergleich zu dem, was wir tun können.
Das Programm wiederholen
Das obige ist recht praktisch, aber es ist in seiner Darstellung nicht sehr nützlich, da wir nicht häufig darauf zugreifen können, sondern es Zeile für Zeile eingeben müssten, um dieses Problem zu vermeiden, werden wir ein echtes Programm erstellen, das uns die Informationen dazu gibt Bisher wissen wir, wie man es bekommt.
Dazu benötigen wir einen Nur- Text-Editor. Wir empfehlen SublimeText 2 und einen Speicherort, an dem wir unser Programm hosten können. Dies ist in Reichweite unserer Python- Installation mit den entsprechenden Berechtigungen.
Um eine Verbesserung zu erzielen, erstellen wir eine Funktion, mit der wir unsere Anweisungen wiederholt aufrufen können, ohne jedes Mal den gesamten Code schreiben zu müssen. In unserer neuen Datei rufen wir informacion_equipo.py auf und platzieren den folgenden Inhalt:
#! / usr / bin / env Python Import-Socket def get_info_equipment (): computer_name = socket.gethostname () equipment_address = socket.gethostbyname (computer_name) print "Der Computername lautet:% s"% Computername print "Die IP lautet:% s"% equipment_address if __name__ == '__main__': get_info_equipment ()
Es ist sehr wichtig, dass wir die Tabellierungen und Einrückungen des Codes respektieren, da Python nur so Blockänderungen erkennen kann. Wenn wir Sublime Text verwenden, müssen wir uns keine Sorgen machen, da es uns ermöglicht, die Einrückungen unseres Codes visuell zu überprüfen :
Jetzt können wir in unserer Kommandokonsole des Systems und ohne Eingabe der Python- Datei unsere Datei aufrufen und das Ergebnis sehen. Dazu führen wir die Datei python filename.py aus, wie wir in der folgenden Abbildung sehen können:
Beziehen Sie Informationen von einem Remotecomputer
Da wir einige Grundlagen zur Funktionsweise der Socket- Bibliothek kennengelernt haben, wollen wir diese auf eine neue Ebene heben. Ohne neue Anweisungen zu verwenden, erhalten wir jetzt die Adresse eines Remotecomputers. Dies kann sehr wichtig sein, um Informationen für eine Validierung zu sammeln, die wir durchführen möchten.
In diesem Fall werden wir unser vorheriges Programm etwas modifizieren. In einer neuen Datei mit dem Namen remote_info.py werden wir Folgendes einfügen :
#! / usr / bin / env Python Import-Socket def get_info_equipo_remoto (): equipo_remoto = 'www.google.com' versuche: print "Der Remote-Computer ist:% s"% remote_computer print "Die IP-Adresse lautet:% s"% socket.gethostbyname (remote_computer) außer socket.error, err_msg: print "% s:% s"% (remote_computer, err_msg) if __name__ == '__main__': get_info_equipo_remoto ()
Wir haben lediglich den Namen eines Remote-Hosts angegeben , da wir nichts zu beweisen haben, dass wir über eine bekannte Website Informationen darüber erhalten können. In diesem Beispiel verwenden wir die Google- Adresse. In diesem Fall ist unser Teamname die URL und Mit der gleichen gethostbyname () -Methode erhalten wir die Informationen.
Wir haben auch einen Fehlerbehandler hinzugefügt, falls wir die von uns eingegebene Adresse ablehnen und somit die Ursachen kennen. Wenn wir dies in unserer Konsole ausführen, erhalten wir schließlich Folgendes:
Konvertieren Sie das Format IP-Adressen
Wenn wir Programme erstellen möchten, die unter Netzwerkprotokollen funktionieren, müssen wir höchstwahrscheinlich die verschiedenen Formate verwenden, in denen eine IP-Adresse ausgedrückt werden kann. Dies alles hängt vom Komfort ab, den wir sehen.
Jeder hat seine Verwendung in den Programmen, es ist jedoch nicht das Hauptthema dieses Tutorials. Wir können nur zusätzlich darauf hinweisen, dass diese Formate und ihre Funktionen nur für IPv4 gelten , während für IPv6 andere gelten.
Wir werden ein neues Programm erstellen, mit dem wir diese Konvertierung durchführen können:
#! / usr / bin / env Python Import-Socket aus binascii import hexlify def ip_address_format (): equipo_remoto_a = socket.gethostbyname ('www.twitter.com') equipo_remoto_b = socket.gethostbyname ('www.facebook.com') für dir_ip in [equipo_remoto_a, equipo_remoto_b]: packaged_ip = socket.inet_aton (ip_dir) not_packaged_ip = socket.inet_ntoa (packaged_ip) print "Adresse Ip:% s => Gepackt:% s, Nicht Gepackt:% s"% (dir_ip, hexlify (packaged_ip), not_packaged_ip) if __name__ == '__main__': ip_address_format ()
Hier starten wir unser Programm, das die Socket- Bibliothek importiert, und importieren dann eine Bibliothek namens hexlify , mit der wir eine Konvertierung von hexadezimalen Formaten vornehmen können, damit diese lesbar sind. Dies wird zur Entschlüsselung der IP-Adressen verwendet. Um dies interessanter zu gestalten, haben wir zwei entfernte Computer platziert, von denen wir die IP-Adressen erhalten und mit einem Zyklus für beide iterieren. Innerhalb der Iteration können wir dann die Konvertierungen mit den Formaten der IPv4- Adressen vornehmen, die wir haben erhalten.
Abschließend machen wir einen Eindruck von jedem einzelnen. Dazu haben wir uns auf die Methoden inet_aton () und inet_ntoa () der Socket-Bibliothek gestützt, was wichtig ist, um zu bedenken, dass sie auf Klassen und nicht auf Instanzen basiert.
Mal sehen, wie das alles aussieht, wenn wir die vorherige Datei in unserer Befehlskonsole ausführen:
In diesem Beispiel haben wir alle Tricks gemischt, die wir bisher gesehen haben, angefangen beim Abrufen von Informationen von einem Remotecomputer bis hin zum Erstellen einer Funktion, mit der wir Informationen abrufen können, ohne alles in die interaktive Python- Konsole schreiben zu müssen.
Damit beenden wir dieses Tutorial. Es ist nur ein Einstieg in die Programmierung von Netzwerken mit Python . Es ist jedoch sehr nützlich zu wissen, dass wir mit unseren Programmen Informationen sowohl von unseren Geräten als auch von entfernten Geräten bearbeiten können, ohne dass dies erforderlich ist müssen zusätzliche Einschlüsse von Bibliotheken oder mehreren Codezeilen machen, um es zu erhalten.