Uzyskaj informacje o adresie IP za pomocą Pythona

Spisie treści
Pyton Jako język programowania jest bardzo potężny, pozwala nam wykonywać działania i uzyskiwać bardzo ważne wyniki podczas manipulowania różnymi charakterystykami naszego sprzętu, co możemy osiągnąć poprzez Adresy IP, porty i gniazda. Każdy z nich pozwala nam dotrzeć do innego i równie ważnego punktu w strukturze sieci.
Jedno ze środowisk, w którym Pyton zyskała na sile w rozwoju programów dla sieci, ponieważ dzięki jej klasom obsługa gniazd, możemy wykorzystać strukturę sieci na naszą korzyść, ta struktura może być lokalna lub za pośrednictwem Internet, co daje nam dużą wszechstronność i moc w programach, które możemy realizować.
Biblioteka gniazdTo pierwszy przystanek, który musimy zrobić, ta biblioteka zawiera funkcjonalności oparte na Lekcje i w instancje, co oznacza, że ​​niektórych rzeczy możemy używać bez tworzenia obiektów.
To może nie mieć dla nas większego znaczenia, jednak możliwość pracy bez instancji otwiera pewne możliwości, takie jak tworzenie krótszych skryptów i pozwalanie nam na użycie potężnych narzędzi bez dodawania dodatkowej złożoności do naszego kodu.
To pierwsze ćwiczenie jest bardzo ciekawe, ponieważ z konsoli poleceń naszego systemu będziemy mogli uzyskać informacje z własnego sprzętu za pomocą Pyton i kilka linijek kodu.
WymaganiaJako wymóg musimy mieć zainstalowany tłumacz Pyton w naszej maszynie, aby móc wykonać przykłady, które pokażemy w tym samouczku.
Napisany przez nas kod działa na wersja 2.7 z Pyton więc niektóre modyfikacje mogą być konieczne, jeśli używana jest inna wersja. Narzędziem, które może nam pomóc w problemach ze zgodnością wersji, jest Virtualenv, który pozwala nam uruchamiać różne wersje Pyton w niezależnych instalacjach bez konieczności skomplikowanych konfiguracji.
Przede wszystkim otworzymy naszą konsolę poleceń i wejdziemy do Interaktywny terminal PythonaAby to zrobić, jeśli poprawnie zainstalowaliśmy język, wystarczy umieścić słowo python i będziemy mieć do niego dostęp:

Ta konsola jest bardzo przydatna do testowania instrukcji, jak zobaczymy w poniższym przykładzie, jednak w przypadku zastosowań, w których musimy zachować kod, który tworzymy, może nie być najlepszą alternatywą, jak zobaczymy w dalszej części samouczka.
Najpierw musimy zaimportować naszą bibliotekę, do tego użyjemy następującego polecenia:
importuj gniazdo

Wtedy możemy zacząć zbierać potrzebne nam informacje, do tego musimy tylko wiedzieć, czego szukamy, np. aby uzyskać nazwę naszego zespołu wystarczy napisać:
nazwa_komputera = gniazdo.gethostname ()

Następnie możemy wydrukować zmienną na ekranie, aby zobaczyć jej zawartość, w tym celu po prostu wywołujemy metodę wydrukować:
print "Nazwa komputera to:% s"% nazwa_komputera

Powinno to dać nam wynik podobny do następującego w naszym interaktywnym terminalu:

Jak widzieliśmy, zarządzanie biblioteką jest dość łatwe gniazdo elektryczne i operacje z konsoli Pyton, teraz możemy przejść do następnego punktu, a mianowicie od razu uzyskać adres IP, ponieważ musimy zrobić tylko coś podobnego, tylko że będziemy używać zmiennej z nazwą komputera, który początkowo przechwyciliśmy i wykonamy następujące czynności:
adres_hosta = gniazdo.gethostbyname (nazwa_hosta)

W ten sposób wypisujemy poprzednią zmienną:
print "IP to:% s"% adres_komputera

Zobaczmy jak to wygląda w naszym terminalu:

Jak widać, bez większego wysiłku uzyskaliśmy niezwykle przydatne informacje, ale to nic w porównaniu z tym, co możemy zrobić.
Powyższe jest dość praktyczne, ale nie jest zbyt przydatne w jego prezentacji, ponieważ często nie mamy do niego dostępu, ale musielibyśmy wprowadzać go linijka po linijce, aby uniknąć tego problemu, stworzymy prawdziwy program, który zapewni nam informacje, które do tej pory wiemy, jak je pozyskać.
W tym celu potrzebujemy edytora zwykłego tekstu, zalecamy SublimeText 2 oraz lokalizację, w której możemy hostować nasz program i która jest w zasięgu naszej instalacji Pyton z odpowiednimi uprawnieniami.
Aby osiągnąć poprawę, stworzymy funkcję, która pozwoli nam wywoływać nasze instrukcje cyklicznie bez konieczności każdorazowego pisania całego kodu, a następnie w naszym nowym pliku, który wywołamy team_information.py zamieścimy następującą treść:
 #! / usr / bin / env Python import socket def get computer_info (): nazwa_komputera = socket.gethostname () adres_komputera = socket.gethostbyname (nazwa_komputera) print "nazwa komputera to:% s"% nazwa_komputera print "Adres IP to: % s "% adres_komputera, jeśli __name__ == '__main__': get_team_info () 

Bardzo ważne jest, abyśmy szanowali tabulatory i wcięcia kodu, ponieważ jest to jedyny sposób, w jaki Pyton potrafi rozpoznać zmiany bloków, jeśli używamy Wzniosły tekst Nie będziemy musieli się martwić, ponieważ pozwala nam to wizualnie zweryfikować wcięcia naszego kodu:

Teraz w naszej systemowej konsoli poleceń i bez wpisywania de Pyton Możemy wywołać nasz plik i zobaczymy wynik, w tym celu wykonujemy python nazwapliku.py jak widać na poniższym obrazku:

Ponieważ widzieliśmy kilka podstaw działania biblioteki gniazdo elektrycznePrzenieśmy to na nowy poziom. Bez konieczności korzystania z nowych instrukcji uzyskamy teraz adres zdalnego komputera, co może być bardzo ważne, aby zebrać informacje do dowolnej walidacji, którą chcemy wykonać.
W tym przypadku zamierzamy nieco zmodyfikować nasz poprzedni program, w nowym pliku o nazwie zdalna_informacja.py umieścimy następujące elementy:
 #! / usr / bin / env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Komputer zdalny to:% s"% remote_computer print "Adres IP to:% s"% socket.gethostbyname (remote_host) z wyjątkiem socket.error, err_msg: print "% s:% s"% (zdalny_host, err_msg) if __name__ == '__main__': get_remote_host_info () 

To, co zrobiliśmy, to po prostu wskazanie nazwy a zdalny hostPonieważ nie mamy nic do udowodnienia, możemy wykorzystać znaną nam stronę internetową, aby uzyskać z niej informacje, w tym przykładzie użyjemy adresu Google, w tym przypadku nazwa naszej drużyny będzie URL i używając tej samej metody gethostbyname () otrzymamy informacje.
Dodaliśmy również obsługę błędów na wypadek odrzucenia adresu, który podaliśmy i dzięki temu znamy przyczyny, w końcu, gdy wykonamy to w naszej konsoli, otrzymamy:

Jeśli chcemy tworzyć programy działające w protokołach sieciowych, jest bardzo prawdopodobne, że będziemy musieli użyć różnych formatów, w których można wyrazić adres IP, wszystko to oczywiście zgodnie z wygodą, którą widzimy.
Popularne formatyIstnieją dwa bardzo popularne formaty adresów IP, pierwszy to inet_aton () który jest spakowaną wersją adresu IP, a następujący jest inet_ntoa () co jest przeciwieństwem i jest niepakowaną wersją IP.
Każdy z nich ma swoje zastosowania w programach, jednak nie jest to główny temat tego samouczka, jedyną dodatkową rzeczą, którą możemy wskazać, jest to, że te formaty i ich funkcje dotyczą tylko IPv4, zamiast tego IPv6 inne mają zastosowanie.
Zbudujemy nowy program, który pozwoli nam wykonać tę konwersję:
 #! / usr / bin / env Python import gniazda z binascii import hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') dla dir_ip in [remote_host_a, remote_host_b]: pack_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) print "Adres IP:% s => Packed:% s, Not Packed:% s"% (dir_ip, hexlipify (packed_ip) ) ), unpacked_ip) if __name__ == '__main__': format_ip_address () 

Tutaj ponownie uruchamiamy nasz program, importując bibliotekę gniazdo elektryczne, następnie importujemy bibliotekę o nazwie hekselifikować który pozwala nam ustalić konwersję formatów szesnastkowych, aby były czytelne, użyjemy tego, aby móc odszyfrować adresy IP. Aby było to ciekawsze, umieściliśmy dwa zdalne komputery, z których będziemy uzyskiwać adresy IP i z dla pętli zamierzamy iterować przez oba, w ramach iteracji możemy następnie dokonać konwersji za pomocą formatów adresów IPv4 które uzyskaliśmy.
Na koniec robimy wrażenie na każdym z nich, w tym celu polegaliśmy na metodach inet_aton () oraz inet_ntoa () oba z biblioteki gniazd, co ważne jest, aby pamiętać, że jest ona oparta na klasach, a nie na instancji.
Zobaczmy, jak to wszystko wygląda, gdy uruchomimy poprzedni plik w naszej konsoli poleceń:

W tym przykładzie połączyliśmy wszystkie sztuczki, które widzieliśmy wcześniej, od uzyskania informacji ze zdalnego komputera, po zbudowanie funkcji, która pozwala nam uzyskać informacje bez konieczności zapisywania wszystkiego w interaktywnej konsoli programu Pyton.
WażnyWażną rekomendacją jest to, że powinniśmy korzystać z dokumentacji, gdy mamy jakiekolwiek pytania i dzięki wspaniałej społeczności Pyton W Internecie możemy praktycznie znaleźć rozwiązanie każdej wątpliwości czy problemu, z którym się zmagamy.
Na tym kończymy ten samouczek, jest to tylko wstęp do tego, czym jest programowanie dla sieci z PytonJednak warto wiedzieć, że z naszych programów możemy manipulować informacjami zarówno z naszych komputerów, jak i komputerów zdalnych, bez konieczności wprowadzania dodatkowych wtrąceń z bibliotek lub wielu wierszy kodu w celu ich uzyskania.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave