Как шифровать свои данные и почему это важно делать?
Современные навыки хакеров превосходят все и вся. Вирусы в картинках, взломы баз данных пользователей, прозвоны, фишинг, ботнеты, программы - вымогатели и многое другое.
Наша цель заключается в том, чтобы достичь безопасного хранения данных на вашем компьютере или телефоне. Наверняка вы слышали, что пароли не стоит хранить в телефоне или в компьютере, так как в том случае, если злоумышленники получат доступ к вашим устройствам, то они спокойно смогут войти в ваше соц. сети, а если у вас еще и ко всем аккаунтам на разных платформах одинаковые пароли, то тут даже без комментариев о том, что может быть..
Перейдем к сути.
Существует много способ для безопасного хранения и передачи информации.
Их можно разделить на две категории:
1) криптография
2) стеганография
Каждая из этих категорий имеет подкатегории:
1.1 симметричное шифрование
1.2 асимметричное шифрование
1.3 хеширование (одностороннее шифрование без возможности дешифрования. Эта подкатегория нам не подходит)
1.4 гибридное шифрование
2.1 классическая стеганография
2.2 компьютерная стеганография
2.3 цифровоя стеганография
Данные подкатегории делятся еще на подкатегории, но это уже тема для отдельной статьи.
Сегодня мы будем разбирать раздел криптографии и асимметричное шифрование.
Раскрытие категории:
Криптография - наука изучающая методы шифрования информации и их использование.
Асимметричное шифрование (RSA - Rivest, Shamir, Adleman) - шифрование данных с помощью двух ключей, один из которых - открытый, а другой - закрытый.
Весь процесс шифрования и дешифрования происходит на основе математических формул и чисел. Пугаться не нужно, ничего сложно в этом нет.
Алгоритм:
1) Генерация двух простых чисел p и q.
2) Вычисление значения n, где n = pq.
3) Вычисление функции Эйлера. F = (p-1)(q-1).
4) Генерация экспоненты e, являющийся взаимно простым с F. (Наибольший общий делитель двух чисел равен 1)
5) Вычисление значения d, такое что (d*e) % F = 1. (% - остаток от деления)
Совокупность e и n является открытым ключом, а совокупность d и n – закрытым ключом.
Для шифрования информации необходимо преобразовать символы в числа удобным вам способом. Можно воспользоваться таблицей символов ASCII (смотреть скришот ниже) и использовать числовые значения для букв в столбике "DEC". Более простым способом является создание своих числовых значений для букв(A-1, B-2, C-3 и т. д.)
После преобразование всех символов в числовые значения начинаем их шифровать с помощью алгоритма написанного выше.
*Для удобства, числовое значение каждой буквы можно раделять точкой. *
Для шифрования сообщения:C = m**e%n
Для дешифрования сообщения:m = C**d%n
m - числовое значение символа
Пример:
Возьмём слово "шифр".
Алфавит: ш-12; и-18; ф-23; р-54
p = 3
q = 5
n = 3 * 5 = 15
F = (3-1) * (5-1) = 8
e = 7 (*gcd(7, 8) = 1)
d = 7 ((7*7) % 8 = 1)
*gcd - функция проверки того, что два числа являются взаимно простыми
Процесс шифрования:
Шифруем каждое числовое значение символа:
12 -> 12^7%15 = 3
18 -> 18^7%15 = 12
23 -> 23^7%15 = 2
54 -> 54^7%15 = 9
Зашифрованное сообщение: 3.12.2.9
Процесс дешифрования:
Дешифруем зашифрованные числовые значения букв:
3 -> 3^7%15 = 12
12 -> 12^7%15 = 18
2 -> 2^7%15 = 23
9 -> 9^7%15 = 9
Сопоставляем буквы в соответствии с кодами из алфавита (ш-12; и-18; ф-23; р-54) и получаем слово "шифр"
Важно соблюдать порядок зашифрованных кодов букв, иначе при дешифровке сообщение будет просто набор символов.
@tehnoin
Уже занимаюсь разработкой по внедрению данного алгоритма в телеграмм бота, который будет в абсолютно открытом доступе.
Список лучших бесплатных ресурсов для изучения этичного хакинга и кибербезопасности
Информационная безопасность (ИБ) или кибербезопасность – это одна из самых важных и актуальныхобластей современной науки и технологий. В условиях постоянного развития интернета, киберпреступности и глобальной информатизации, специалисты по информационной безопасности востребованы как никогда.
Бесплатные курсы по хакингу и информационной безопасности
ИБ занимаются защитой данных, систем и сетей от несанкционированного доступа, взлома, кражи, подделки и других угроз. Работа таких специалистов требует не только глубоких знаний в области математики, программирования, криптографии и юриспруденции, но и творческого мышления, аналитических способностей и умения решать сложные задачи.
Изучение информационной безопасности – это интересный и увлекательный процесс, который открывает перед вами множество возможностей для карьерного роста, профессионального развития и личностного совершенствования.
Платные курсы могут быть довольно дорогими, особенно если вы только начинаете изучать информационную безопасность. Тратить большие суммы денег на курсы может быть нецелесообразно.
В этой статье я собрал большой список курсов, книг, репозиториев и каналов на тематику кибербезопасности, которые помогут вам на пути становления белым хакером и подскажут какие перспективы вас ждут в этой области.🛡️
Бесплатные курсы по ИБ 🔒
1. Курс по Python для OSINT специалистов.
Курс является бесплатным и позволит тебе автоматизировать различные рутинные задачи, связанные с исследованиями: сбор данных с веб-сайтов, сбор результатов поиска, работа с интернет-архивами, создание отчетов и визуализация данных.
Основная цель курса — научить тратить меньше времени на рутинные задачи OSINT. Итак, в дополнение к примерам кода, автор делится ссылками на различные сервисы, которые помогут решить различные задачи.
Курс 🛡️
2. Cybersecurity for Beginners – a curriculum
Microsoft выпустила крутейший курс. Совешенно бесплатно Security-101 для изучения основ кибербезопасности.
Он подойдёт всем, кто желает ознакомиться с базовыми принципами защиты от киберугроз. Всего доступно семь уроков со статьями, видео и дополнительными материалами.
Курс 🛡️
3. Kali lInux: информационная безопасность
Популярный канал с разбором инструментов для этичного хакинга и пентеста, гайды по защите от атак, разбор скриптов, обучающие уроки и множество других полезных материалов .
Kali linux 🛡️
4. MindMap по пентесту с обучающим материалом на русском
Mindmap включает в себя инструменты, курсы, дистрибутивы, полезный видеоматериал и многое другое.
Mindmap 🛡️
5. Профессиональная сертификация ‘Google Cybersecurity’
Это ваш путь к карьере в сфере кибербезопасности. В рамках этой сертификационной программы вы овладеете востребованными навыками, которые помогут вам получить работу менее чем за 6 месяцев. Ученая степень или опыт не требуются. Бесплатно первые 7 дней при условии наличия международной карты, затем 45 евро/месяц.
Курс 🛡️
6. Математика в кибербезопасности
Онлайн-курс по математике в кибербезопасности для школьников от «Лаборатории Касперского». Расскажем и покажем, как комбинаторика, арифметика и булева алгебра применяются в криптографии – реальном направлении информационной безопасности.
Курс 🛡️
7. Курс: Исследование с NMAP
Nmap — легендарный сканер, без которого не может обойтись практически ни один хакер.
Это мощный и комплексный инструмент, код которого вылизывался десятилетиями. Он быстрый, надежный и невероятно функциональный.
Курс 🛡️
8. Hypervisor 101 in Rust
Материалы “Hypervisor 101 in Rust”, курса, позволяющего быстро освоить технологию аппаратной виртуализации и ее применение для высокопроизводительного фаззинга на процессорах Intel/AMD.
Github 🛡️
9. Кибербезопасность Stepik
О том, какие есть специалисты в кибербезопасности, чем они занимаются и как технологии могут использоваться в борьбе с киберкриминалом вы можете узнать в нашем курсе «Кибербезопасность». Спикерами в этом курсе выступили Олжас Сатиев (ЦАРКА) и Элисар Нурмагамбетов (Consilienz).
Курс 🛡️
10. Компьютерные сети, учебный курс
В этом обширном курсе (56 видео продолжительностью по 10 минут) рассматривается всё что касается организации, уровней и моделей компьютерных сетей. Вы познакомитесь с такими важными для специалиста ИБ понятиями, как протоколы, ip адреса, osi, топологии сетей, vlan, ethernet, udp, nat, http, dns ftp, imap и еще многим другим. Курс обязателен для каждого будущего специалиста по безопасности.
11. Папка с полезными каналами
Тут собрана целая папка с полезными каналами для тех, кто интересуется информационной безопасностью. Все в одном месте Linux, Иб, кодинг, сети, базы данных.
Папка 🛡️
12. Администрирование информационных систем
Данный онлайн-курс создан как дополнение к дисциплине “Администрирование информационных систем”, читаемой автором в ИГУ
Курс 🛡️
13. Cyber Ops Associate.
Кибербезопасность, курсы Сisco CCNA Cyber Ops · From lamer to programmer.
Курс 🛡️
14. Практики по компьютерным сетям
Курс является продолжением “Компьютерные сети, учебный курс”. В нем рассматриваются прикладные аспекты сетей, а также применение знания о них в сфере защиты данных. Курс также является базовым и будет очень полезен для тех кто начинает знакомится с компьютерными науками.
15. Go Hacking
Бесплатное комплексное онлайн-учебное пособие Go по взлому на архитектурах x64, ARM64 и ARM32, в котором шаг за шагом рассматриваются вопросы реинжиниринга Golang с нуля.
Курс 🛡️
16. Теоретические основы информационной безопасности
Курс со Stepik, который содержит общие сведения и понятия Информационной безопасности.
Курс 🛡️
17. Бесплатные курсы, книги и ресурсы Linux
Огромный список беспалтных ресурсов для изучения Linux. Полезное видео.
Ссылка 🛡️
18. Курс хакинга – Hacking
Очень полезный и простой курс для начинающих по этичному хакингу (134 урока).
Видео 🛡️
19. Introduction to Cyber Security
Изучите основы кибербезопасности с помощью этого курса “Введение в кибербезопасность”. Этот курс предназначен для начинающих, чтобы познакомить их с текущей ситуацией в области кибербезопасности и предоставить базовые знания о инструментах для оценки протоколов безопасности в системах обработки информации и управления ими.
Курс 🛡️
20. Linux Academy
Известный канал с гайдами по lInux с уклоном в этичный хакинг. Очень много полезного материала в одном месте.
Ссылка 🛡️
21. Основы документирования сетей
Этот мини-курс познакомит вас с редко раскрываемой в других учебных материалах темой: “как рисовать красивые схемы на примере типового дизайна сети”.
22. Введение в теорию защиты информации
Курс МДК.03.01 Технические методы и средства, технологии защиты информации входит в предметный модуль ПМ.03 Программно-аппаратные и технические средства защиты информации.
Курс 🛡️
23. Защита информации от МФТИ
В курсе рассматриваются математические основы криптографии, криптографические примитивы и их современные реализации, математические и прикладные криптографические протоколы, а так же защита данных в современных информационных системах. Курс состоит из 14 лекций. Для успешного освоения курса желательно понимание основ теории групп и информатики.
24. Полный курс по этичному хакингу
На курсе вы узнаете: как применять язык Python для этичного взлома, создадите свой сканер портов, изучите Пассивный OSINT, будете активно пользоваться линукс, познакомитесь с передачей хэша и файлов, познакомитесь с Hashcat и еще многое другое.
25. Этичный хакинг Wi-Fi
На курсе подробно рассматривается влом Wi-Fi сетей, сканирование и прошивка роутера, так же показано каким атакам могут подвергаться wifi и как от них защищаться.
26. Этичный хакинг
Во время прохождения курса вы познакомитесь с практическими приемами этичного хаккинга, взломом веб-серверов и систем, познакомитесь с LogParser и OWASP, также узнаете как проводить SQL-инъекции и даже взломаете почтовый сервер.
27. be-a-hacker
Подробная дорожная карта для хакера-самоучки.
Курс 🛡️
28. Введение в кибербезопасность
На курсе вы познакомитесь с возможностями криптографии и сетевого шифрования, научитесь оценивать картину угроз и способы борьбы с ними, узнаете, как повысить безопасность вашей сети и защитить ваши данные при их перемещении по Интернету (познакомитесь с маршрутизаторами VPN, IDS).
29. Инженер по безопасности
Вы освоите базовые навыки, необходимые для того, чтобы стать инженером по безопасности. Эта программа будет посвящена тому, как защитить компьютерные системы, сети, приложения и инфраструктуру компании.
30. h4cker
Этот репозиторий представляет собой обширную коллекцию ссылок, скриптов, инструментов, кода и других ресурсов, связанных с кибербезопасностью. Он тщательно контролируется, поддерживается и постоянно обновляется.
Курс 🛡️
31. Компьютерные сети. Продвинутые темы
Курс продолжает серию уроков по сетям Андрея Созыкина. В нем рассматриваются более сложные для понимания темы сетей, поэтому сначала необходимо посмотреть первые 2 части. По мере прохождения данной серии продвинутых лекций вы узнаете о таких темах, как: IPv6, NDP, RIP, OSPF, протоколы маршрутизации, BGP, Web сокеты.
32. OpenSecurityTraining2
Очень серьезные курсы за авторством опытных людей из индустрии.
33. Защищенные сетевые протоколы
Курс продолжает серию уроков по сетям Андрея Созыкина. В нем рассматриваются такие темы, как TLS/SSL, HTTPS. Курс полностью покрывает все аспекты защищенных сетевых протоколов и рекомендуем к просмотру после ранее упомянутых учебных материалов того же автора
Заключение
Надеюсь, что представленные в статье курсы помогут всем энтузиастам погрузиться в мир этичного хакинга и улучшить свои навыки информационной безопасности. Желаю всем учащимся успешного обучения и достижения новых высот в этой увлекательной области!
Если у вас есть информация о других отличных курсах или ресурсах, не стесняйтесь делиться ими в комментариях. Ваша обратная связь поможет автору расширить список рекомендаций и сделать его еще более полезным для всех желающих изучать этичный хакинг и информационную безопасность.
Сохраняйте себе этот список, чтобы не потерять)
Вы хотите головоломок?
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Конвертируем два списка в словарь с помощью функции zip()
Порой сталкивался с задачей объединить два списка в словарь, в Python для этого есть замечательная функция zip().
Используем элементы первого списка в качестве ключей для словаря, а элементы второго - в качестве значений.
fruits = ["Banana", "Apple", "Kiwi", "Mango"]
prices = [1.08, 2.32, 3.03, 1.97]
fruit_dictionary = dict(zip(fruits, prices))
print(fruit_dictionary)
{'Banana': 1.08, 'Apple': 2.32, 'Kiwi': 3.03, 'Mango': 1.97}
Ниже прикреплю картинку с кодом
Решаем задачи с собесов на Джуниор разработчика. Подробно разбираем код. Числа Фибоначчи
Всем привет) сегодня напишем программу для нахождения первых n чисел Фибоначчи и увидим одну из примечательных особенностей специального символа end. Приступим)
Первоначально пройдемся по теории. Числа Фибоначчи — это последовательность чисел, которые задаются по определённому правилу. Оно звучит так: каждое следующее число равно сумме двух предыдущих. Первые два числа заданы сразу и равны 0 и 1.
Вот как выглядит последовательность Фибоначчи:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, … , ∞
Более подробно можно почитать тут
Формула для нахождения
На Python существует несколько разновидностей реализации алгоритма нахождения, но мы рассмотрим в рамках этой статьи самый простой. Начнем наш ряд с единицы. Если вы захотите поделиться своей версией алгоритма то можете опубликовать в комментариях)
Приступим к реализации, для начала создадим 2 переменные fib1, fib2 и присвоим им первоначальные значения, обе будут равны единице:
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
Далее спрашиваем у пользователя сколько чисел необходимо вывести, записываем в переменную n как тип данных int.
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр
Выводим первоначальные числа которые записаны в переменные fib1 и fib2, заметим что в конце используем символ end, в данном случае он вставляет пробел между строками и предоставляет нам возможность продолжить дополнять текст в одну строку.
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр
print(fib1, fib2, end = " ") # выводим первые 2 числа
Создаем цикл для поиска остальных чисел от 2 (так как 2 первых значения уже есть) до n (количество выводимых чисел, не забываем про ошибку на еденицу)
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр
print(fib1, fib2, end = " ") # выводим первые 2 числа
for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух
Теперь подходим к самому главному выражению в цикле, присваиваем fib1 будет равно fib2 а fib2 = fib1 + fib2 таким образом при каждой итерации цикла fib2 будет равняться предыдущее число + текущее. Отступы в цикле обозначил как " > > "
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр
print(fib1, fib2, end = " ") # выводим первые 2 числа
for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух
> > fib1, fib2 = fib2, fib1 + fib2 # выполняется в цикле
Теперь включаем полученное значение fib2 в наш список, благодаря end мы склеиваем строки в одну строку.
fib1 = fib2 = 1 # первоначальные значения fib1 и fib2
n = int(input("Введите количество выводимых чисел: ")) # присваиваем пременной n значение количества выводимых цифр
print(fib1, fib2, end = " ") # выводим первые 2 числа
for i in range (2, n): # и так как первоначальные значения уже вывели продолжим с двух
> > fib1, fib2 = fib2, fib1 + fib2 # fib1 = fib2 а fib2 = fib1 +fib2
> > print(fib2, end = " ") # вывод полученного значения
Запускаем код и любуемся результатом:
Все наша программа готова! Знаю что можно написать ее другими способами (рекурсией) но решил объяснить через циклы так как для новичков это проще. Ниже опубликовал картинку с кодом.
Картинка с кодом
Также можно поиграться с кодом в онлайн интерпретаторе - тык
Мой канал по python: https://t.me/python_scrypt (полезная инфа, обзор библиотек)
Если статья информативная то прошу поддержать плюсом) всем спасибо за просмотр!)
Получение адреса по координатам с помощью Python
Получение адреса по координатам, довольно полезная функция, которую можно использовать в различных целях. Например, вам скинули геолокацию. Можно сделать телеграм-бота, отправить ему полученные данные и в ответ получить адрес. Данный функционал можно реализовать на Python. Давайте посмотрим, как это можно сделать.
Для получения адреса по геолокации будем использовать библиотеку geopy. В ней реализованы классы для работы с сервисами геокодирования, такими как OpenStreetMap Nominatim, Google Geocoding API (V3) и многими другими. В нашем коде мы будем использовать OpenStreetMap, так как его использование бесплатно и не требует получения дополнительных ключей.
Установка библиотеки
Для установки библиотеки пишем в терминале команду:
pip install geopy
Импорт модулей в скрипт
После того, как библиотека будет установлена, необходимо импортировать модули для работы с ней в скрипт. Пишем следующий код:
Получаем адрес по координатам. Обратное геокодирование
Создадим функцию get_addr(location: list) -> str, которая на входе получаем широту и долготу в виде списка, а возвращает адрес в виде строки. В случае ошибки будет возвращен текст «Unknown».
После этого инициализируем класс Nominatim и передаем в него user_agent. Здесь использование какого-то специализированного агента не принципиально и можно просто передать «GetLoc». Если мы заглянем в параметры данного класса, то увидим, что в него, кроме user_agent можно передать таймаут, прокси и еще множество других параметров, которые в данном случае не принципиальны.
Обратимся к инициализированному классу и его методу reverse, в который передадим координаты в виде списка с широтой и долготой. В ответ мы получим адрес, который и возвратим из функции, обратившись к методу address.
Запрос координат у пользователя. Вывод полученного адреса в терминал
Создадим функцию main(), в которой будем запрашивать широту и долготу у пользователя. После передадим их в функцию get_addr и выведем полученный результат в терминал. Здесь необходимо немного обработать полученные данные, так как они возвращаются в обратном порядке, начиная с номера дома и заканчивая страной. Поэтому, добавлена обратная сортировка, разбиение строки по запятой в список и обратное его объединение.
Тестирование функции
Протестируем написанный код. Возьмем произвольные координаты объекта с Яндекс.Карты и введем в запросе скрипта. В ответе мы видим полученный адрес, который совпадает с тем, что указан на Картах.
Итог:
Как видим, с помощью использования сторонней библиотеки получить адрес по координатам не такая уж сложная задача. К слову, возникновение исключений, когда адрес не был найден, происходит достаточно редко. В большинстве случаев все отрабатывает корректно.
Простой способ извлечения изображений из документов MS и Libre Office
Стандарт Open Document стал де-факто уже давно. И если раньше формат документов Microsoft Office был проприетарным, то теперь он представляет собой «.zip»-файл в котором храниться множество «.xml», а также изображения и прочие файлы. Конечно же, самым простым способом извлечь документы является изменение расширения документа на «.zip» и последующее извлечение файлов любым архиватором. Но, если вам нужно сделать это не с одним документом, это может быть достаточно продолжительно по времени. Поэтому, давайте рассмотрим несколько способов, с помощью которых можно извлечь изображения из файлов формата ".docx", ".xlsx", ".pptx", ".odp", ".ods", ".odt".
Способ №1: используем стандартные библиотеки python
Для данного способа не требуется установка сторонних библиотек. Достаточно тех, что поставляются в комплекте с самим интерпретатором.
Создадим файл extract.py.
Импортируем нужные нам в процессе работы библиотеки:
Создадим функцию image_extract(in_zip: zipfile, out_dir: Path), в которую будем передавать zip-файл, а также путь к директории в которую будут распакованы изображения. В данном случае путь у пользователя запрашиваться не будет.
Объявим переменную cnt, которая будет счетчиком распакованных изображений. Затем в цикле пробежимся по списку содержимого архива. Проверим расширения файлов в архиве. И если они совпадают с расширениями из списка, будем читать текущий файл с изображением и сохранять в байтовом режиме в директорию, которая передается в функцию. Также, данная директория создается автоматически и называется именем исходного документа. После того, как все изображения будут сохранены, возвращаем из функции наш счетчик.
Осталось дело за малым, запросить у пользователя путь к файлу, проверить, является ли он файлом и имеет ли нужный формат. После чего скопировать файл с расширением «.zip», открыть с помощью zipfile и передать в функцию для поиска изображений и их распаковки. Ну и напоследок удалить скопированный zip-файл.
После окончания извлечения изображений вывести сообщение пользователю о том, сколько файлов было извлечено и в какую директорию.
Полный код скрипта:
Протестируем созданный скрипт. У нас есть, для примера документ «CustomTkinter.docx». В нем содержаться несколько изображений. Вот их мы и попробуем извлечь.
Запускаем скрипт, указываем путь к документу и получаем папку с названием документа, в которой содержаться изображения.
Способ №2: используем библиотеку docx2txt
Создадим файл docx2im.py. В данном случае мы будем использовать стороннюю библиотеку docx2txt. Для ее установки пишем в терминале или командной строке:
Теперь импортируем нужные библиотеки в скрипт.
В данном случае нам не понадобиться создавать дополнительных функций. Сделаем все в одной. Хотя, в теории, можно было бы разделить извлечение изображений и текста. Да, дополнительным бонусом, при том, что извлекаются изображения только из документов «.docx», является извлечение текста.
Для начала запросим у пользователя путь к документу и путь к папке для извлечения изображений. Проверим, является ли переданный параметр путем к документу и является ли расширение данного документа «.docx». Затем проверим, существует ли директория для извлечения изображений. Если нет, создадим ее, так как docx2txt ее самостоятельно не создает.
Теперь передаем путь к документу и путь для извлечения изображений в функцию process данной библиотеки. Из нее будет возвращен текст документа. Проверим, содержится ли в переменной text что-нибудь. Для этого обрежем пробелы и знаки переноса каретки, так как, если в документе нет текста, но есть пустая строка, переменна text не будет пуста.
Затем открываем текстовый документ на запись и записываем в него полученный текст.
Этот способ достаточно простой, но, как вы уже поняли, извлекать изображения из других форматов документов он не умеет.
Думаю, что вышеприведенных скриптов будет достаточно. Можно использовать также библиотеку aspose-words, которая устанавливается с помощью команды:
pip install aspose-words
Однако, способ извлечения с ее помощью изображений не особо отличается от предыдущих. Создадим файл aspose_extract.py. Вот для примера код:
Выбирать, что использовать вам и в каком виде, конечно же, вам. Здесь описаны только несколько способов, с помощью которых можно проделать данную операцию. Скорее всего, если поискать более тщательно, найдется еще множество библиотек, с помощью которых можно извлечь изображения из документов.
А на этом все. Спасибо за внимание.
Надеюсь, данная информация будет вам полезна.
Что надо успеть за выходные
Выспаться, провести генеральную уборку, посмотреть все новые сериалы и позаниматься спортом. Потом расстроиться, что время прошло зря. Есть альтернатива: сесть за руль и махнуть в путешествие. Как минимум, его вы всегда будете вспоминать с улыбкой. Собрали несколько нестандартных маршрутов.
Получаем ip-адрес из requests (python)
Когда мы получаем какую-либо информацию о домене, в числе прочих параметров мы узнаем его ip-адрес. И получить его с помощью python не составляет большого труда. Однако давайте рассмотрим, как, не используя прямое обращение к сокету получить ip-адрес непосредственно из запроса.
Зачастую, чтобы получить ip-адрес мы используем socket. И в случае, когда нам требуется выполнение только данной операции этого вполне достаточно.
Но можно поступить несколько иначе, особенно если мы уже получаем какие-либо данные с сервера. Хотя бы те же заголовки. Давайте на примере посмотрим, как реализовать получение доступа к необработанному объекту сокета.
Установка необходимых библиотек
В данном случае нам понадобиться библиотека requests. Для ее установки пишем в терминале:
Импорт библиотек в скрипт. Создание заголовков для запроса
После того, как установлены необходимые библиотеки, нам их нужно импортировать в скрипт. В данном случае, так как мы установили библиотеку requests, импортируем ее.
После этого создадим словарь с заголовками содержащими «User-Agent» и «Accept». Их мы будем передавать в запрос в качестве параметра, чтобы изменить стандартные заголовки отправляемые python.
Получаем заголовки и ip-адрес
Создадим функцию get_domain_info(domain: str) -> (dict, bool), которая на входе будет получать домен, а возвращать заголовки отправленные сервером, а также ip-адрес домена.
Выполним запрос на получение заголовков, куда передадим адрес домена, заголовки. Укажем свойство allow_redirects = True. Это сделано для того, чтобы производилась переадресация. То есть, в данном случае мы делаем следующее: так как мы не знаем точного адреса сайта, доменное имя которого передано в функцию, поступим как браузер. Для начала пойдем по протоколу http. Если на сервере включена переадресация, то мы будем автоматически переадресованы на нужный адрес. Также, stream=True. Это необходимо для получения ip-адреса из запроса.
Обработаем исключение raise_for_status(), чтобы отсекать ненужные статус-коды. В случае же, когда код 200, получим ip и порт, которые возвращаются в кортеже при выполнении следующего кода: res.raw._connection.sock.getpeername(). Важно то, что эти данные необходимо получить в самом начале, до обработки остальных данных запроса, то есть в первую очередь. И уже после получим частично содержимое из заголовков отправленных сервером. Вернем пользователю словарь из полученных данных. В случае же неудачи или неверного статус-кода, вернем из функции False.
Ну и создадим функцию main, где и будем запрашивать у пользователя домен, отправлять его в функцию для получения информации и выводить на печать полученные в виде словаря данные.
Здесь я не проверяю полученную информацию, так как данный код служит примером. Если вы попробуете получить ip-адрес с помощью socket, результат, зачастую, будет одинаковым. Однако, если вы увидите, что адреса различаются, то не считайте это ошибкой. Я проверял специально данные, получая информацию от DNS. Тут дело в том, что на одном домене может быть несколько NS-серверов. И в этом случае возвращается значение ближайшего. Ну или свободного. В данном случае механизм для меня пока еще не совсем понятен. Главное, что и тот, и тот адреса являются правильными.
Полный код скрипта
Протестируем написанный код и получим заголовки и ip-адрес для домена python.org.
Результат работы скрипта
Как видим, скрипт отработал правильно и вернул ip-адрес, а также информацию из полученных заголовков.
А на этом, пожалуй, все.
Спасибо за внимание. Надеюсь, данная информация будет вам полезна!
Подписывайся на наши телеграм каналы! У нас много полезного!
Код скрипта можно забрать тут!