Obțineți informații despre adresa IP cu Python

Cuprins
Piton Ca limbaj de programare este foarte puternic, ne permite să realizăm acțiuni și să obținem rezultate foarte importante atunci când manipulăm diferitele caracteristici ale echipamentelor noastre, acest lucru îl putem realiza prin intermediul Adrese IP, porturi și socketuri. Fiecare ne permite să ajungem la un punct diferit și la fel de important în cadrul structurii rețelei.
Unul din mediile în care Piton a câștigat mai multă forță în dezvoltarea programelor pentru rețea, deoarece datorită claselor sale de manipularea soclului, putem folosi structura rețelei în avantajul nostru, această structură poate fi locală sau prin intermediul Internet, ceea ce ne oferă o mare versatilitate și putere în programele pe care le putem derula.
Biblioteca de socluriAceasta este prima oprire pe care trebuie să o facem, această bibliotecă aduce funcționalități bazate pe lecții si in instanțe, ceea ce înseamnă că putem folosi unele lucruri fără a crea obiecte.
Este posibil ca acest lucru să nu facă o diferență prea mare pentru noi, cu toate acestea posibilitatea de a lucra fără instanțe deschide unele posibilități, cum ar fi realizarea de scripturi mai scurte și permiterea utilizării unor instrumente puternice fără a adăuga complexitate suplimentară codului nostru.
Acest prim exercițiu este foarte interesant, deoarece de la consola de comandă a sistemului nostru vom putea obține informații folosind propriul echipament Piton și câteva linii de cod.
CerințeCa o cerință, trebuie să avem instalat interpretul Piton în mașina noastră pentru a putea executa exemplele pe care le vom arăta în acest tutorial.
Codul pe care l-am scris rulează pe versiunea 2.7 de Piton deci poate fi necesară o modificare dacă se folosește o versiune diferită. Un instrument care ne poate ajuta cu probleme de compatibilitate cu versiunile este Virtualenv, care ne permite să rulăm diferite versiuni ale Piton în instalații independente fără a fi nevoie de configurații complexe pentru a face acest lucru.
În primul rând vom deschide consola noastră de comandă și vom intra în Terminal interactiv PythonPentru a face acest lucru, dacă am instalat corect limba, trebuie doar să plasăm cuvântul python și vom avea acces la acesta:

Această consolă este foarte utilă pentru testarea instrucțiunilor, așa cum vom vedea în exemplul de mai jos, totuși pentru utilizările în care trebuie să păstrăm codul pe care îl facem, este posibil să nu fie cea mai bună alternativă, așa cum vom vedea mai târziu în tutorial.
Mai întâi trebuie să importăm biblioteca noastră, pentru aceasta vom folosi următoarea comandă:
soclu de import

Apoi, putem începe să colectăm informațiile pe care le dorim, pentru aceasta trebuie doar să știm ce căutăm, de exemplu, pentru a obține numele echipei noastre, trebuie pur și simplu să scriem următoarele:
computer_name = socket.gethostname ()

Apoi putem imprima variabila pe ecran pentru a vedea conținutul acesteia, pentru aceasta numim pur și simplu metoda imprimare:
print "Numele computerului este:% s"% computer_name

Acest lucru ar trebui să ne ofere un rezultat cum ar fi următorul în terminalul nostru interactiv:

După cum am putut vedea, este destul de ușor să gestionați biblioteca priză și operații de pe consolă Piton, acum putem merge la punctul următor și este să obținem adresa IP dintr-o dată, pentru că trebuie să facem doar ceva similar, doar că vom folosi variabila cu numele computerului pe care l-am capturat inițial și vom face următoarele:
host_address = socket.gethostbyname (host_name)

Făcut acest lucru, imprimăm variabila anterioară:
print "IP-ul este:% s"% computer_address

Să vedem cum arată acest lucru în terminalul nostru:

După cum putem vedea, am obținut informații extrem de utile fără eforturi mari, dar acest lucru nu este nimic în comparație cu ceea ce putem face.
Cele de mai sus sunt destul de practice, dar nu sunt foarte utile în prezentarea sa, deoarece nu o putem accesa frecvent, dar ar trebui să o introducem rând cu rând, pentru a evita această problemă, vom crea un program real care ne oferă informații pe care până acum știm să le obținem.
Pentru aceasta vom avea nevoie de un editor de text simplu, vă recomandăm SublimeText 2 și o locație unde ne putem găzdui programul și care este la îndemâna instalării noastre de Piton cu permisiunile lor corespunzătoare.
Pentru a realiza o îmbunătățire, vom crea o funcție care ne permite să apelăm instrucțiunile noastre în mod recurent, fără a fi nevoie să scriem tot codul de fiecare dată, apoi în noul nostru fișier pe care îl vom apela team_information.py vom plasa următorul conținut:
 #! / usr / bin / env Python import socket def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "numele computerului este:% s"% computer_name print "IP este: % s "% computer_address if __name__ == '__main__': get_team_info () 

Este foarte important să respectăm filele și indentările codului, deoarece acesta este singurul mod în care Piton poate recunoaște modificările blocurilor, dacă folosim Text sublim Nu va trebui să ne facem griji, deoarece ne permite să verificăm vizual indentările codului nostru:

Acum, în consola noastră de comandă a sistemului și fără a intra în de Piton Putem apela fișierul nostru și vom vedea rezultatul, pentru asta executăm python filename.py așa cum putem vedea în următoarea imagine:

Din moment ce am văzut câteva baze despre modul în care funcționează biblioteca prizăSă ducem acest lucru la un nou nivel. Fără a fi nevoie să folosim instrucțiuni noi, vom obține acum adresa unui computer la distanță, acest lucru poate fi foarte important pentru a colecta informații pentru orice validare pe care dorim să o facem.
În acest caz, vom modifica puțin programul anterior, într-un nou fișier numit acum remote_information.py vom plasa următoarele:
 #! / usr / bin / env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Computerul la distanță este:% s"% remote_computer print "Adresa IP este:% s"% socket.gethostbyname (remote_host) cu excepția socket.error, err_msg: tipăriți "% s:% s"% (remote_host, err_msg) dacă __name__ == '__main__': get_remote_host_info () 

Ceea ce am făcut este să indicăm pur și simplu numele unui gazda la distantaDeoarece nu avem nimic de dovedit, putem folosi un site web cunoscut pentru a obține informații de la acesta, în acest exemplu vom folosi adresa Google, în acest caz numele echipei noastre va fi Url și folosind aceeași metodă gethostbyname () vom primi informațiile.
Am adăugat, de asemenea, un instrument de gestionare a erorilor în cazul în care respingem adresa pe care am plasat-o și astfel cunoaștem cauzele, în cele din urmă, atunci când executăm aceasta în consola noastră, vom obține următoarele:

Dacă vrem să facem programe care funcționează în cadrul protocoalelor de rețea, este foarte probabil să avem nevoie de diferite formate în care poate fi exprimată o adresă IP, toate acestea, desigur, în funcție de comoditatea pe care o vedem.
Formate populareExistă două formate foarte populare pentru adresele IP, primul este inet_aton () care este o versiune ambalată a IP și următoarea este inet_ntoa () care este opusul și este o versiune nepachetată a IP-ului.
Fiecare are utilizările sale în programe, totuși nu este subiectul principal al acestui tutorial, singurul lucru suplimentar pe care îl putem indica este că aceste formate și funcțiile lor se aplică numai IPv4, în schimb pentru IPv6 alții se aplică.
Vom construi un nou program care ne permite să facem această conversie:
 #! / usr / bin / env Python import socket from binascii import hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') for dir_ip în [remote_host_a, remote_host_b]: packed_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 () 

Aici începem din nou programul nostru importând biblioteca priză, apoi importăm o bibliotecă numită hexlify care ne permite să stabilim o conversie a formatelor hexazecimale, astfel încât să poată fi citite, vom folosi acest lucru pentru a putea decripta adresele IP. Pentru a face acest lucru mai interesant, am plasat două computere la distanță de pe care urmează să obținem adresele IP și cu un pentru bucla vom itera prin ambele, în cadrul iterației, atunci putem face conversiile cu formatele de adresă IPv4 pe care le-am obținut.
În cele din urmă, facem impresia fiecăruia, pentru aceasta ne-am bazat pe metode inet_aton () și inet_ntoa () ambele din biblioteca socket, ceea ce este important să ne amintim că este bazat pe clase și nu pe instanță.
Să vedem cum arată toate acestea atunci când rulăm fișierul anterior în consola noastră de comandă:

Cu acest exemplu am amestecat toate trucurile pe care le-am văzut anterior, de la obținerea informațiilor de pe un computer la distanță, până la construirea unei funcții care ne permite să obținem informațiile fără a fi nevoie să scriem totul în consola interactivă a Piton.
ImportantO recomandare importantă este că ar trebui să folosim documentația atunci când avem întrebări și mulțumim marii comunități din Piton Pe Internet putem găsi practic o soluție la orice îndoială sau problemă cu care ne confruntăm.
Cu aceasta încheiem acest tutorial, este doar o intrare la ceea ce programează pentru rețele PitonCu toate acestea, este destul de util să știm că din programele noastre putem manipula informații atât de pe computerele noastre, cât și de pe computerele de la distanță, fără a trebui să facem incluziuni suplimentare din biblioteci sau mai multe linii de cod pentru a le obține.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave