- Есть ли портативный способ получить текущее имя пользователя в Python?
- 12 ответов
- Полное имя пользователя Windows (в домене) с использованием Python
- 1 ответ 1
- Использование библиотеки Python AD, например, pyad
- Использование библиотеки Python LDAP, например, ldap3
- Как получить имя учётки
- Решение
- Сбор информации о системе с Python
- Задачи
- Инструменты
- Основа программы
- Сбор данных
- Скорость интернет-соединения
- Часовой пояс и время
- Частота процессора
- Глубокий фингерпринтинг
- Скриншот рабочего стола
- Запись в файл
- Отправка данных
- Чтобы бот гарантированно отправлял все сообщения тебе, укажи вместо message. chat. id ID чата с собой. Его можно узнать через бот GetMyID.
- Сборщик с графическим интерфейсом
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли переносимый способ получить имя пользователя текущего пользователя в Python (т. Е. Тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать как os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ добиться этого, скажем, в Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
12 ответов
Посмотрите на модуль getpass
Доступность: Unix, Windows
ps В комментариях ниже «эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, в любых других целях, поскольку она позволяет любому пользователю выдавать себя за любое другое).«
Лучше всего было бы объединить os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Это может сработать. Я не знаю, как они ведут себя при работе в качестве службы. Они не являются переносимыми, но для этого предназначены выражения «os.name» и «if».
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т. Е. Имя пользователя).
Для меня с помощью os модуль выглядит лучше для переносимости: лучше всего работает как на Linux, так и на Windows.
Дом пользователя Dir: C:\Users\myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Комбинированный pwd а также getpass подход, основанный на других ответах:
Для UNIX, по крайней мере, это работает.
редактировать: я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Это интересно, но, вероятно, не идеально, если вы все равно что-то не делаете в терминале. в этом случае вы, вероятно, будете использовать os.system начать с. Например, некоторое время назад мне нужно было добавить своего пользователя в группу, что я и сделал (это в Linux, заметьте)
Мне кажется, что это легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Полное имя пользователя Windows (в домене) с использованием Python
Я хочу получить полное имя пользователя компьютера с Windows в Python.
Я нашел эквивалентную пакетную команду:
который возвращает полное имя (например, Full Name John Doe ).
Я сделал следующий способ, используя subprocess но мне интересно, есть ли более естественный способ сделать это с некоторыми модулями Python.
1 ответ 1
Более прямой способ сделать это — запросить Active Directory. Вы выполняете поиск пользователя, а затем получаете атрибут displayName . (Это соответствует Full Name отображаемому в Windows.)
У вас есть два варианта здесь:
Использование библиотеки Python AD, например, pyad
Это очень специфично для Windows и требует библиотеки pywin32 . Он опирается на API-интерфейсы ADSI, поэтому будет работать только на Windows.
Как вы получите имя пользователя, зависит от вас. Вы можете использовать getpass.getuser() , os.environ[«USERNAME»] (только для Windows) и т.д.
Использование библиотеки Python LDAP, например, ldap3
Это соответствует стандартному протоколу LDAP с чистой реализацией Python, поэтому должен работать с любой клиентской ОС.
Использование необработанных запросов LDAP гораздо сложнее, чем абстракции ADSI. Я предлагаю вам прочитать документацию (в которой есть достойные учебные пособия) и найти дополнительные учебные пособия по взаимодействию с Microsoft AD через ldap3.
Обратите внимание, что одной из возможных проблем является то, что поиск по имени пользователя (CN) может привести к неправильному объекту. Можно иметь несколько объектов с одним и тем же CN в нескольких подразделениях. Если вы хотите быть более точным, вы можете использовать уникальный идентификатор, такой как SID.
Как получить имя учётки
Как получить имя учётной записи в windows, как получить имя пк понятно, подскажите как получить имя пользователя
Как получить имя файла из формы
Здравствуйте! Есть форма, на основе некоторой модели в котором такое поле: file =.
Как в билдере получить с сервера (MySQL 5.1, имя базы «skola», имя table «info») имя столбцов и имя строк
Доброва времены суток Как в билдере получить с сервера (MySQL 5.1, имя базы «skola», имя table.
Получить имя моего процесса (получить имя меня)
Работает мой код. Мне нужно получить имя моего процесса — ***.exe
Как получить имя столбца
Подскажите пожалуйста как получить имя столбца таблицы, запроса и вывести его в Debug.Print
Решение
Комментарий модератора | ||
|
Как получить имя кнопки?
Есть 5 кнопок, у всех 1 общее событие onClick, как с помощью его определить какая кнопка была.
Как Получить Имя Поля ?
Добрый день ! Помогите решить задачку. На форме много изменяемых полей Если пользователь удалит.
Как получить имя переменной?
Для отладки кода появилась необходимость получать имена переменных. Это я могу сделать но только.
Как получить имя компьютера
Как получить имя компьютера? Если указывать %UserName% выбивает ошибка вот код procedure.
Как получить имя файла?
Я загружаю файл на сервер. Как мне занести в переменную имя файла?
Как получить имя фотографии?
Добрый день подскажите пожалуйста как узнать имя фотографии? Проблема в следующем. Делаю фото.
Сбор информации о системе с Python
Чтобы просто увидеть IP-адрес и другие сетевые настройки, вам нужно перейти в командную строку и запустить команду ipconfig / all. Ситуация — одна из самых распространенных для эникейщиков и удаленных шаманов, но, по крайней мере, ее можно быстро решить. Но если вам нужно собрать более серьезный набор информации о машине, с которой вы теперь будете работать, без автоматизации вам не обойтись. Этим и займемся.
Доступ к компьютерной информации без санкции является преступлением. Ни автор, ни редакция не несут ответственности за ваши действия.
Задачи
Давай сначала обрисуем, что мы вообще планируем делать. Я планирую собирать следующую информацию:
- IP-адрес.
- MAC-адрес.
- Имя пользователя.
- Тип операционной системы.
- Скорость работы системы.
- Время.
- Скриншот.
- Скорость интернет‑соединения.
- Модель процессора.
И отправляться это все будет прямиком тебе в телегу через специальный бот.
Инструменты
Сначала рассмотрим, где мы будем писать код. Вы можете писать код в обычном блокноте Windows, но мы будем использовать специальную среду разработки Python — PyCharm. Установка и настройка просты как два рубля: скачайте установщик, запустите его — и нажмите «Далее» при появлении такой кнопки.
Еще нам нужен Python. Буду использовать версию 3.9.0 — уверен, что с ней все работает.
Основа программы
Для отправки данных я решил использовать робота Telegram. Вы можете создать его через BotFather, а затем сохранить токен своего создания. Вы не можете опубликовать его — любой, кто получит этот токен, сможет взять под контроль вашего бота.
Для подключения к Bot API «телеги» нужны всего две строчки:
Чтобы оценить быстродействие, можно написать еще пару строк. Весь дальнейший код расположим между ними. Описанное выше подключение бота уже вписано сюда
Теперь перейдем собственно к сбору данных.
Сбор данных
Я не буду долго ходить вокруг да около и сразу начну разбирать секцию импорта.
Теперь кратко рассмотрим, что делает каждый модуль. Если какие‑то функции тебе не нужны, выброси строку импорта модуля и код, который использует этот модуль. Все просто!
Итак, за работу с ОС и локальными ресурсами отвечают эти четыре модуля:
- getpass нужен для определения информации о пользователе;
- os используем для взаимодействия с функциями ОС, вроде вызова внешних исполняемых файлов;
- psutil работает с некоторыми низкоуровневыми системными функциями;
- platform предоставит информацию об ОС.
Этими модулями реализованы сетевые взаимодействия:
- socket — для работы с сокетами и получения IP-адресов;
- getnode получает MAC-адрес машины;
- speedtest замеряет характеристики интернет‑соединения;
- telebot сделает всю рутину по работе с Telegram-ботом.
Служебные примочки, которые трудно отнести к категориям выше:
- datetime позволит определить время работы программы;
- pyautogui работает с GUI;
- PIL. Image — для снятия скриншота.
После этого нам требуется узнать основные стабильные характеристики системы: IP- и MAC-адреса, имя пользователя и ОС:
name = getpass . getuser ( ) # Имя пользователя
Строки кода снабжены комментариями и в пояснениях не нуждаются.
Скорость интернет-соединения
Скорость измеряется служебной библиотекой Speedtest.net и поэтому дает результат в мегабитах, а не в мегабайтах. Чтобы исправить это, нужно разделить числовой результат на 8 или умножить на 0,125. Проделываем манипуляцию дважды — на скорость входа и выхода.
Важно понимать, что измерения не должны быть слишком точными, поскольку мы не можем легко проверить, какая часть канала используется другими программами или даже другими устройствами в сети. Если вы подключились к рабочей станции удаленно, ваше соединение тоже что-то потребляет. Исправление этого не было реализовано в программе из-за очень низкой точности и качества исполнения.
Часовой пояс и время
Если вы настраиваете сервер или слишком удаленный компьютер, время может отличаться. Измеренные значения часов складываются со всеми остальными данными — лишней информации нет. Если вы не знали, неправильная установка времени и / или часового пояса может вызвать ошибки при подключении к сайтам с использованием HTTPS. Этот код упрощает обнаружение таких проблем.
Частота процессора
Это может помочь определить причину, по которой ваш компьютер замедляется: если процессор постоянно развивается, но программы дают сбой, процессор устарел, а если он простаивает, виновата программа. И просто общее представление о железе.
Глубокий фингерпринтинг
В этой статье специально не рассказывается, как получить идентификатор жесткого диска или установленный идентификатор Windows GUID — мы не пишем руководство для рекламодателей, а практикуемся в программировании. Однако вы можете легко добавить коллекцию такой информации с помощью утилиты консоли wmic. Его вывод можно проанализировать с помощью скрипта Python, поэтому вам даже не нужно писать дополнительные привязки. На скриншоте показан пример получения серийного номера BIOS.
Скриншот рабочего стола
Тут все тоже максимально просто, а за собственно снятие скриншота отвечает только последняя строка кода. Остальное мы используем для корректной обработки входящей команды бота.
Запись в файл
После того, как все будет сделано, мы можем перейти к окончательному сбору и отправке данных. Мы создаем готовый файл с нашими данными: если был использован максимальный сбор информации, а точнее весь приведенный выше код, мы будем использовать этот набор данных, в противном случае мы удалим данные, которые вам не нужны:
Длинный, но удобный для чтения код. Первая часть используется для обработки команды / start, вторая — для записи всех данных в файл. Результат отображается в info.txt, но путь, конечно, можно изменить прямо в коде.
Все, что вам нужно сделать, это отправить результат в Telegram.
Отправка данных
Теперь дополним код выше, чтобы он еще и файлы отправлял.
Сначала указывается подпись к скриншоту, потом читаем и отправляем файлы в виде фото и документа, затем зачищаем следы и закрываем соединение с ботом. Ничего сложного!
Естественно, если нам не нужен, к примеру, скриншот, мы можем вырезать код его отправки, получив такой вариант:
Чтобы бот гарантированно отправлял все сообщения тебе, укажи вместо message. chat. id ID чата с собой. Его можно узнать через бот GetMyID.
Также следует учесть одну деталь: перед запуском программы необходимо отправить своему боту команду / start, чтобы он понимал, кому должен отправлять данные.
Чтобы не перетаскивать Python и зависимости программы с собой на другой компьютер, давайте объединим все в один исполняемый файл. Это делается с помощью PyInstaller, который устанавливается с помощью простой команды pip install pyinstaller.
Переходим с помощью командной строки в папку с нашей программой и собираем ее командой
Аргумент —onefile заставит PyInstaller упаковать все в один файл. После -i вы должны указать путь к значку исполняемого файла, если хотите его использовать. Если он вам не нужен, просто удалите этот аргумент. Последнее — это путь к файлу с нашим кодом. Если вы не хотите, чтобы консоль появлялась при запуске (например, если владелец компьютера не знает, что вы собираетесь ему помочь: D), измените расширение входного файла с помощью кода на .pyw или укажите параметр -w.
Не забывайте проверять наличие модулей и их обновлений, чтобы избежать ошибок. Можно указать любой временный путь, но лично я указываю C: \ Temp. Конечно, если будет найдена ОС на базе Linux, то этот код придется исправить.
Вы также должны проверить, насколько сильно и как определяется наш файл. Чтобы не допустить вас к VirusTotal, я сделал это сам.
Результат сканирования на VirusTotal
Полный код проекта я разместил на GitHub. Там есть и программа‑сборщик, о которой я расскажу ниже.
Сборщик с графическим интерфейсом
Для создания GUI сборщика нам придется работать с библиотекой Tkinter, поэтому прежде всего импортируем ее и нужные элементы:
После этого нужно создать окно, которое и будет основой интерфейса:
Нам нужен только ввод API-ключа для доступа к боту. Делается такой ввод кодом ниже:
Это создаст два графических объекта — поле ввода и подпись к нему.
В этом интерфейсе не хватает кнопки для сборки выходного файла. Давай создадим ее:
Создаем функцию, которая должна находиться в файле после импорта библиотек. В ней мы должны создавать файл и записывать в него код полезной нагрузки.