Få informasjon om IP -adresse med Python

Innholdsfortegnelse
Python Som et programmeringsspråk er det veldig kraftig, det lar oss oppnå handlinger og oppnå svært viktige resultater når vi manipulerer de forskjellige egenskapene til utstyret vårt, dette kan vi oppnå gjennom IP -adresser, porter og stikkontakter. Hver enkelt lar oss nå et annet og like viktig punkt i nettverksstrukturen.
Et av miljøene der Python har fått mer styrke er i utviklingen av programmer for nettverket, siden takket være sine klasser av håndtering av stikkontakter, vi kan bruke nettverksstrukturen til vår fordel, denne strukturen kan være lokal eller gjennom Internett, som gir oss stor allsidighet og kraft i programmene vi kan utføre.
Socket -biblioteketDette er det første stoppet vi må gjøre, dette biblioteket gir funksjonaliteter basert på leksjoner og i tilfeller, noe som betyr at vi kan bruke noen ting uten å lage objekter.
Dette kan ikke gjøre stor forskjell for oss, men muligheten for å jobbe uten forekomster åpner noen muligheter, for eksempel å lage kortere skript og la oss bruke kraftige verktøy uten å legge til ekstra kompleksitet i koden vår.
Denne første øvelsen er veldig interessant, siden vi fra systemets kommandokonsoll vil kunne hente informasjon fra vårt eget utstyr ved å bruke Python og noen få kodelinjer.
KravSom et krav må vi ha installert tolken av Python i maskinen vår for å kunne utføre eksemplene som vi vil vise i denne opplæringen.
Koden vi har skrevet kjører på versjon 2.7 av Python så noen endringer kan være nødvendig hvis en annen versjon brukes. Et verktøy som kan hjelpe oss med versjonskompatibilitetsproblemer er Virtualenv som lar oss kjøre forskjellige versjoner av Python i uavhengige installasjoner uten behov for komplekse konfigurasjoner for å gjøre det.
Først og fremst skal vi åpne kommandokonsollen, og vi skal gå inn i Python interaktiv terminalFor å gjøre dette, hvis vi har installert språket riktig, trenger vi bare å plassere ordet python, og vi har tilgang til det:

Denne konsollen er veldig nyttig for testinstruksjoner, som vi vil se i eksemplet nedenfor, men for bruk der vi trenger å beholde koden vi lager, er det kanskje ikke det beste alternativet, som vi vil se senere i opplæringen.
Først må vi importere biblioteket vårt, for dette bruker vi følgende kommando:
import stikkontakt

Deretter kan vi begynne å samle inn informasjonen vi ønsker, for dette trenger vi bare å vite hva vi leter etter, for eksempel for å få navnet på teamet vårt, må vi ganske enkelt skrive følgende:
datamaskinnavn = socket.gethostname ()

Deretter kan vi skrive ut variabelen på skjermen for å se innholdet, for dette kaller vi ganske enkelt metoden skrive ut:
print "Datamaskinnavnet er:% s"% datamaskinnavn

Dette bør gi oss et resultat som følgende i vår interaktive terminal:

Som vi kunne se, er det ganske enkelt å administrere biblioteket stikkontakt og operasjoner fra konsollen Python, nå kan vi gå til neste punkt, og det er å få IP -adressen med en gang, fordi vi bare trenger å gjøre noe lignende, bare at vi skal bruke variabelen med navnet på datamaskinen som vi først fanget og vi vil gjøre følgende:
host_address = socket.gethostbyname (vertsnavn)

Gjort dette skriver vi ut den forrige variabelen:
print "IP -adressen er:% s"% computer_address

La oss se hvordan dette ser ut i terminalen vår:

Som vi kan se har vi fått svært nyttig informasjon uten mye innsats, men dette er ingenting i forhold til det vi kan gjøre.
Ovenstående er ganske praktisk, men det er ikke veldig nyttig i presentasjonen, siden vi ikke kan få tilgang til det ofte, men vi må skrive det inn linje for linje, for å unngå dette problemet skal vi lage et ekte program som gir oss informasjon som vi så langt vet hvordan vi skal skaffe.
For dette trenger vi en ren tekstredigerer, vi anbefaler SublimeText 2 og et sted der vi kan være vert for programmet vårt, og som er innen rekkevidde av vår installasjon av Python med tilhørende tillatelser.
For å oppnå en forbedring skal vi lage en funksjon som lar oss ringe instruksjonene våre på en gjentagende måte uten å måtte skrive all koden hver gang, deretter i den nye filen som vi vil ringe team_information.py vi skal plassere følgende innhold:
 #! / usr / bin / env Python import socket def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "datamaskinnavnet er:% s"% computer_name print "IP -adressen er: % s "% computer_address if __name__ == '__main__': get_team_info () 

Det er veldig viktig at vi respekterer fanene og fordypningene i koden siden det er den eneste måten Python kan gjenkjenne blokkeringsendringer hvis vi bruker Sublim tekst Vi trenger ikke bekymre deg siden det tillater oss å visuelt bekrefte innrykkene i koden vår:

Nå i systemkommandokonsollen og uten å angi de Python Vi kan ringe filen vår, og vi vil se resultatet, for dette utfører vi python filnavn.py som vi kan se på følgende bilde:

Siden vi har sett noen grunnlag for hvordan biblioteket fungerer stikkontaktLa oss ta dette til et nytt nivå. Uten behov for å bruke nye instruksjoner, vil vi nå skaffe adressen til en ekstern datamaskin. Dette kan være svært viktig for å samle inn informasjon for enhver validering vi ønsker å gjøre.
I dette tilfellet skal vi endre det forrige programmet litt, i en ny fil som nå heter remote_information.py vi skal plassere følgende:
 #! / usr / bin / env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Den eksterne datamaskinen er:% s"% remote_computer print "IP -adressen er:% s"% socket.gethostbyname (remote_host) unntatt socket.error, err_msg: skriv ut "% s:% s"% (remote_host, err_msg) hvis __name__ == '__main__': get_remote_host_info () 

Det vi har gjort er ganske enkelt å angi navnet på a ekstern vertSiden vi ikke har noe å bevise, kan vi bruke et kjent nettsted for å skaffe informasjon fra det, i dette eksemplet vil vi bruke adressen til Google, i dette tilfellet blir teamnavnet vårt Url og bruker samme metode gethostbyname () vi vil få informasjonen.
Vi har også lagt til en feilbehandler i tilfelle vi avviser adressen vi har plassert og dermed kjenner årsakene, til slutt når vi utfører dette i konsollen, får vi følgende:

Hvis vi ønsker å lage programmer som fungerer under nettverksprotokoller, er det svært sannsynlig at vi må bruke de forskjellige formatene der en IP -adresse kan uttrykkes, alt dette selvfølgelig i henhold til bekvemmeligheten vi ser.
Populære formaterDet er to veldig populære formater for IP -adresser, den første er inet_aton () som er en fullpakket versjon av IP og følgende er inet_ntoa () som er det motsatte og er en ikke-pakket versjon av IP.
Hver enkelt har sine bruksområder i programmer, men det er ikke hovedtemaet for denne opplæringen, det eneste ekstra vi kan indikere er at disse formatene og funksjonene deres bare gjelder IPv4, i stedet for IPv6 andre søker.
Vi skal bygge et nytt program som lar oss gjøre denne konverteringen:
 #! / usr / bin / env Python importkontakt fra 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 i [remote_host_a, remote_host_b]: packed_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) print "IP -adresse:% s => Pakket:% s, Ikke pakket:% s"% (dir_ip, hexlipify (packed_ip) )), pakket ut_ip) hvis __name__ == '__main__': format_ip_address () 

Her starter vi programmet vårt igjen ved å importere biblioteket stikkontakt, så importerer vi et bibliotek som heter heksifisere som lar oss etablere en konvertering av heksadesimale formater, slik at de kan leses, vil vi bruke dette til å kunne dekryptere IP -adressene. For å gjøre dette mer interessant har vi plassert to eksterne datamaskiner som vi skal hente IP -adressene fra og med en for sløyfe vi kommer til å gjenta gjennom begge deler, innenfor iterasjonen er når vi deretter kan gjøre konverteringene med adresseformatene IPv4 som vi har fått.
Til slutt gjør vi inntrykk av hver enkelt, for dette har vi stolt på metodene inet_aton () og inet_ntoa () begge fra socket-biblioteket, som er viktig å huske at det er klassebasert og ikke forekomstbasert.
La oss se hvordan alt dette ser ut når vi kjører den forrige filen i kommandokonsollen:

Med dette eksemplet har vi blandet alle triksene vi hadde sett tidligere, fra å hente informasjonen fra en ekstern datamaskin, til å bygge en funksjon som lar oss få informasjonen uten å måtte skrive alt i den interaktive konsollen til Python.
ViktigEn viktig anbefaling er at vi bør bruke dokumentasjonen når vi har spørsmål og takker det store fellesskapet Python På Internett kan vi praktisk talt finne en løsning på enhver tvil eller problem vi står overfor.
Med dette avslutter vi denne opplæringen, det er bare en oppføring til hva som programmeres for nettverk med PythonDet er imidlertid ganske nyttig å vite at vi fra programmene våre kan manipulere informasjon fra både våre datamaskiner og eksterne datamaskiner, dette uten å måtte gjøre ekstra inneslutninger fra biblioteker eller flere kodelinjer for å få det.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave