Openbravo-rus.ru

Образование по русски
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Python 3 обучение

Лучшие фреймворки Python для веб-разработки, которые подойдут начинающим

Python — один из самых популярных и простых для изучения языков программирования и применяется почти везде, в том числе в веб-разработке. Для него есть много фреймворков, часть которых не просто облегчает разработку, но и предоставляет инструменты, позволяющие буквально за пару дней поднять готовый сайт.

Такие фреймворки относятся к категории full stack. Они крутые, в них куча инструментов и всё включено, но это может сделать их тяжёлыми, медленными и негибкими. Кроме фулстек-фреймворков есть и другие, например микро- или асинхронные фреймворки.

Фулстек-фреймворки. Есть всё необходимое для создания приложения — архитектура MVC (Model-View-Controller), имплементация ORM, движок шаблонов, маршрутизация и всё остальное. Такие фреймворки годятся для любых задач, но для мелких проектов можно обойтись и чем-нибудь менее громоздким.

Микрофреймворки. Включают только базовые компоненты и предназначены для быстрой разработки относительно небольших проектов. В них может не быть, например, валидации форм или интерфейса для базы данных, так что что-то придётся дописывать или подключать из сторонних библиотек. Некоторые микрофреймворки легко масштабируются по мере необходимости.

Асинхронные фреймворки. Основной принцип — задачи не обязаны исполняться последовательно: следующая может начать считаться до того, как завершилась предыдущая. Поскольку обычно передача данных пользователю и ожидание его ответа требуют гораздо больше времени, чем собственно работа сервера, такие фреймворки не тратят время на ожидание. Это позволяет им обрабатывать огромное количество соединений одновременно.

Главный плюс фулстек-фреймворков в том, что всё, нужное для полноценного приложения, в них уже есть. Не нужно искать отдельные библиотеки для каждой мелкой задачи и думать о совместимости, поэтому даже начинающие смогут быстро собрать готовое работающее приложение. В этой статье мы расскажем о таких фреймворках.

Django

Высокоуровневый фреймворк, предназначенный для быстрой и эффективной разработки. Его архитектура выстроена так, чтобы максимально экономить ваше время и силы, а в будущем — время и деньги заказчиков. Основные принципы философии Django — DRY и rapid development — стимулируют переиспользование кода и уменьшают избыточность.

  • Контроль версий для баз данных (миграции).
  • Собственный движок шаблонов.
  • Объектно-реляционные отображения (ORM).
  • Маршрутизация URL.
  • Поддержка веб-серверов.
  • Поддержка аутентификации.
  • Поддержка интернационализации.

Плюсы

  • Масса библиотек. Базовую функциональность не нужно писать самому — многое уже написано, остаётся только импортировать соответствующие библиотеки. На качество библиотек Django обычно можно положиться.
  • Сообщество и документация. У Django подробная документация и дружелюбное сообщество, поэтому всегда можно разобраться, что как работает, или спросить у специалистов.
  • Масштабируемость. Если вы понятия не имеете, насколько сильно ваш проект вырастет и вырастет ли вообще (как это обычно и бывает со стартапами), Django позволяет начать с малого и масштабироваться по мере необходимости.

Минусы

  • Django из коробки не поддерживает WebSockets, поэтому он плохо подходит для работы в реальном времени.
  • Готовые библиотеки — это в целом хорошо, но часто они снижают гибкость.

Где используется?

  • Instagram — социальная сеть для обмена фотографиями и видео.
  • Spotify — музыкальная платформа, рекомендующая пользователям музыку в зависимости от их предпочтений.

Django — один из самых популярных фреймворков, многие веб-студии работают именно с ним, поэтому важно уметь его использовать, если вы собираетесь работать в сфере веб-технологий. Изучить его, а также другие необходимые веб-разработчику инструменты, можно на курсе SkillFactory.

Pyramid

Если хочется что-то более минималистичное, то вам может прийтись по вкусу Pyramid. Этот фреймворк подходит для проектов любого размера. В нём есть полезные фичи для создания сложных приложений или масштабирования изначально небольших сайтов под возросшую нагрузку.

  • Удобные инструменты для работы со статичными ассетами.
  • Предикаты и рендереры.
  • Генерация URL.

Плюсы

  • Гибкость и удобство кастомизации. Любой компонент фреймворка, будь то база данных или движок шаблонов, может быть заменён. Можно даже использовать несколько разных компонентов одновременно (например, подключить две разные базы данных).
  • Удобные Ajax-запросы. Благодаря системе декораторов и представлений можно отправлять XHR-запросы без дополнительных усилий со стороны разработчика.
  • Поддержка SQLAlchemy. SQLAlchemy обеспечивает удобную работу с базами данных даже для сложных запросов.

Минусы

  • Требует времени на развёртывание и подготовку к разработке.
  • Чтобы заниматься кастомизацией, надо хорошо разбираться в Pyramid.
  • Для простых приложений SQLAlchemy может быть чересчур громоздкой.

Где используется?

  • Charte.ca — онлайновый редактор графиков для неспециалистов.
  • Easy Blog Networks — хостинг-провайдер.
  • Substance-D — среда разработки веб-приложений.

TurboGears

TurboGears — опенсорсный фреймворк для быстрой разработки приложений, работающих с данными. Он поддерживает SQLAlchemy, Genshi, WebOb, and Repoze, так что TurboGears прекрасно подходит для любой системы, требующей хорошей поддержки баз данных.

  • Поддержка горизонтального секционирования данных.
  • Интеграция с джаваскриптовой библиотекой MochiKit.
  • Поддержка нескольких баз данных одновременно.
  • Поддержка архитектуры MVC.
  • ToscaWidgets.
  • Шаблоны PasteScript.
  • Валидация через FormEncode.

Плюсы

  • Гибкость. TurboGears можно использовать и как микрофреймворк для быстрого прототипирования, и как полноценный фулстек фреймворк для поддержки масштабных проектов.
  • Расширяемость. Можно создавать собственные плагины или дополнять функциональность имеющихся.

Минусы

  • У него так много возможностей для расширения, что в них легко запутаться.

Где используется?

  • Apache Allura — онлайн-платформа для управления репозиториями кода, созданная SourceForge.
  • Kamisons — сайт по продаже зонтов.

Flask

Flask — это WSGI-фреймворк, который подходит и для простых сайтов, и для сложных платформ. Он совместим со сторонними библиотеками и имеет множество расширений.

  • Быстрый встроенный дебаггер.
  • Встроенный dev-сервер.
  • Шаблоны Jinja2.
  • Поддержка REST-запросов.
  • Совместим с любой ORM.
  • Безопасные куки для управления сессией на клиенте.
  • Поддержка юнит-тестов.
  • Соответствует WSGI 1.0.

Плюсы

  • Понятный минималистичный фреймворк. Довольно легко разобраться, что именно происходит и какой процесс за что отвечает. Логика работы не меняется от версии к версии.
  • Быстрое прототипирование. Все инструменты, нужные для создания прототипа, работают прямо из коробки.

Минусы

  • Фреймворк относительно низкоуровневый, поэтому в нём надо сперва разобраться, да и требования к уровню программиста выше, чем у остальных. Если хочется не выяснять, что и как работает под капотом, а сразу делать сайты — лучше выбрать что-нибудь другое.

Где используется?

  • Rainist —онлайн-платформа для управления личными финансами.
  • Netflix — одна из крупнейших стриминговых платформ в мире.
  • Lyft — платформа для заказа такси и аренды транспорта.

Tornado

Асинхронный фреймворк, благодаря неблокирующему обмену данными способный одновременно поддерживать множество пользовательских соединений. Прекрасно подходит для задач, требующих подолгу поддерживать соединение с каждым пользователем.

  • Есть свой механизм аутентификации, при необходимости можно подключить сторонние.
  • Поддержка переводов и локализации.
  • Работа в реальном времени.

Где используется?

  • Uploadcare — облачный сервис для работы с файлами.

В статье мы рассказали только о самых популярных фреймворках. Одни более гибкие, другие просты в использовании; одни лучше подходят для маленьких проектов, а другие — для больших. Но все они так или иначе упрощают разработку и позволяют заниматься своим проектом, а не интерфейсами к базам данных или парсингом запросов.

Python и его фреймворки — только часть необходимых знаний веб-разработчика. Нужно ещё уметь работать с HTML, CSS, SQL и другими инструментами. Обо всем этом расскажут на курсе SkillFactory, после которого у вас будет базовый набор знаний и умений, чтобы начать работать веб-разработчиком.

Хочу научиться программировать на Python. С чего начать?

Хочу научиться программировать на Python. С чего начать?

  • Планы обучения , 27 июля 2018 в 23:16
  • Наташа Маркова

Рассказываем, как действовать, если вы решили освоить Python 3 с нуля: что учить в первую очередь, где брать знания и что делать дальше?

Зачем учить Python?

Python имеет ряд преимуществ:

  • высокая популярность языка и использование в большом количестве проектов;
  • сравнительно простой, но в то же время строгий синтаксис;
  • множество доступных сред разработки, сервисов и фреймворков;
  • средства для работы с электронной почтой, протоколами Интернета, базами данных и другие инструменты в стандартной библиотеке языка;
  • востребованность Python-разработчиков на рынке труда.

Среди главных особенностей — динамическая типизация, проблемы с совместимостью версий, а также низкая скорость выполнения кода по сравнению с другими языками программирования. Если вы учите Python не первым языком, синтаксис может показаться вам непривычным.

Python для создания продуктов используют такие корпорации, как Google, Dropbox, Mozilla, Facebook, Yandex, Red Hat, Microsoft, Intel и другие.

Что учить?

Синтаксис

В первую очередь:

  • операции с целыми и вещественными числами;
  • типы данных;
  • переменные, ветвления, стандартный ввод/вывод;
  • логические операции, операции сравнения;
  • условия: if , else , elif ;
  • блоки, отступы;
  • строки и символы;
  • циклы while , for ;
  • операторы break , continue ;
  • установка и подключение модулей;
  • списки;
  • функции;
  • словари;
  • интерпретатор: установка, запуск скрипта;
  • файловый ввод/вывод.

Дополнительно

IDE и редакторы кода

Писать в IDLE или Python Shell удобно только простой код, но для проектов лучше найти интегрированную среду разработки (IDE) или редактор кода. IDE включает в себя редактор с подсветкой синтаксиса и автодополнением, инструменты сборки, выполнения и отладки и другие функции. В большинстве редакторов есть подсветка синтаксиса и форматирование, выполнение и отладка кода. Как правило, этот инструмент работает быстрее IDE, но имеет меньше функций. Среди самых популярных платформ — PyCharm, Wing IDE, Komodo и другие. Больше вариантов — в нашем обзоре.

С распределенной системой управления версиями (Git) нужно познакомиться в начале обучения. Среди основных навыков — создание и перемещение файлов в каталогах, инициализация Git-репозитория и создание коммитов, а также настройка репозиториев в GitHub.

Где учить?

Попробуйте каждый из инструментов. После пары первых уроков будет ясно, подходит он вам или нет.

Учебники

Простой и краткий русскоязычный учебник для изучения основ от Devpractice

Популярный учебник Марка Лутца с примерами, советами и задачами

Другие хорошие книги по Python — в нашей подборке.

Онлайн-курсы на русском языке

Онлайн-курсы на английском языке

О том, как еще учить Python — в нашей статье.

Все выучил, что дальше?

Когда вы научились составлять простые программы, надо постараться понять, в какую сторону вы хотите двигаться. Для этого начните решать задания:

  • тест на читабельность кода и тест на знание языка;
  • проект Эйлера на английском и русском учит составлять правильные алгоритмы;
  • игра с заданиями по уровням со встроенной средой программирования;
  • квест в котором нужно составить алгоритм, чтобы понять, как перейти к следующему шагу.

В следующей части мы расскажем, как учиться дальше.

Начало изучения Python

Python – один из самых популярных языков программирования на сегодняшний день. Он предоставляет всё необходимое для разработки и не обременяет программиста сложными конструкциями, синтаксисом и низкоуровневыми операциями.

Python не является чистым объектно-ориентированным языком, поэтому он позволяет программисту использовать особенности как функционального программирования, так и ООП, кроме того, с его помощью можно писать скрипты любого вида и сложности.

Зачем учить Python

Каждый язык программирования заточен под выполнение определенных видов задач. Python является языком программирования общего назначения, то есть на нем можно написать практически что-угодно. Можно — не значит эффективно, Python станет хорошим выбором не во всех сферах программирования.

В основном он используется в web-разработке, машинном обучении и анализе данных.

Это значит, что начинающий Python-программист может выбрать, какая специализация ему больше нравится. Каждая сфера предлагает высокие зарплаты, интересные и уникальные проекты.

Web-разработка

Python — не самый популярный язык для веб-разработки, однако он занимает немалую долю рынка и способен обеспечить вакансиями большое количество web-программистов.

Web-разработка на Python — это, в основном, создание серверной части сайтов и приложений с помощью фреймворков Django и Flask.

Машинное обучение

В сфере машинного обучения Python является самым популярным языком. Из названия сферы понятно, что основная задача программистов, научить компьютер “понимать” данные подобно человеку.

Типичные пример проекта в сфере машинного обучения — программа, способная распознавать и анализировать объекты на фотографии.

Анализ данных

В этой сфере Python также является один из самых популярных инструментов. Программисты разрабатывают программы, которые собирают и анализируют большое количество данных.

Простой пример проекта по анализу данных — это программа, собирающая информацию про сотрудников компании, и определяющая на её основе производительность их труда. Таким образом, руководство компании может достаточно быстро и легко анализировать состояние своей компании и быстро предпринимать необходимые меры по улучшению её эффективности.

С чего начать изучение

Каждый человек имеет разный уровень знаний. Кто-то уже успел что-то выучить в вузе, кто-то пришёл в Python из другого языка программирования, а кто-то совсем новичок и даже не знает, что такое переменная.

В любом случае начинающий программист должен изучить все основные конструкции языка. Не нужно сразу пользоваться каким-либо фреймворком, читать технические книги про алгоритмы, структуры данных и устройство компьютера.

Лучше начать с какого-либо курса, которые, обычно, дают только самую необходимую базу и не загружают мозг обучающегося огромным количеством технических терминов и информации. Для начала нужно изучить следующее:

На этом этапе практика заключается в написании небольших программ в несколько десятков строк кода.

Следующим шагов будет знакомство с функциями, которые позволяют писать более сложные программы с нормальной структурой. Начинающий программист должен разобрать:

  • Назначение функций.
  • Синтаксис функций.
  • Аргументы.
  • Возврат значений из функции.
  • Вложенные функции.
  • Рекурсию.

Функции позволяют писать более сложные и объемные программы (до нескольких сотен строк кода). Однако для дальнейшего развития программист должен разобраться с модулями и файлами:

  • Узнать, что такое модули и пакеты.
  • Научиться использовать несколько модулей в одном проекте.
  • Разобраться с областями видимости модулей.
  • Понять синтаксис работы с файлами (открытие, закрытие, ввод и вывод информации).

Последней базовой стадией будет изучение объектно-ориентированного программирования, которое включается в себя такие понятия, как:

  • Класс и его экземпляры.
  • Объекты.
  • Конструктор.
  • Методы и поля класса.
  • Инкапсуляция, наследование и полиморфизм.

Где брать информацию

Сайты

Сайты — хороший способ получить информацию, которая разбита на большое количество недлинных статей. Программисту достаточно найти нужную статью по нужной теме, в которой будет коротко и ясно дана теория, подкреплённая примерами кода.

Преимущество сайтов перед видео в том, что скорость получения информации зависит только от способностей обучающегося быстро читать и воспринимать информацию. По сравнению с книгами, информация более самодостаточна, то есть для понимания кода в статье не нужно читать несколько других статей.

Хороший пример сайта для обучения: “all-python.ru”. Здесь можно найти всю необходимую теорию с примерами, а также реализацию простых программ, таких как калькулятор и календарь.

Видео-уроки на YouTube

Видео-уроки отлично подойдут для тех, кто хорошо воспринимает информацию на слух. Они более наглядны, чем книги или статьи, хотя и ограничивают зрителя в скорости усвоения информации.

Курсы

Этот ресурс для обучения объединяет в себе видео-уроки, текстовую информацию и практику. Каждый курс имеет определённую программу, поэтому каждый следующий урок связан с предыдущим, что помогает лучше понять и запомнить информацию.

Курсы — отличная возможность выучить Python для новичков, однако они не станут самодостаточным источником информации, особенно при углублённом изучении.

Техническая литература

Технические книги — самый лучший способ изучить теорию. Информация в них обычно является самой достоверной и полной, однако обилие теории и терминов делает чтение книг довольно сложным занятием.

Кроме того, для полноты изучения, каждую тему из книги нужно подкреплять практикой, которой обычно не достаточно.

Практика — главная составляющая обучения

Мозг человека устроен так, что знания, которые не используются, стираются из памяти. Чтобы информация прочно закрепилась в памяти, её нужно понять, повторить несколько раз и, конечно, применить на практике.

Можно прочитать десятки книг по языку, однако без практики, вся полученная теория будет бесполезна.

На начальном этапе, когда программист не изучает специализированные фреймворки, а работает непосредственно с языком программирования, практика заключается в решении простых задач, обычно это математические задачи или задачи на проработку конкретных конструкций языка.

Когда программист доходит до высокого уровня владения языком и начинает разбираться в фреймворках, ему следует начинать писать близкие к реальным проекты, например: блокнот, программу для работы с изображениями, простой сайт и т.д.

Если проект не просто написан для изучения языка программирования и после этого забыт, а постоянно используется, такой проект будет большим плюсом при собеседовании на работу. Даже если им пользуетесь только вы для решения своих задач.

Пусть к совершенству: навыки, необходимые Python-разработчику

Программисту нужно запоминать огромное количество информации, в каждой сфере программирования используются уникальные инструменты, выучить их все невозможно. Однако существуют определенные базовые знания и навыки, которые актуальны не только по прошествии времени, но и для разных сфер программирования.

Алгоритмы

Сложно поверить, но программисты тратят большую часть времени не на написание кода, а на обдумывание структуры программы, организации её работы.

Каждый специалист должен уметь находит нужные алгоритмы, позволяющие сделать эффективную и оптимизированную программу.

На самом деле, подавляющее большинство алгоритмов и решений уже придумано, поэтому далеко не всегда имеет смысл придумывать что-то своё. Однако, важно правильно выбрать одно из множества придуманных решений. Например, на сегодняшний день придумано много алгоритмов сортировки массива, таких как сортировка пузырьком, слиянием, быстрая сортировка и так далее.

Каждый алгоритм имеет свои преимущества и недостатки, что-то используется чаще, что-то подойдет только в особых случаях. Программисты не придумывают новый алгоритм сортировки для каждого нового проекта, однако они должны выбрать тот, который наиболее подходит для его эффективной реализации.

Умение искать информацию

Python имеет большое интернет-сообщество. Когда возникает какая-то проблема, на 99% можно быть уверенным, что её решение есть в интернете. Оно может быть не идеальным, возможно, его придётся немного изменить для проекта, однако оно есть.

Интернет делает информацию доступной, программист может найти здесь всё необходимое, однако, доступность информации порождает проблему её избыточности. Запрос в поисковой системе не приведёт сразу к нужному решению, большинство информации будет бесполезной. Поэтому каждый Python-разработчик должен уметь находить в огромном объёме информации нужную.

Понимание работы OC

Любой проект так или иначе связан с операционной системой, потому что операционная система — архитектурный уровень компьютера, который связывает аппаратную часть с программной.

Программист на Python должен понимать, что такое процессы, потоки, память.

Понимание ООП

Объектно-ориентированное программирование — это парадигма, без которой невозможна поддержка крупных проектов. ООП используется везде, начиная от разработки игр, заканчивая написанием сайтов.

Python-разработчик должен понимать основные принципы ООП, уметь работать с синтаксисом классов и всем, что с ними связано. Кроме того, он должен обладать навыками, позволяющими строить эффективную структуру приложений.

Работа с командной строкой

Графический интерфейс операционной системы не может дать программисту все необходимые инструменты, что ограничивает его возможности.

Умение работать с командной строкой или терминалом будет полезным навыком, который к тому же часто проверяется на собеседованиях.

Понимание работы интернета

Это особенно актуально для web-разработчика на Python, однако, сейчас с интернетом связаны не только сайты, но и приложения. Поэтому программист должен понимать основные принципы работы глобальной сети, чтобы можно было взаимодействовать с кодом, который пишет команда программистов, занимающаяся разработкой backend составляющей приложения.

Системы контроля версий (git)

Любой проект должен быть связан с системой контроля версий. Это позволит сохранять состояния проекта и, при необходимости, откатывать проект на более ранней версии, например, если возник баг, который нельзя отследить.

Reverse shell на Python. Осваиваем навыки работы с сетью на Python на примере обратного шелла

Содержание статьи

Существует два низкоуровневых протокола, по которым передаются данные в компьютерных сетях, — это UDP (User Datagram Protocol) и TCP (Transmission Control Protocol). Работа с ними слегка различается, поэтому рассмотрим оба.

Протокол UDP предназначен для передачи пакетов от одного узла к другому без гарантии доставки. Пакет данных обычно состоит из двух частей. В одной — управляющая информация, в том числе данные отправителя и получателя, а также коды ошибок. В другой — пользовательская информация, то есть сообщение, которое передается.

Важно здесь то, что UDP не гарантирует доставку пакета (правильнее говоря, датаграммы) указанному узлу, так как между отправителем и получателем не установлен канал связи. Ошибки и потери пакетов в сетях случаются сплошь и рядом, и это стоит учитывать (или в определенных случаях, наоборот, не стоит).

Протокол TCP тоже доставляет сообщения, но при этом гарантирует, что пакет долетит до получателя целым и невредимым.

Переходим к практике

Писать код мы будем на современном Python 3. Вместе с Python поставляется набор стандартных библиотек, из которого нам потребуется модуль socket. Подключаем его.

Дальше мы договоримся, что у нас есть сервер и клиент, где клиентом обычно будет наш компьютер, а сервером — удаленный. В реальности все это условности, и речь может идти о любых двух компьютерах (в том числе виртуальных машинах) или даже просто двух процессах, запущенных локально. Важно только то, что код по разные стороны будет разным.

На каждой из сторон первым делом создаем экземпляр класса socket и устанавливаем для него две константы (параметры).

Используем UDP

Сначала создадим место для обмена данными.

Мы создали объект s , который является экземпляром класса socket. Для этого мы вызвали метод из модуля socket с именем socket и передали ему два параметра — AF_INET и SOCK_DGRAMM . AF_INET означает, что используется IP-протокол четвертой версии. При желании можно использовать IPv6. Во втором параметре для наших целей мы можем указать одну из двух констант: SOCK_DGRAMM или SOCK_STREAM . Первая означает, что будет использоваться протокол UDP. Вторая — TCP.

Сторона сервера

Далее код различается для стороны сервера и клиента. Рассмотрим сначала сторону сервера.

Здесь s.bind((‘127.0.0.1’, 8888)) означает, что мы резервируем на сервере (то есть на нашей же машине) адрес 127.0.0.1 и порт 8888. На нем мы будем слушать и принимать пакеты информации. Здесь стоят двойные скобки, так как методу bind() передается кортеж данных — в нашем случае состоящий из строки с адресом и номера порта.

Далее метод recv() объекта s прослушивает указанный нами порт (8888) и получает данные по одному килобайту (поэтому мы задаем размер буфера 1024 байта). Если на него присылают датаграмму, то метод считывает указанное количество байтов и они попадают в переменную result .

Далее идет всем знакомая функция print() , в которой мы выводим сообщение Message: и декодированный текст. Поскольку данные в result — это текст в кодировке UTF-8, мы должны интерпретировать его, вызвав метод decode(‘utf-8’) .

Ну и наконец, вызов метода close() необходим, чтобы остановить прослушивание 8888-го порта и освободить его.

Таким образом, сторона сервера имеет следующий вид:

Сторона клиента

Здесь все гораздо проще. Для отправки датаграммы мы используем метод класса socket (точнее, нашего экземпляра s ) под названием .sendto() :

У метода есть два параметра. Первый — сообщение, которое ты отправляешь. Буква b перед текстом нужна, чтобы преобразовать символы текста в последовательность байтов. Второй параметр — кортеж, где указаны IP машины-получателя и порт, который принимает датаграмму.

Таким образом, сторона клиента будет выглядеть примерно так:

Тестируем

Для тестирования открываем две консоли, одна у нас будет работать сервером, другая — клиентом. В каждой запускаем соответствующую программу.

Вывод на стороне сервера

На стороне клиента мы ничего увидеть не должны, и это логично, потому что мы ничего и не просили выводить.

Для теста мы передавали сообщение от одного порта другому порту на нашей же машине, но если запустить эти скрипты на разных компьютерах и на стороне клиента указать правильный IP, то все будет работать точно так же.

Используем TCP

Пришло время познакомится с TCP. Точно так же создаем класс s , но в качестве второго параметра будем использовать константу SOCK_STREAM .

Сторона сервера

Снова резервируем порт, на котором будем принимать пакеты:

Дальше появляется незнакомый нам ранее метод listen() . С его помощью мы устанавливаем некую очередь для подключенных клиентов. Например, с параметром .listen(5) мы создаем ограничение на пять подключенных и ожидающих ответа клиентов.

Делаем бесконечный цикл, в котором будем обрабатывать запросы от каждого нового клиента, находящегося в очереди.

Страшновато? Начнем по порядку. Сначала мы создаем обработчик исключения KeyboardInterrupt (остановка работы программы с клавиатуры), чтобы сервер работал бесконечно, пока мы что-нибудь не нажмем.

Метод accept() возвращает пару значений, которую мы помещаем в две переменные: в addr будут содержаться данные о том, кто был отправителем, а client станет экземпляром класса socket . То есть мы создали новое подключение.

Теперь посмотрим вот на эти три строчки:

В них мы останавливаем прослушивание и освобождаем порт, только если сами остановим работу программы. Если прерывания не произошло, то выполняется блок else :

Здесь мы сохраняем пользовательские данные в переменную result, а функцией print() выводим на экран сообщение, которое нам отправлял клиент (предварительно превратив байты в строку Unicode). В результате сторона сервера будет выглядеть примерно так:

Сторона клиента

Со стороной клиента опять же все обстоит проще. После подключения библиотеки и создания экземпляра класса s мы, используя метод connect() , подключаемся к серверу и порту, на котором принимаются сообщения:

Далее мы отправляем пакет данных получателю методом send() :

В конце останавливаем прослушивание и освобождаем порт:

Код клиента будет выглядеть примерно так:

Тестируем

Запустим в двух разных консолях код сервера и код клиента. На выходе мы должны получить примерно то же самое, что и с протоколом UDP.

Вывод на стороне сервера

Успех! Поздравляю: теперь тебе открыты большие возможности. Как видишь, ничего страшного в работе с сетью нет. И конечно, не забываем, что раз мы эксперты в ИБ, то можем добавить шифрование в наш протокол.

В качестве следующего упражнения можешь попробовать, например, написать чат на несколько персон, как на скриншоте.

Самодельный чат, вид со стороны сервера

Применяем знания на практике

Я дважды участвовал в InnoCTF, и работа с сокетами в Python очень пригождается при решении задач на взлом. По сути, все сводится к тому, чтобы очень много раз парсить поступающие данные с сервера InnoCTF и правильно их обрабатывать. Данные могут абсолютно любыми. Обычно это математические примеры, разные уравнения и прочее.

Для работы с сервером я использую следующий код.

Здесь мы сохраняем байтовые данные в переменную data , а потом преобразуем их из кодировки ASCII в строчке st = data.decode(«ascii») . Теперь в переменной st у нас хранится то, что нам прислал сервер. Отправлять ответ мы можем, только подав на вход строковую переменную, поэтому обязательно используем функцию str() . В конце у нее символ переноса строки — n . Далее мы все кодируем в UTF-8 и методом send() отправляем серверу. В конце нам обязательно нужно закрыть соединение.

Делаем полноценный reverse shell

От обучающих примеров переходим к реальной задаче — разработке обратного шелла, который позволит выполнять команды на захваченной удаленной машине.

При этом добавить нам нужно только вызов функции subprocess . Что это такое? В Python есть модуль subprocess, который позволяет запускать в операционной системе процессы, управлять ими и взаимодействовать с ними через стандартный ввод и вывод. В качестве простейшего примера используем subprocess, чтобы запустить блокнот:

Здесь метод call() вызывает (запускает) указанную программу.

Переходим к разработке шелла. В данном случае сторона сервера будет атакующей (то есть наш компьютер), а сторона клиента — атакованной машиной. Именно поэтому шелл называется обратным.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

С чего начать изучение Python: 3 первых шага

В прошлой статье мы рассказали, почему стоит изучать Python и какие он дает перспективы на рынке труда. Сегодня поможем сделать первые шаги в освоении Python.

Обучение в онлайн-университете: профессия «Python-разработчик»

Шаг 1. Разобраться в синтаксисе

Разработчики называют код на Python понятным и лаконичным. В этом нет ни грамма лести: всё в рамках философии программирования “The Zen of Python”. Тем не менее, немного поработать всё же придётся. Переменные, циклы, условия, функции, операторы — всё это можно назвать основой языка, без которой не обойтись.

Знакомиться с синтаксисом можно по-разному. Вот несколько способов, которые можем посоветовать:

— Читайте книги. Недавно мы публиковали подборку книг для тех, кто изучает Python. Чтобы было удобнее, разбили её на несколько частей: от самых азов до сложных практических задач. Пробуйте читать книги из списка и выбирайте самую подходящую по манере изложения и балансу между теорией и практикой.

— Штудируйте официальную документацию. Способ для тех, кто ладит с английским и готов довериться теории с официального сайта Python. Заходите в раздел «С чего начать» и двигайтесь от пункта к пункту.

— Смотрите обучающие видео на YouTube и образовательных платформах.

Шаг 2. Настроить среду разработки

Прежде чем запускать код, нужно его куда-то записать. Мы рекомендуем использовать для этих целей специальные программы — IDE (Integrated Development Environment). Они умеют искать ошибки, помогают ориентироваться в коде и дают полезные подсказки при вводе.

Но для первых попыток вам хватит repl.it — IDE, которая работает в облаке и умеет всё то же самое, что и PyCharm. Зайдите на http://repl.it.

Нажмите New repl и выберите Python из списка языков программирования. В результате получится такое:

Дальше всё просто: пишете код, нажимаете на кнопку Run — программа запускается. Если захотите показать кому-нибудь свою программу, жмите кнопку Share и копируйте ссылку из строки Share Link. В разделе с примерами вы ещё увидите такие ссылки и сможете их протестировать.

Шаг 3. Практиковаться-практиковаться-практиковаться

Если предыдущие шаги вас не испугали, начинайте писать код — чем больше, тем лучше. Ниже найдёте несколько примеров, которые придумали мы. Разберите их по частям и попробуйте понять, как всё работает.

Программирование на Python: пример простого расчета

Цель задач для начинающих — показать, что программировать могут все. Постепенно вы перейдёте к более прикладным и сложным задачам, собственным проектам и личному портфолио.

К примеру, на курсе Python-разработчик от Нетологии студенты за 6 месяцев создают 4 личных проекта: онлайн-библиотеку, кулинарную книгу, кредитный калькулятор и сервис знакомств. C таким портфолио устраиваться на работу намного легче.

Начните с простой математики: создавайте переменные, возводите их в степень, потом складывайте результат и выводите на экран — делайте всё, что приходит в голову. Перед тем, как запустить программу, попробуйте предсказать результат. Если совпадает, вы неплохо справляетесь.

Читать еще:  Обучение работы в программе excel
Ссылка на основную публикацию
Adblock
detector