Gaukite IP adreso informaciją naudodami „Python“

Turinys
Python Kaip programavimo kalba ji yra labai galinga, ji leidžia mums pasiekti veiksmų ir pasiekti labai svarbių rezultatų manipuliuojant skirtingomis mūsų įrangos charakteristikomis. IP adresai, prievadai ir lizdai. Kiekvienas iš jų leidžia mums pasiekti skirtingą ir vienodai svarbų tinklo struktūros tašką.
Viena iš aplinkų, kur Python įgavo daugiau jėgų kuriant tinklo programas, nes savo klasių dėka lizdo tvarkymas, tinklo struktūrą galime naudoti savo naudai, ši struktūra gali būti vietinė arba per internetas, o tai suteikia mums daug universalumo ir galios programose, kurias galime vykdyti.
Lizdų bibliotekaTai yra pirmoji stotelė, kurią turime padaryti, ši biblioteka suteikia funkcijų, pagrįstų pamokas ir į atvejų, o tai reiškia, kad kai kuriuos dalykus galime naudoti nesukurdami objektų.
Tai mums gali neturėti didelio skirtumo, tačiau galimybė dirbti be egzempliorių atveria tam tikras galimybes, pvz., Sukurti trumpesnius scenarijus ir leisti mums naudoti galingus įrankius, nepridedant papildomo kodo sudėtingumo.
Šis pirmasis pratimas yra labai įdomus, nes iš mūsų sistemos valdymo pulto galėsime gauti informacijos iš savo įrangos naudodami Python ir kelias kodo eilutes.
ReikalavimaiKaip reikalavimą privalome įdiegti vertėją Python mūsų mašinoje, kad galėtume vykdyti pavyzdžius, kuriuos parodysime šioje pamokoje.
Mūsų parašytas kodas veikia 2.7 versija apie Python todėl, jei naudojama kita versija, gali prireikti kai kurių pakeitimų. Įrankis, kuris gali padėti išspręsti versijų suderinamumo problemas, yra „Virtualenv“, leidžiantis paleisti skirtingas versijas Python nepriklausomuose įrenginiuose, nereikalaujant sudėtingų konfigūracijų.
Pirmiausia atidarysime komandų konsolę ir įeisime į Python interaktyvus terminalasNorėdami tai padaryti, jei teisingai įdiegėme kalbą, turime įdėti tik žodį python ir turėsime prieigą prie jo:

Ši konsolė yra labai naudinga bandant instrukcijas, kaip matysime toliau pateiktame pavyzdyje, tačiau tais atvejais, kai turime išsaugoti sukurtą kodą, gali būti ne pati geriausia alternatyva, kaip pamatysime vėliau pamokoje.
Pirmiausia turime importuoti savo biblioteką, tam naudosime šią komandą:
importo lizdas

Tada galime pradėti rinkti norimą informaciją, nes turime tik žinoti, ko ieškome, pavyzdžiui, norėdami sužinoti savo komandos pavadinimą, tiesiog turime parašyti taip:
kompiuterio_pavadinimas = socket.gethostname ()

Tada galime ekrane atspausdinti kintamąjį, kad pamatytume jo turinį, todėl tiesiog vadiname metodą spausdinti:
spausdinti "Kompiuterio pavadinimas:% s"% kompiuterio_pavadinimas

Tai turėtų duoti tokį rezultatą mūsų interaktyviame terminale:

Kaip matėme, valdyti biblioteką yra gana paprasta lizdas ir operacijos iš konsolės Python, dabar galime pereiti prie kito punkto, ty iš karto gauti IP adresą, nes turime padaryti tik kažką panašaus, tik kad ketiname naudoti kintamąjį su kompiuterio pavadinimu, kurį iš pradžių užfiksavome ir mes darysime taip:
host_address = socket.gethostbyname (pagrindinio kompiuterio pavadinimas)

Padarę tai, atspausdiname ankstesnį kintamąjį:
spausdinti "IP yra:% s"% computer_address

Pažiūrėkime, kaip tai atrodo mūsų terminale:

Kaip matome, be daug pastangų gavome labai naudingos informacijos, tačiau tai yra niekas, palyginti su tuo, ką galime padaryti.
Tai, kas išdėstyta aukščiau, yra gana praktiška, tačiau ji nėra labai naudinga pristatant, nes mes negalime dažnai prieiti prie jos, tačiau turėtume ją įvesti eilutėmis, kad išvengtume šios problemos, mes sukursime tikrą programą, kuri suteiks mums informacijos, kurią iki šiol žinome, kaip gauti.
Tam mums reikia paprasto teksto redaktoriaus, rekomenduojame „SublimeText 2“ ir vietą, kurioje galime priglobti savo programą ir kuri yra lengvai pasiekiama Python su atitinkamais leidimais.
Siekdami patobulinimo, sukursime funkciją, kuri leis mums nuolat skambinti mūsų nurodymams, kiekvieną kartą nerašant viso kodo, tada naujame faile, kurį mes iškviesime team_information.py įdėsime tokį turinį:
 #! / usr / bin / env Python importo lizdas def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "kompiuterio pavadinimas:% s"% computer_name print "IP yra: % s "% computer_address if __name__ == '__main__': get_team_info () 

Labai svarbu gerbti kodo skirtukus ir įtraukas, nes tai vienintelis būdas Python gali atpažinti blokų pakeitimus, jei naudojame Aukščiausias tekstas Mums nereikės nerimauti, nes tai leidžia mums vizualiai patikrinti kodo įdubas:

Dabar mūsų sistemos komandų pulte ir neįeinant į de Python Mes galime paskambinti į savo failą ir pamatysime rezultatą, kurį vykdome python failo pavadinimas.py kaip matome šiame paveikslėlyje:

Kadangi matėme keletą bibliotekos veikimo pagrindų lizdasPakelkime tai į naują lygį. Nereikia naudoti naujų instrukcijų, dabar gausime nuotolinio kompiuterio adresą, todėl gali būti labai svarbu surinkti informaciją bet kokiam patvirtinimui, kurį norime atlikti.
Šiuo atveju mes šiek tiek pakeisime savo ankstesnę programą naujame faile, kuris dabar vadinamas remote_information.py išdėstysime šiuos dalykus:
 #! / usr / bin / env Python importavimo lizdas def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Nuotolinis kompiuteris yra:% s"% remote_computer print "IP adresas yra:% s"% socket.gethostbyname (remote_host), išskyrus socket.error, err_msg: print "% s:% s"% (remote_host, err_msg), jei __name__ == '__main__': get_remote_host_info () 

Ką mes padarėme, tiesiog nurodome a nuotolinis kompiuterisKadangi neturime nieko įrodyti, galime naudoti žinomą svetainę, kad gautume iš jos informaciją, šiame pavyzdyje naudosime „Google“, šiuo atveju bus mūsų komandos pavadinimas URL ir naudojant tą patį metodą gethostbyname () mes gausime informaciją.
Taip pat pridėjome klaidų tvarkyklę, jei atmesime mūsų pateiktą adresą ir taip žinome priežastis, pagaliau, kai tai atliksime savo konsolėje, gausime šiuos dalykus:

Jei norime sukurti programas, veikiančias pagal tinklo protokolus, labai tikėtina, kad turėsime naudoti skirtingus formatus, kuriais galima išreikšti IP adresą, žinoma, atsižvelgiant į tai, ką matome.
Populiarūs formataiYra du labai populiarūs IP adresų formatai, pirmasis inet_aton () kuri yra supakuota IP versija, o toliau pateikiama inet_ntoa () priešingai ir yra nesupakuota IP versija.
Kiekvienas iš jų yra naudojamas programose, tačiau tai nėra pagrindinė šios pamokos tema, vienintelis papildomas dalykas, kurį galime nurodyti, yra tai, kad šie formatai ir jų funkcijos taikomos tik IPv4, vietoj to IPv6 kiti kreipiasi.
Mes ketiname sukurti naują programą, leidžiančią atlikti šią konversiją:
 #! / usr / bin / env „Python“ importavimo lizdas iš „binascii“ importo į [remote_host_a, remote_host_b]: supakuotas_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (supakuotas_ip) spausdinti "IP adresas:% s => supakuotas:% s, nesupakuotas:% s"% (dir_ip, hexlipify (pack_ip) )), išpakuotas_ip) jei __vardas__ == '__main__': format_ip_address () 

Čia mes vėl pradedame savo programą importuodami biblioteką lizdas, tada importuojame biblioteką pavadinimu hexlify leidžia mums konvertuoti šešioliktainius formatus, kad jie būtų įskaitomi, tai panaudosime, kad galėtume iššifruoti IP adresus. Kad tai būtų įdomiau, įdėjome du nuotolinius kompiuterius, iš kurių ketiname gauti IP adresus už kilpą mes kartosime abu, iteracijos metu mes galime atlikti konversijas adresų formatais IPv4 kurį gavome.
Galiausiai mes susidarome įspūdį apie kiekvieną iš jų, todėl rėmėmės metodais inet_aton () ir inet_ntoa () tiek iš lizdo bibliotekos, todėl svarbu atsiminti, kad ji pagrįsta klasėmis, o ne egzemplioriais.
Pažiūrėkime, kaip visa tai atrodo, kai komandų pulte paleidžiame ankstesnį failą:

Šiame pavyzdyje mes sumaišėme visus triukus, kuriuos matėme anksčiau, pradedant nuo informacijos gavimo iš nuotolinio kompiuterio ir baigiant funkcija, leidžiančia gauti informaciją, nerašant visko į interaktyvią Python.
SvarbuSvarbi rekomendacija yra tai, kad turėtume naudoti dokumentus, kai turime klausimų ir dėkojame didelei bendruomenei Python Internete praktiškai galime rasti bet kokių abejonių ar problemų, su kuriomis susiduriame, sprendimą.
Tuo baigiame šią pamoką, tai tik įrašas į tai, kas programuojama tinklams PythonTačiau labai naudinga žinoti, kad iš savo programų mes galime manipuliuoti informacija tiek iš savo kompiuterių, tiek iš nuotolinių kompiuterių, tam nereikia atlikti papildomų įtraukimų iš bibliotekų ar kelių kodo eilučių, kad ją gautume.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave