Как получить имя компьютера python

Обновлено: 17.07.2024

Различная информацию об операционной системе и языке Python.

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

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

Модуль platform включает в себя инструменты для получения сведений об аппаратной платформе, операционной системе и интерпретаторе на которой выполняется программа.

Содержание:

    Кроссплатформенные функции:
      platform.architecture() , platform.machine() , platform.node() , platform.platform() , platform.processor() , platform.python_build() , platform.python_compiler() , platform.python_branch() , platform.python_implementation() , platform.python_revision() , platform.python_version() , platform.python_version_tuple() , platform.release() , platform.system() , , platform.version() , platform.uname() ,
      platform.java_ver() ,
      platform.win32_ver() , platform.win32_edition() , platform.win32_is_iot() ,
      platform.mac_ver() ,
      platform.libc_ver() ,
      platform.freedesktop_os_release() (доступна в Python 3.10).

    Кроссплатформенные функции.

    Функция platform.architecture() запрашивает исполняемый файл executable для получения различной информации об архитектуре. По умолчанию двоичный файл интерпретатора Python.

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

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

    Примечание.
    В Mac OS X (и, возможно, на других платформах) исполняемые файлы могут быть универсальными файлами с несколькими архитектурами. Чтобы получить 64-разрядность текущего интерпретатора, более надежно запросить атрибут sys.maxsize :

    platform.machine() :

    platform.node() :

    Функция platform.node() возвращает сетевое имя компьютера, может быть не полностью! Если значение не может быть определено, то возвращается пустая строка..

    platform.platform(aliased=0, terse=0) :

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

    Вывод предназначен для чтения человеком, а не для машинного анализа. Это может выглядеть по-разному на разных платформах, и это предназначено.

    Если aliased имеет значение True , функция будет использовать псевдонимы для различных платформ, которые сообщают имена систем, которые отличаются от их общих имен, например SunOS будет сообщаться как Solaris.

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

    platform.processor() :

    Возвращается пустая строка, если значение не может быть определено. Обратите внимание, что многие платформы не предоставляют эту информацию или просто возвращают то же значение, что и для platform.machine() .

    platform.python_build() :

    Функция platform.python_build() возвращает кортеж (buildno, builddate) с указанием номера и даты сборки Python в виде строк.

    platform.python_compiler() :

    Функция platform.python_compiler() возвращает строку, идентифицирующую компилятор, используемый для компиляции Python.

    platform.python_branch() :

    Функция platform.python_branch() возвращает строку, идентифицирующую ветвь SCM реализации Python.

    platform.python_implementation() :

    Функция platform.python_implementation() возвращает строку, идентифицирующую реализацию Python. Возможные возвращаемые значения: ‘CPython’ , ‘IronPython’ , ‘Jython’ , ‘PyPy’ .

    platform.python_revision() :

    Функция platform.python_revision() возвращает строку, идентифицирующую ревизию SCM реализации Python.

    platform.python_version() :

    Обратите внимание, что в отличие от Python sys.version() , возвращаемое значение всегда будет включать уровень исправления (по умолчанию 0).

    platform.python_version_tuple() :

    Функция platform.python_version_tuple() возвращает версию Python как кортеж (major, minor, patchlevel) строк.

    Обратите внимание, что в отличие от Python sys.version, возвращаемое значение всегда будет включать уровень исправления (по умолчанию он равен 0).

    platform.release() :

    platform.system() :

    platform.system_alias(system, release, version) :

    Функция platform.system_alias() возвращает (system, release, version) , связанные с общими маркетинговыми именами, используемыми в некоторых системах.

    platform.version() :

    platform.uname() :

    Функция platform.uname() представляет портативный интерфейс команды uname. Возвращает именованный кортеж, содержащий шесть атрибутов: system , node , release , version , machine и processor .

    Обратите внимание, что функция platform.uname() добавляет шестой атрибут ( processor ), отсутствующий в результате os.uname(). Кроме того, имена атрибутов отличаются для первых двух атрибутов. Функция оs.uname() называет их sysname и nodename .

    Функции платформы Java

    Функция platform.java_ver() возвращает версию интерфейса для Jython.

    Функции платформы Windows

    Функция platform.win32_ver() получает дополнительную информацию о версии из реестра Windows и возвращает кортеж (release, version, csd, ptype) , относящийся к выпуску ОС, номеру версии, уровню CSD (пакет обновления) и типу ОС (многопроцессорный/однопроцессорный).

    Примечание. Эта функция лучше всего работает с установленным пакетом win32all Марка Хаммонда. Очевидно, что функция platform.win32_ver() работает только на Win32-совместимых платформах.

    platform.win32_edition() :

    platform.win32_is_iot() :

    Функция platform.win32_is_iot() возвращает True , если версия Windows, возвращенная platform.win32_edition() , распознается как версия IoT .

    Функции платформы Mac OS.

    Функция platform.mac_ver() Получите информацию о версии Mac OS и возвращает ее как кортеж (release, versioninfo, machine) , а versioninfo так-же является кортежем (version, dev_stage, non_release_version) .

    Функции платформы Unix.

    Функция platform.libc_ver() пытается определить версию libc , с которой связан исполняемый файл, по умолчанию интерпретатор Python.

    Возвращает кортеж строк (lib, version) , которые по умолчанию соответствуют заданным параметрам в случае сбоя поиска.

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

    Файл читается и сканируется кусками байтов.

    Функции платформы Unix.

    platform.freedesktop_os_release() :

    Вызывает ошибку OSError или подкласс OSError , если невозможно прочитать ни /etc/os-release , ни /usr/lib/os-release .

    В случае успеха функция возвращает словарь, в котором ключи и значения являются строками. В значениях есть специальные символы, такие как " и $ без кавычек. Поля NAME , ID и PRETTY_NAME всегда определяются в соответствии со стандартом. Все остальные поля являются необязательными. Поставщики могут включать дополнительные поля.

    Обратите внимание, что такие поля, как NAME , VERSION и VARIANT , представляют собой строки, подходящие для представления пользователям. Программы должны использовать такие поля, как ID , ID_LIKE , VERSION_ID или VARIANT_ID для идентификации дистрибутивов Linux.

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

    использовать socket и gethostname() функциональность. Это получит hostname компьютера, на котором работает интерпретатор Python:

    оба они довольно портативные:

    любые решения, используя HOST или HOSTNAME переменные среды не портативный. Даже если он работает в вашей системе при запуске, он может не работать при запуске в специальных средах, таких как cron.

    вы, вероятно, загрузите модуль ОС в любом случае, поэтому другое предложение будет:

    он всегда (даже в Windows) возвращает полное имя хоста, даже если вы определили короткий псевдоним в /и т. д./хосты.

    если вы определили псевдоним в /и т. д./хосты затем socket.gethostname() возвращает псевдоним. platform.uname()[1] делает то же самое.

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

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

    На самом деле вы можете посмотреть на весь результат в platform.uname()

    Если я прав, вы ищете сокет.функция функцией gethostname:

    socket.gethostname() можно сделать

    в некоторых системах имя хоста задается в среде. Если это так для вас, то модуль ОС может вытащить его из окружающей среды через os.функции getenv. Например, если HOSTNAME-это переменная среды, содержащая то, что вы хотите, ее получит следующее:

    Update: как отмечено в комментариях, это не всегда работает, так как не все среды настроены таким образом. Я считаю, что в то время я изначально ответил я использование этого решения, как это было первое, что я нашел в веб-поиске, и это сработало для меня в то время. Из-за отсутствия переносимости я, вероятно, не использовал бы это сейчас. Однако я оставляю этот ответ для справочных целей. FWIW, это устраняет необходимость в других импортах, если ваша среда имеет имя системы, и вы уже импортируете модуль ОС. Протестируйте его - если он не работает во всех средах, в которых вы ожидаете, что ваша программа будет работать, используйте одно из других решений предоставлена.

    вы можете использовать поле nodename и избегайте использования индексации массива:

    хотя, даже документация os.команде uname предлагает использовать socket.gethostname()

    Мне нужно было имя ПК для использования в моем файле pylog conf, и библиотека сокетов недоступна, но библиотека ОС доступна.

    Как получить имя вашей рабочей станции

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

    Это было довольно безболезненно, верно? Только две строки кода, и у нас есть то, что нам нужно. Но есть на самом деле, по крайней мере, еще один способ получить это:

    Этот фрагмент также чрезвычайно прост, хотя первый немного короче. Все, что нам нужно было сделать, это импортировать встроенный розетка Модуль и позвоните его GetHostName метод. Теперь мы готовы получить IP-адрес нашего ПК.

    Как получить IP-адрес вашего ПК с Python

    Мы можем использовать информацию, которую мы выбрали выше, чтобы получить IP-адрес нашего ПК:

    В этом примере мы снова используем розетка Модуль, но на этот раз мы его GetHostbyName Способ и пройти во имя ПК. розетка Затем модуль вернет IP-адрес.

    Вы также можете использовать Тим Золотой WMI модуль Отказ В следующем примере исходит от его замечательной кулинарной книги WMI:

    Все, что он делает, если петля по установленным сетевым адаптерам и распечатает их соответствующие описания и IP-адреса.

    Как получить MAC-адрес с Python

    Теперь мы можем обратить наше внимание на получение MAC-адреса. Мы посмотрим на два разных способа получить его, начиная с рецепта ActiveState:

    Поскольку я не писал код выше, я не буду входить в него в глубину. Тем не менее, я понимаю, что этот сценарий работает с первой проверкой, чтобы увидеть, может ли он сделать запрос ARP, который доступен только в Windows 2000 и выше. После того, как это подтвердило, он пытается использовать модуль CTYPES, чтобы получить адрес INET. После этого сделано, он проходит через некоторые вещи, которые я не понимаю, чтобы построить MAC-адрес.

    Когда я впервые начал поддерживать этот код, я думал, что должен быть лучший способ получить MAC-адрес. Я думал, что, возможно, модуль WMI Tim Golden WMI или, возможно, пакет Pywin32 будет ответом. Я довольно уверен, что он дал мне следующий фрагмент или я нашел его на одном из архивов списка рассылки Python:

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

    Как получить имя пользователя

    Получение входа в текущее имя пользователя с Python Trivial. Все, что вам нужно, это Pywin32 пакет Отказ

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

    Как найти, какие группы пользователь в

    Мы можем использовать UserID, который мы приобрели выше, чтобы узнать, какие группы это в.

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

    Мы передаем PDCName и UserID в GetObject (что является частью модуля Win32Com), чтобы наш пользовательский объект. Если это работает правильно, то мы можем получить полное имя и группы пользователя. Если он не удается, то мы ловим ошибку и попытаемся получить информацию с некоторыми функциями из модуля Win32Net. Если это также не удается, мы просто устанавливаем некоторые значения по умолчанию.

    Обертывание

    Надеюсь, вы узнали некоторые ценные трюки для использования в вашем собственном коде. Я использовал эти сценарии в течение нескольких лет с Python 2.4+, и они отлично работают!

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

    Используйте socket и gethostname() функциональность. Это получит hostname компьютера, на котором запущен интерпретатор Python:

    Оба из них довольно портативны:

    Любые решения, использующие переменные среды HOST или HOSTNAME , не являются переносимыми. Даже если он работает в вашей системе при запуске, он может не работать при работе в специальных средах, таких как cron.

    В любом случае вы, вероятно, загрузите модуль os, поэтому еще одно предложение:

    Он всегда (даже в Windows) возвращает полное имя хоста, даже если вы определили короткий псевдоним в /etc/hosts.

    Если вы определили псевдоним в /etc/hosts, то socket.gethostname() вернет псевдоним. platform.uname()[1] делает то же самое.

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

    Сначала он вызывает gethostname, чтобы увидеть, возвращает ли он что-то похожее на имя хоста, если оно не использует мое исходное решение.

    На самом деле вы можете посмотреть на весь результат в platform.uname()

    Если я прав, вы ищете функцию socket.gethostname:

    В некоторых системах имя хоста устанавливается в среде. Если это так, os module может вывести его из среды через os.getenv. Например, если HOSTNAME - это переменная среды, содержащая то, что вы хотите, следующее ее получит:

    Обновление. Как отмечено в комментариях, это не всегда работает, поскольку не все настройки среды настроены таким образом. Я считаю, что в то время, когда я сначала ответил на это, я использовал это решение, поскольку это было первое, что я нашел в веб-поиске, и это работало для меня в то время. Из-за отсутствия переносимости я, вероятно, не использовал бы это сейчас. Однако я оставляю этот ответ для справки. FWIW, он устраняет необходимость в других импортах, если ваша среда имеет имя системы, и вы уже импортируете модуль os. Проверьте его - если он не работает во всех средах, в которых вы ожидаете, что ваша программа будет работать, используйте один из других предоставленных решений.

    Получение информации о системе удаленно с Python

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

    Что­бы прос­то пос­мотреть IP-адрес и дру­гие нас­трой­ки сети, вам при­дет­ся обра­тить­ся к коман­дной стро­ке и выпол­нить коман­ду ipconfig / all . Ситу­ация одна из самых час­тых для эни­кей­щиков и уда­лен­ных шаманов, но она хотя бы быс­тро реша­ема. Но если при­дет­ся собирать более серь­езный набор информа­ции о машине, с которой сей­час будете работать, — без авто­мати­зации не обой­тись. Этим мы сегод­ня и зай­мем­ся.

    Сбор информации о системе удаленно с помощью Python

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

    Инструменты

    Сна­чала давайте раз­берем­ся, где будем писать код. Мож­но кодить в обыч­ном вин­довом «Блок­ноте», но мы вос­поль­зуем­ся спе­циаль­ной IDE для Python — PyCharm. Уста­нов­ка и нас­трой­ка прос­ты как два руб­ля: ска­чал уста­нов­щик, запус­тил — и кли­кай себе «Далее», пока есть такая кноп­ка.

    Еще нам пот­ребу­ется Python. Я буду исполь­зовать вер­сию 3.9.0 — с ней точ­но все работа­ет.

    Задачи

    Да­вай сна­чала обри­суем, что мы вооб­ще пла­ниру­ем делать. Я пла­нирую собирать сле­дующую информа­цию:

    1. IP-адрес.
    2. MAC-адрес.
    3. Имя поль­зовате­ля.
    4. Тип опе­раци­онной сис­темы.
    5. Ско­рость работы сис­темы.
    6. Вре­мя.
    7. Скрин­шот.
    8. Ско­рость интернет‑соеди­нения.
    9. Мо­дель про­цес­сора.

    И отправ­лять­ся это все будет пря­миком вам в телегу через спе­циаль­ный бот.

    Зачем?

    На­вер­няка у вас воз­ник воп­рос: зачем может понадо­бить­ся MAC-адрес или модель про­цес­сора? Эти парамет­ры меня­ются очень и очень ред­ко, так что прек­расно под­ходят для фин­гер­прин­тинга. Даже если поль­зователь купит более быс­трый интернет‑канал или поменя­ет часовой пояс, вы без осо­бого тру­да смо­жете опре­делить, что уже имел дело с этим компь­юте­ром. Сто­ит пом­нить, что ров­но такие же методы исполь­зуют хит­рые рек­ламщи­ки для иден­тифика­ции поль­зовате­лей, да и раз­работ­чики три­аль­ных вер­сий прог­рамм тоже. Эта статья поможет чуть луч­ше понять, что мож­но узнать о вашем компь­юте­ре в пол­ностью авто­мати­чес­ком режиме, а как при­менить эту информа­цию — решать толь­ко вам.

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

    Создаем основу программы

    Для отправ­ки дан­ных я решил вос­поль­зовать­ся Telegram-ботом. Соз­дать его вы можете через BotFather, а пос­ле сох­ранить token вашего тво­рения. Пуб­ликовать его нель­зя — любой, кто получит этот токен, смо­жет зах­ватить кон­троль над вашим ботом.

    Для под­клю­чения к Bot API «телеги» нуж­ны все­го две строч­ки:

    Что­бы оце­нить быс­тро­дей­ствие, мож­но написать еще пару строк. Весь даль­нейший код рас­положим меж­ду ними. Опи­сан­ное выше под­клю­чение бота уже впи­сано сюда.

    Те­перь перей­дем собс­твен­но к сбо­ру дан­ных.

    Сбор данных

    Те­перь крат­ко рас­смот­рим, что дела­ет каж­дый модуль. Если какие‑то фун­кции вам не нуж­ны, выб­росите стро­ку импорта модуля и код, который исполь­зует этот модуль. Все прос­то!

    Итак, за работу с ОС и локаль­ными ресур­сами отве­чают эти 4 модуля:

    • getpass нужен для опре­деле­ния информа­ции о поль­зовате­ле;
    • os исполь­зуем для вза­имо­дей­ствия с фун­кци­ями ОС, вро­де вызова внеш­них исполня­емых фай­лов;
    • psutil работа­ет с некото­рыми низ­коуров­невыми сис­темны­ми фун­кци­ями;
    • platform пре­дос­тавит информа­цию об ОС.

    Эти­ми модуля­ми реали­зова­ны сетевые вза­имо­дей­ствия:

    • socket — для работы с сокета­ми и получе­ния IP-адре­сов;
    • getnode получа­ет MAC-адрес машины;
    • speedtest замеря­ет харак­терис­тики интернет‑соеди­нения;
    • telebot сде­лает всю рутину по работе с Telegram-ботом.

    Слу­жеб­ные при­моч­ки, которые труд­но отнести к катего­риям выше:

    • datetime поз­волит опре­делить вре­мя работы прог­раммы;
    • pyautogui быс­тро и без боли работа­ет с GUI;
    • PIL. Image — для сня­тия скрин­шота.

    Пос­ле это­го нам тре­бует­ся узнать основные ста­биль­ные харак­терис­тики сис­темы: IP- и MAC-адре­са, имя поль­зовате­ля и ОС:

    Стро­ки кода снаб­жены ком­мента­риями и в пояс­нени­ях не нуж­дают­ся.

    Скорость интернет-соединения

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

    Часовой пояс и время

    Частота процессора

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

    Более глубокий фингерпринтинг

    В этой статье умыш­ленно не рас­ска­зыва­ется, как получить иден­тифика­тор жес­тко­го дис­ка или GUID уста­нов­ленной Windows: мы не методич­ку для рек­ламщи­ков пишем, а прог­рамми­ровать тре­ниру­емся. Тем не менее вы лег­ко можете добавить сбор и такой информа­ции, вос­поль­зовав­шись кон­соль­ной ути­литой wmic . Ее вывод мож­но пар­сить с помощью Python-скрип­та, так что даже не при­дет­ся писать лиш­ние обвязки. На скрин­шоте при­мер получе­ния серий­ного номера BIOS.

    при­мер получе­ния серий­ного номера BIOS

    При­мер получе­ния серий­ного номера BIOS

    Скриншот рабочего стола

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

    Запись в файл

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

    Длин­ный, но лег­ко чита­емый код. Пер­вая его часть обес­печива­ет обра­бот­ку коман­ды / start , вто­рая — запись всех дан­ных в файл. Резуль­тат попадет в info. txt , но путь, конеч­но, мож­но изме­нить пря­мо в коде.

    Де­ло оста­ется за малым — отпра­вить резуль­тат в Telegram.

    Отправка данных

    Те­перь допол­ним код выше, что­бы он еще и фай­лы отправ­лял.

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

    Ес­тес­твен­но, если нам не нужен, к при­меру, скрин­шот, мы можем вырезать код его отправ­ки, получив такой вари­ант:

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

    Собираем программу

    Что­бы не тянуть с собой на дру­гой компь­ютер Python и зависи­мос­ти прог­раммы, давайте упа­куем все в один исполня­емый фай­лик. Дела­ется это с помощью PyInstaller, который ста­вит­ся прос­той коман­дой pip install pyinstaller .

    Пе­рехо­дим с помощью коман­дной стро­ки в пап­ку с нашей прог­раммой и собира­ем ее коман­дой

    Ар­гумент --onefile зас­тавит PyInstaller упа­ковать все в единс­твен­ный файл. Пос­ле -i надо ука­зать путь до икон­ки исполня­емо­го фай­ла, если вы хотите ее исполь­зовать. Если она не нуж­на, прос­то уда­лите этот аргу­мент. Пос­ледним идет путь к фай­лу с нашим кодом. Если вы не хотите, что­бы при запус­ке появ­лялась кон­соль (нап­ример, если вла­делец компь­юте­ра не зна­ет, что вы соб­рались ему помочь :D), поменяйте рас­ширение вход­ного фай­ла с кодом на . pyw или ука­жите опцию -w .

    Не забывайте про­верять наличие модулей и их обновле­ний, что­бы избе­жать оши­бок. Вре­мен­ный путь мож­но ука­зать любой, но лич­но я ука­зываю C:\ Temp . Само собой, если обна­руже­на ОС на базе Linux, то этот код при­дет­ся поп­равить.

    Еще сле­дует про­верить, как силь­но и чем детек­тится наш файл. Что­бы вам не лезть на VirusTotal, я сде­лал это сам.

    Ре­зуль­тат ска­ниро­вания на VirusTotal

    Ре­зуль­тат ска­ниро­вания на VirusTotal

    Пол­ный код про­екта я раз­местил на GitHub. Там есть и прог­рамма‑сбор­щик, о которой я рас­ска­жу ниже.

    Пишем сборщик с графическим интерфейсом

    Для соз­дания GUI сбор­щика нам при­дет­ся работать с биб­лиоте­кой Tkinter, поэто­му преж­де все­го импорти­руем ее и нуж­ные эле­мен­ты:

    Пос­ле это­го нуж­но соз­дать окно, которое и будет осно­вой интерфей­са:

    Нам нужен толь­ко ввод API-клю­ча для дос­тупа к боту. Дела­ется такой ввод кодом ниже:

    Это соз­даст два гра­фичес­ких объ­екта — поле вво­да и под­пись к нему.

    В этом интерфей­се не хва­тает кноп­ки для сбор­ки выход­ного фай­ла. Давайте соз­дадим ее:

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

    Не шутите с про­бела­ми! Перед тем как встав­лять код, убе­дитесь, что там нет лиш­них про­белов, ина­че может воз­никнуть труд­но обна­ружи­мая ошиб­ка.

    Но на этом наша фун­кция не закан­чива­ется, так как нуж­но дать поль­зовате­лю понять, готов ли файл. Дела­ем это с помощью MessageBox:

    Те­перь оста­лось толь­ко запус­тить отри­сов­ку и обра­бот­ку сооб­щений стро­кой root. mainloop( ) .

    Оп­циональ­но мож­но соб­рать и сбо­роч­ный интерфейс. Для это­го исполь­зуем ста­рый доб­рый PyInstaller:

    И все готово! Теперь вы име­ете пол­ноцен­ную прог­рамму для сбо­ра дан­ных о сис­теме и ее сбор­щик, который уско­рит про­цесс работы.

    Каж­дый раз при­бегать к PyInstaller, что­бы соб­рать прог­рамму, не слиш­ком удоб­но. Мож­но вос­поль­зовать­ся модулем os и вызывать PyInstaller авто­мати­чес­ки.

    Ес­ли вам понадо­билась икон­ка, мож­но добавить в коман­ду сбор­ки параметр -i file. ico , а для сбор­ки «невиди­мой» прог­раммы дописать -w — ров­но как при руч­ной сбор­ке!

    Вывод

    В этой статье мы разоб­рали от начала и до кон­ца, как вытащить из сво­ей или чужой сис­темы некото­рые важ­ные дан­ные — от IP до модели про­цес­сора. Конеч­но, глав­ное тут в том, что вы научил­ись хоть нем­ного писать код самос­тоятель­но — а при­менить всег­да куда‑нибудь получит­ся.

    Если заин­тересо­вал­ись прог­рамми­рова­нием на Python — почитайте на­шу статью о написа­нии прос­того вируса, она ста­нет отличным зак­репле­нием навыков прог­рамми­рова­ния. Успе­хов!

    Читайте также: