Съдържание
Python Като език за програмиране той е много мощен, позволява ни да постигаме действия и да получаваме много важни резултати при манипулиране на различните характеристики на нашето оборудване, това можем да постигнем чрез IP адреси, портове и гнезда. Всеки от тях ни позволява да достигнем до различна и еднакво важна точка в структурата на мрежата.Една от средите, където Python спечели повече сила е в разработването на програми за мрежата, тъй като благодарение на своите класове на работа с контакти, можем да използваме мрежовата структура в наша полза, тази структура може да бъде локална или чрез интернет, което ни дава голяма гъвкавост и мощ в програмите, които можем да изпълняваме.
Библиотеката на гнездатаТова е първата спирка, която трябва да направим, тази библиотека носи функционалности, базирани на Уроци и в екземпляри, което означава, че можем да използваме някои неща, без да създаваме обекти.
Това може да няма голяма разлика за нас, но възможността за работа без екземпляри отваря някои възможности, като например създаване на по -кратки скриптове и ни позволява да използваме мощни инструменти, без да добавяме допълнителна сложност към нашия код.
Това първо упражнение е много интересно, тъй като от командната конзола на нашата система ще можем да получим информация от нашето собствено оборудване, използвайки Python и няколко реда код.
ИзискванияКато изискване трябва да сме инсталирали преводача на Python в нашата машина, за да можем да изпълним примерите, които ще покажем в този урок.
Кодът, който сме написали, работи на версия 2.7 на Python така че може да се наложи някаква промяна, ако се използва различна версия. Инструмент, който може да ни помогне при проблеми със съвместимостта на версиите, е Virtualenv, който ни позволява да изпълняваме различни версии на Python в независими инсталации, без да са необходими сложни конфигурации.
Първо ще отворим нашата командна конзола и ще влезем в Интерактивен терминал на PythonЗа да направите това, ако сме инсталирали езика правилно, трябва само да поставим думата python и ще имаме достъп до нея:
Първо трябва да импортираме нашата библиотека, за това ще използваме следната команда:
гнездо за импортиране
След това можем да започнем да събираме информацията, която искаме, за това трябва само да знаем какво търсим, например, за да получим името на нашия екип, просто трябва да напишем следното:
компютър_име = socket.gethostname ()
След това можем да отпечатаме променливата на екрана, за да видим нейното съдържание, за това просто наричаме метода печат:
print "Името на компютъра е:% s"% computer_name
Това трябва да ни даде резултат като следния в нашия интерактивен терминал:
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 може да разпознае промените в блока, ако използваме Възвишен текст Няма да се притесняваме, тъй като ни позволява визуално да проверим вдлъбнатините на нашия код:
В този случай ще променим малко предишната си програма, в нов файл, наречен сега 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 адреси, първият е 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Въпреки това е много полезно да се знае, че от нашите програми можем да манипулираме информация както от нашите компютри, така и от отдалечени компютри, без това да се налага да правим допълнителни включвания от библиотеки или множество редове код, за да я получим.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка