Získejte informace o IP adrese pomocí Pythonu

Obsah
Krajta Jako programovací jazyk je velmi silný, umožňuje nám dosáhnout akcí a získat velmi důležité výsledky při manipulaci s různými charakteristikami našeho zařízení, čehož můžeme dosáhnout prostřednictvím IP adresy, porty a zásuvky. Každý z nich nám umožňuje dosáhnout jiného a stejně důležitého bodu v rámci struktury sítě.
Jedno z prostředí, kde Krajta získala větší sílu je ve vývoji programů pro síť, protože díky svým třídám manipulace se zásuvkou„Síťovou strukturu můžeme využít ve svůj prospěch, tato struktura může být lokální nebo prostřednictvím Internet, což nám dává velkou všestrannost a sílu v programech, které můžeme provádět.
Knihovna soketůToto je první zastávka, kterou musíme udělat, tato knihovna přináší funkce založené na lekce a v instance, což znamená, že některé věci můžeme používat i bez vytváření objektů.
To pro nás nemusí znamenat velký rozdíl, ale možnost pracovat bez instancí otevírá některé možnosti, jako je vytváření kratších skriptů a umožnění nám používat výkonné nástroje, aniž bychom přidali další složitost našeho kódu.
Toto první cvičení je velmi zajímavé, protože z příkazové konzoly našeho systému budeme moci získávat informace z vlastního zařízení pomocí Krajta a několik řádků kódu.
PožadavkyJako požadavek musíme mít nainstalován tlumočník Krajta v našem počítači, abychom mohli provádět příklady, které si ukážeme v tomto tutoriálu.
Kód, který jsme napsali, běží na verze 2.7 z Krajta pokud je použita jiná verze, mohou být nutné určité úpravy. Nástroj, který nám může pomoci s problémy s kompatibilitou verzí, je Virtualenv, který nám umožňuje spouštět různé verze Krajta v nezávislých instalacích bez nutnosti složitých konfigurací.
Nejprve otevřete naši příkazovou konzolu a vstoupíme do Interaktivní terminál PythonuChcete -li to provést, pokud jsme správně nainstalovali jazyk, musíme pouze umístit slovo python a budeme k němu mít přístup:

Tato konzola je velmi užitečná pro testování pokynů, jak uvidíme v níže uvedeném příkladu, ale pro použití, kde potřebujeme zachovat kód, který vytvoříme, nemusí být tou nejlepší alternativou, jak uvidíme později v tutoriálu.
Nejprve musíme importovat naši knihovnu, k tomu použijeme následující příkaz:
dovozní zásuvka

Poté můžeme začít shromažďovat požadované informace, k tomu musíme pouze vědět, co hledáme, například abychom získali název našeho týmu, musíme jednoduše napsat následující:
computer_name = socket.gethostname ()

Poté můžeme proměnnou vytisknout na obrazovku, abychom viděli její obsah, a proto jednoduše zavoláme metodu vytisknout:
tisk "Název počítače je:% s"% název_počítače

To by nám v našem interaktivním terminálu mělo poskytnout výsledek jako následující:

Jak jsme viděli, správu knihovny je docela snadné zásuvka a operace z konzoly KrajtaNyní můžeme přejít k dalšímu bodu, a tím je získání IP adresy najednou, protože musíme udělat jen něco podobného, ​​pouze že použijeme proměnnou s názvem počítače, který jsme původně zachytili a provedeme následující:
adresa_hostitele = socket.gethostbyname (název_hostitele)

Hotovo, vytiskneme předchozí proměnnou:
tisk "IP je:% s"% computer_address

Podívejme se, jak to vypadá v našem terminálu:

Jak vidíme, získali jsme velmi užitečné informace bez velkého úsilí, ale to není nic ve srovnání s tím, co můžeme udělat.
Výše uvedené je docela praktické, ale není příliš užitečné v jeho prezentaci, protože k němu nemůžeme přistupovat často, ale potřebovali bychom jej zadat řádek po řádku, abychom se tomuto problému vyhnuli, vytvoříme skutečný program, který nám poskytne informace, které zatím víme, jak získat.
K tomu budeme potřebovat obyčejný textový editor, doporučujeme SublimeText 2 a umístění, kde můžeme hostit náš program a které je v dosahu naší instalace Krajta s jejich odpovídajícími oprávněními.
Abychom dosáhli zlepšení, vytvoříme funkci, která nám umožní volat naše pokyny opakovaně, aniž bychom museli pokaždé psát celý kód, pak v našem novém souboru, který zavoláme team_information.py umístíme následující obsah:
 #! / usr / bin / env Python import socket def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (název_počítače) tisk "název počítače je:% s"% název_počítače tisk "IP je: % s "% computer_address if __name__ == '__main__': get_team_info () 

Je velmi důležité, abychom respektovali karty a odsazení kódu, protože je to jediný způsob, jak Krajta dokáže rozpoznat změny bloku, pokud používáme Vznešený text Nebudeme si muset dělat starosti, protože nám to umožňuje vizuálně ověřit odsazení našeho kódu:

Nyní v naší konzole příkazů systému a bez zadávání de Krajta Můžeme zavolat náš soubor a uvidíme výsledek, proto jej spustíme název souboru python.py jak můžeme vidět na následujícím obrázku:

Protože jsme viděli nějaké základy toho, jak knihovna funguje zásuvkaPosuňme to na novou úroveň. Bez nutnosti používat nové pokyny nyní získáme adresu vzdáleného počítače, což může být velmi důležité pro shromažďování informací pro jakékoli ověření, které chceme provést.
V tomto případě trochu upravíme náš předchozí program v novém souboru, který se nyní nazývá remote_information.py umístíme následující:
 #! / usr / bin / env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Vzdálený počítač je:% s"% remote_computer print "IP adresa je:% s"% socket.gethostbyname (remote_host) kromě socket.error, err_msg: print "% s:% s"% (remote_host, err_msg) if __name__ == '__main__': get_remote_host_info () 

To, co jsme udělali, je jednoduše uvést název a vzdálený hostitelProtože nemáme co dokazovat, můžeme k získání informací z nich použít známý web, v tomto případě použijeme adresu Google, v tomto případě bude název našeho týmu Url a pomocí stejné metody gethostbyname () informace získáme.
Přidali jsme také obslužný program chyb v případě, že zamítneme adresu, kterou jsme umístili, a tak budeme znát příčiny. Nakonec, když to provedeme v naší konzole, získáme následující:

Pokud chceme vytvářet programy fungující pod síťovými protokoly, je velmi pravděpodobné, že budeme muset použít různé formáty, ve kterých lze vyjádřit IP adresu, to vše samozřejmě podle pohodlí, které vidíme.
Oblíbené formátyExistují dva velmi populární formáty IP adres, první je inet_aton () což je zabalená verze IP a následující inet_ntoa () což je opak a je to nezabalená verze IP.
Každý z nich má své využití v programech, nicméně to není hlavní téma tohoto tutoriálu, jedinou další věcí, kterou můžeme naznačit, je, že tyto formáty a jejich funkce platí pouze pro IPv4, místo toho pro IPv6 ostatní platí.
Chystáme se vytvořit nový program, který nám umožní provést tuto konverzi:
 #! / usr / bin / env Python import socket z binascii import hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') pro dir_ip v [remote_host_a, remote_host_b] :packed_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) tisk "IP adresa:% s => Zabaleno:% s, není zabaleno:% s"% (dir_ip, hexlipify (zabaleno_ip) )), unpacked_ip) if __name__ == '__main__': format_ip_address () 

Zde spustíme náš program znovu importem knihovny zásuvka, poté importujeme knihovnu s názvem hexlify to nám umožňuje vytvořit převod hexadecimálních formátů tak, aby byly čitelné, použijeme to k dešifrování IP adres. Aby to bylo zajímavější, umístili jsme dva vzdálené počítače, ze kterých budeme získávat IP adresy, a s příponou pro smyčku budeme iterovat prostřednictvím obou, v rámci iterace je, když pak můžeme provádět převody s formáty adres IPv4 které jsme získali.
Nakonec na každého uděláme dojem, proto jsme se spoléhali na metody inet_aton () a inet_ntoa () oba z knihovny soketů, což je důležité si uvědomit, že je založená na třídách a ne na instancích.
Podívejme se, jak to všechno vypadá, když spustíme předchozí soubor v naší příkazové konzole:

V tomto příkladu jsme smíchali všechny triky, které jsme předtím viděli, od získávání informací ze vzdáleného počítače, až po vytvoření funkce, která nám umožňuje získat informace, aniž bychom museli vše psát do interaktivní konzoly Krajta.
DůležitéDůležitým doporučením je, abychom dokumentaci použili v případě jakýchkoli dotazů a díky skvělé komunitě Krajta Na internetu můžeme prakticky najít řešení jakýchkoli pochybností nebo problémů, kterým čelíme.
Tímto tento tutoriál ukončujeme, je to jen vstup do toho, s čím se programuje pro sítě KrajtaJe však docela užitečné vědět, že z našich programů můžeme manipulovat s informacemi jak z našich počítačů, tak ze vzdálených počítačů, aniž bychom museli získávat další inkluze z knihoven nebo více řádků kódu, abychom je získali.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave