Вземете информация за IP адреса с Python

Съдържание
Python Като език за програмиране той е много мощен, позволява ни да постигаме действия и да получаваме много важни резултати при манипулиране на различните характеристики на нашето оборудване, това можем да постигнем чрез IP адреси, портове и гнезда. Всеки от тях ни позволява да достигнем до различна и еднакво важна точка в структурата на мрежата.
Една от средите, където Python спечели повече сила е в разработването на програми за мрежата, тъй като благодарение на своите класове на работа с контакти, можем да използваме мрежовата структура в наша полза, тази структура може да бъде локална или чрез интернет, което ни дава голяма гъвкавост и мощ в програмите, които можем да изпълняваме.
Библиотеката на гнездатаТова е първата спирка, която трябва да направим, тази библиотека носи функционалности, базирани на Уроци и в екземпляри, което означава, че можем да използваме някои неща, без да създаваме обекти.
Това може да няма голяма разлика за нас, но възможността за работа без екземпляри отваря някои възможности, като например създаване на по -кратки скриптове и ни позволява да използваме мощни инструменти, без да добавяме допълнителна сложност към нашия код.
Това първо упражнение е много интересно, тъй като от командната конзола на нашата система ще можем да получим информация от нашето собствено оборудване, използвайки Python и няколко реда код.
ИзискванияКато изискване трябва да сме инсталирали преводача на Python в нашата машина, за да можем да изпълним примерите, които ще покажем в този урок.
Кодът, който сме написали, работи на версия 2.7 на Python така че може да се наложи някаква промяна, ако се използва различна версия. Инструмент, който може да ни помогне при проблеми със съвместимостта на версиите, е Virtualenv, който ни позволява да изпълняваме различни версии на Python в независими инсталации, без да са необходими сложни конфигурации.
Първо ще отворим нашата командна конзола и ще влезем в Интерактивен терминал на PythonЗа да направите това, ако сме инсталирали езика правилно, трябва само да поставим думата python и ще имаме достъп до нея:

Тази конзола е много полезна за инструкции за тестване, както ще видим в примера по -долу, но за приложения, при които трябва да запазим кода, който правим, може да не е най -добрата алтернатива, както ще видим по -късно в урока.
Първо трябва да импортираме нашата библиотека, за това ще използваме следната команда:
гнездо за импортиране

След това можем да започнем да събираме информацията, която искаме, за това трябва само да знаем какво търсим, например, за да получим името на нашия екип, просто трябва да напишем следното:
компютър_име = socket.gethostname ()

След това можем да отпечатаме променливата на екрана, за да видим нейното съдържание, за това просто наричаме метода печат:
print "Името на компютъра е:% s"% computer_name

Това трябва да ни даде резултат като следния в нашия интерактивен терминал:

Както видяхме, управлението на библиотеката е доста лесно гнездо и операции от конзолата Python, сега можем да преминем към следващата точка и това е да получим IP адреса веднага, защото трябва само да направим нещо подобно, само че ще използваме променливата с името на компютъра, който първоначално сме заснели и ще направим следното:
host_address = socket.gethostbyname (име на хост)

Направихме това, отпечатваме предишната променлива:
отпечатайте "IP е:% s"% computer_address

Нека да видим как изглежда това в нашия терминал:

Както виждаме, получихме изключително полезна информация без много усилия, но това не е нищо в сравнение с това, което можем да направим.
Горното е доста практично, но не е много полезно в представянето му, тъй като нямаме достъп до него често, но ще трябва да го въведем ред по ред, за да избегнем този проблем, ще създадем истинска програма, която ни дава информация, която досега знаем как да получим.
За това ще ни е необходим обикновен текстов редактор, препоръчваме SublimeText 2 и място, където можем да хостваме нашата програма и което е в обсега на нашата инсталация на Python със съответните им разрешения.
За да постигнем подобрение, ние ще създадем функция, която ни позволява да извикваме нашите инструкции периодично, без да се налага да пишем целия код всеки път, след това в нашия нов файл, който ще извикаме team_information.py ще поставим следното съдържание:
 #! / usr / bin / env Сокет за внос на Python def get computer_info (): computer_name = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "името на компютъра е:% s"% computer_name print "IP адресът е: % s "% компютър_адрес, ако __name__ == '__main__': get_team_info () 

Много е важно да зачитаме разделите и вдлъбнатините на кода, тъй като това е единственият начин, по който Python може да разпознае промените в блока, ако използваме Възвишен текст Няма да се притесняваме, тъй като ни позволява визуално да проверим вдлъбнатините на нашия код:

Сега в нашата системна командна конзола и без да влизате в de Python Можем да извикаме нашия файл и ще видим резултата, за това изпълняваме python filename.py както можем да видим на следното изображение:

Тъй като видяхме някои основи за това как работи библиотеката гнездоНека изведем това на ново ниво. Без да е необходимо да използваме нови инструкции, сега ще получим адреса на отдалечен компютър, това може да бъде много важно за събиране на информация за всяка валидация, която искаме да направим.
В този случай ще променим малко предишната си програма, в нов файл, наречен сега remote_information.py ще поставим следното:
 #! / usr / bin / env Сокет за внос на Python def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "Отдалеченият компютър е:% s"% remote_computer print "IP адресът е:% s"% socket.gethostbyname (remote_host) с изключение на socket.error, err_msg: отпечатайте "% s:% s"% (remote_host, err_msg), ако __name__ == '__main__': get_remote_host_info () 

Това, което направихме, е просто да посочим името на a отдалечен хостТъй като няма какво да доказваме, можем да използваме известен уебсайт, за да получим информация от него, в този пример ще използваме адреса на Google, в този случай името на нашия екип ще бъде URL адрес и използвайки същия метод gethostbyname () ще получим информацията.
Ние също така добавихме манипулатор на грешки в случай, че отхвърлим адреса, който сме поставили и по този начин знаем причините, накрая, когато изпълним това в нашата конзола, ще получим следното:

Ако искаме да правим програми, които да работят по мрежови протоколи, много е вероятно да се наложи да използваме различните формати, в които може да се изрази IP адрес, всичко това разбира се според удобството, което виждаме.
Популярни форматиИма два много популярни формата за IP адреси, първият е inet_aton () която е пакетирана версия на IP и следното е inet_ntoa () което е обратното и е неопакована версия на IP.
Всеки от тях има своите приложения в програмите, но това не е основната тема на този урок, единственото допълнително нещо, което можем да посочим, е, че тези формати и техните функции се отнасят само за IPv4, вместо за IPv6 други кандидатстват.
Ще изградим нова програма, която ни позволява да направим това преобразуване:
 #! / usr / bin / env Сокет за импортиране на Python от binascii внос hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') за dir_ip в [remote_host_a, remote_host_b]: packed_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) print "IP адрес:% s => Опакован:% s, Не опакован:% s"% (dir_ip, hexlipify (packed_ip )), unpacked_ip) if __name__ == '__main__': format_ip_address () 

Тук отново стартираме нашата програма, като импортираме библиотеката гнездо, след това импортираме библиотека, наречена хеклифицира което ни позволява да установим преобразуване на шестнадесетични формати, така че да могат да бъдат четими, ще използваме това, за да можем да декриптираме IP адресите. За да направим това по -интересно, сме поставили два отдалечени компютъра, от които ще получим IP адресите и с a for цикъл ще повторим и през двете, като в рамките на итерацията можем да направим преобразуванията с форматите на адресите IPv4 които сме получили.
Накрая правим впечатление за всеки един, за това разчитаме на методите inet_aton () и inet_ntoa () и двете от библиотеката на сокета, което е важно да запомните, че тя е базирана на клас, а не на екземпляр.
Нека да видим как изглежда всичко това, когато стартираме предишния файл в нашата командна конзола:

С този пример сме смесили всички трикове, които сме виждали преди, от получаване на информацията от отдалечен компютър, до изграждане на функция, която ни позволява да получаваме информацията, без да се налага да записваме всичко в интерактивната конзола на Python.
ВажноВажна препоръка е, че трябва да използваме документацията, когато имаме въпроси и благодарение на голямата общност на Python В интернет можем практически да намерим решение на всяко съмнение или проблем, с който се сблъскваме.
С това приключваме този урок, това е просто вход към това, с което се програмира за мрежи PythonВъпреки това е много полезно да се знае, че от нашите програми можем да манипулираме информация както от нашите компютри, така и от отдалечени компютри, без това да се налага да правим допълнителни включвания от библиотеки или множество редове код, за да я получим.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave