Inhoudsopgave
Python Als programmeertaal is het zeer krachtig, het stelt ons in staat om acties uit te voeren en zeer belangrijke resultaten te behalen bij het manipuleren van de verschillende kenmerken van onze apparatuur, dit kunnen we bereiken door de IP-adressen, poorten en sockets. Elk stelt ons in staat om een ander en even belangrijk punt binnen de netwerkstructuur te bereiken.Een van de omgevingen waar Python heeft meer kracht gekregen in de ontwikkeling van programma's voor het netwerk, omdat dankzij de klassen van socket behandeling, we kunnen de netwerkstructuur in ons voordeel gebruiken, deze structuur kan lokaal of via internet, wat ons een grote veelzijdigheid en kracht geeft in de programma's die we kunnen uitvoeren.
De socketbibliotheekDit is de eerste stop die we moeten maken, deze bibliotheek brengt functionaliteiten op basis van lessen en in gevallen, wat betekent dat we sommige dingen kunnen gebruiken zonder objecten te maken.
Dit maakt voor ons misschien niet veel uit, maar de mogelijkheid om zonder instanties te werken opent enkele mogelijkheden, zoals het maken van kortere scripts en ons in staat stellen krachtige tools te gebruiken zonder extra complexiteit aan onze code toe te voegen.
Deze eerste oefening is erg interessant, omdat we vanaf de commandoconsole van ons systeem informatie uit onze eigen apparatuur kunnen halen met behulp van Python en een paar regels code.
VereistenAls vereiste moeten we de tolk van . hebben geïnstalleerd Python in onze machine om de voorbeelden uit te voeren die we in deze tutorial zullen laten zien.
De code die we hebben geschreven draait op de versie 2.7 van Python dus enige wijziging kan nodig zijn als een andere versie wordt gebruikt. Een tool die ons kan helpen met versiecompatibiliteitsproblemen is Virtualenv, waarmee we verschillende versies van kunnen draaien Python in onafhankelijke installaties zonder dat hiervoor complexe configuraties nodig zijn.
Allereerst gaan we onze opdrachtconsole openen en gaan we naar de Python interactieve terminalOm dit te doen, als we de taal correct hebben geïnstalleerd, hoeven we alleen het woord python te plaatsen en hebben we er toegang toe:
Deze console is erg handig voor het testen van instructies, zoals we in het onderstaande voorbeeld zullen zien, maar voor gebruik waarbij we de code die we maken, moeten bewaren, is dit misschien niet het beste alternatief, zoals we later in de tutorial zullen zien.
Eerst moeten we onze bibliotheek importeren, hiervoor gebruiken we het volgende commando:
stopcontact importeren
Dan kunnen we beginnen met het verzamelen van de informatie die we willen, hiervoor hoeven we alleen maar te weten waarnaar we op zoek zijn, bijvoorbeeld om de naam van ons team te verkrijgen, moeten we gewoon het volgende schrijven:
computernaam = socket.gethostnaam ()
Dan kunnen we de variabele op het scherm afdrukken om de inhoud ervan te zien, hiervoor noemen we gewoon de methode afdrukken:
print "De computernaam is:% s"% computernaam
Dit zou ons een resultaat moeten geven zoals het volgende in onze interactieve terminal:
Zoals we konden zien, is het vrij eenvoudig om de bibliotheek te beheren stopcontact en bewerkingen vanaf de console Python, nu kunnen we naar het volgende punt gaan en dat is om het IP-adres in één keer te verkrijgen, omdat we alleen iets soortgelijks hoeven te doen, alleen dat we de variabele gaan gebruiken met de naam van de computer die we in eerste instantie hebben vastgelegd en we zullen het volgende doen:
host_address = socket.gethostbyname (hostnaam)
Als we dit gedaan hebben, printen we de vorige variabele:
print "Het IP-adres is:% s"% computeradres
Laten we eens kijken hoe dit eruit ziet in onze terminal:
Zoals we kunnen zien, hebben we zonder veel moeite uiterst nuttige informatie verkregen, maar dit is niets vergeleken met wat we kunnen doen.
Het bovenstaande is heel praktisch, maar het is niet erg handig in de presentatie, omdat we er niet vaak toegang toe hebben, maar we zouden het regel voor regel moeten invoeren, om dit probleem te voorkomen, gaan we een echt programma maken dat ons de informatie die we tot nu toe weten te verkrijgen.
Hiervoor hebben we een platte teksteditor nodig, we raden SublimeText 2 aan en een locatie waar we ons programma kunnen hosten en die binnen bereik is van onze installatie van Python met de bijbehorende machtigingen.
Om een verbetering te bereiken, gaan we een functie maken waarmee we onze instructies op een terugkerende basis kunnen oproepen zonder elke keer alle code te hoeven schrijven, en vervolgens in ons nieuwe bestand dat we zullen aanroepen team_informatie.py we gaan de volgende inhoud plaatsen:
#! / usr / bin / env Python import socket def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "de computernaam is:% s"% computernaam print "Het IP is: % s "% computeradres if __name__ == '__main__': get_team_info ()
Het is erg belangrijk dat we de tabs en inspringingen van de code respecteren, aangezien dit de enige manier is waarop Python kan blokwijzigingen herkennen, als we gebruiken Sublieme tekst We hoeven ons geen zorgen te maken, omdat we hiermee de inspringingen van onze code visueel kunnen verifiëren:
Nu in onze systeemopdrachtconsole en zonder de de Python We kunnen ons bestand aanroepen en we zullen het resultaat zien, hiervoor voeren we uit python bestandsnaam.py zoals we kunnen zien in de volgende afbeelding:
Omdat we een aantal basis hebben gezien van hoe de bibliotheek werkt stopcontactLaten we dit naar een nieuw niveau tillen. Zonder de noodzaak om nieuwe instructies te gebruiken, zullen we nu het adres van een externe computer verkrijgen, dit kan erg belangrijk zijn om informatie te verzamelen voor elke validatie die we willen doen.
In dit geval gaan we ons vorige programma een beetje aanpassen, in een nieuw bestand dat nu heet remote_information.py we gaan het volgende plaatsen:
#! / usr / bin / env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "De externe computer is:% s"% remote_computer print "Het IP-adres is:% s"% socket.gethostbyname (remote_host) behalve socket.error, err_msg: print "% s:% s"% (remote_host, err_msg) if __name__ == '__main__': get_remote_host_info ()
Wat we hebben gedaan is simpelweg de naam van a . aangeven externe hostAangezien we niets te bewijzen hebben, kunnen we een bekende website gebruiken om er informatie van te verkrijgen, in dit voorbeeld gebruiken we het adres van Google, in dit geval is onze teamnaam URL en met dezelfde methode gethostbynaam () we krijgen de informatie.
We hebben ook een foutafhandeling toegevoegd voor het geval we het adres dat we hebben geplaatst afwijzen en dus de oorzaken kennen, als we dit uiteindelijk in onze console uitvoeren, krijgen we het volgende:
Als we programma's willen maken die onder netwerkprotocollen werken, is het zeer waarschijnlijk dat we de verschillende formaten zullen moeten gebruiken waarin een IP-adres kan worden uitgedrukt, dit alles natuurlijk volgens het gemak dat we zien.
Populaire formatenEr zijn twee zeer populaire formaten voor IP-adressen, de eerste is: inet_aton () wat een verpakte versie van het IP is en het volgende is: inet_ntoa () wat het tegenovergestelde is en een niet-verpakte versie van het IP is.
Elk heeft zijn gebruik in programma's, maar het is niet het hoofdonderwerp van deze tutorial, het enige extra dat we kunnen aangeven is dat deze formaten en hun functies alleen van toepassing zijn op IPv4, inplaats van IPv6 anderen zijn van toepassing.
We gaan een nieuw programma bouwen waarmee we deze conversie kunnen doen:
#! / usr / bin / env Python import socket van binascii import hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') voor dir_ip in [remote_host_a, remote_host_b]: verpakt_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) print "IP-adres:% s => verpakt:% s, niet verpakt:% s"% (dir_ip, hexlipify (packed_ip) ) ), unpacked_ip) if __name__ == '__main__': format_ip_address ()
Hier starten we ons programma opnieuw door de bibliotheek te importeren stopcontact, dan importeren we een bibliotheek genaamd hexlificeren waarmee we een conversie van hexadecimale formaten tot stand kunnen brengen, zodat ze leesbaar zijn, zullen we dit gebruiken om de IP-adressen te kunnen decoderen. Om dit nog interessanter te maken hebben we twee externe computers geplaatst waarvan we de IP-adressen gaan halen en met a for loop we gaan beide herhalen, binnen de iteratie kunnen we dan de conversies maken met de adresformaten IPv4 die we hebben gekregen.
Eindelijk maken we van elk een indruk, hiervoor hebben we vertrouwd op de methoden inet_aton () en inet_ntoa () beide uit de socketbibliotheek, wat belangrijk is om te onthouden dat deze op klassen is gebaseerd en niet op instantie.
Laten we eens kijken hoe dit er allemaal uitziet als we het vorige bestand in onze opdrachtconsole uitvoeren:
Met dit voorbeeld hebben we alle trucs gemengd die we eerder hadden gezien, van het verkrijgen van de informatie van een externe computer tot het bouwen van een functie waarmee we de informatie kunnen verkrijgen zonder alles in de interactieve console van Python.
BelangrijkEen belangrijke aanbeveling is dat we de documentatie moeten gebruiken als we vragen hebben en dankzij de geweldige gemeenschap van Python Op internet kunnen we praktisch een oplossing vinden voor elke twijfel of elk probleem waarmee we worden geconfronteerd.
Hiermee beëindigen we deze tutorial, het is slechts een toegang tot wat programmeert voor netwerken met PythonHet is echter best handig om te weten dat we vanuit onze programma's informatie van zowel onze computers als externe computers kunnen manipuleren, dit zonder extra insluitsels uit bibliotheken of meerdere regels code om deze te verkrijgen.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven