👇👇👇
https://t.me/mindlinux
👆👆👆
23 Oct, 08:42
21 Oct, 02:40
python-docx
, которая позволяет создавать, изменять и анализировать документы Word. pip install python-docx
from docx import Document
def create_document():
doc = Document()
doc.add_heading('Заголовок документа', level=1)
doc.add_paragraph('Это абзац текста в новом документе.')
doc.save('новый_документ.docx')
create_document()
from docx import Document
def read_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
print(paragraph.text)
read_document('существующий_документ.docx')
from docx import Document
def add_table_to_document():
doc = Document()
table = doc.add_table(rows=3, cols=3)
for row in table.rows:
for cell in row.cells:
cell.text = 'Текст ячейки'
doc.save('документ_с_таблицей.docx')
add_table_to_document()
from docx import Document
def modify_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
if 'старый текст' in paragraph.text:
paragraph.text = paragraph.text.replace('старый текст', 'новый текст')
doc.save('измененный_документ.docx')
modify_document('существующий_документ.docx')
from docx import Document
def add_image_to_document():
doc = Document()
doc.add_heading('Документ с изображением', level=1)
doc.add_paragraph('Вот изображение:')
doc.add_picture('путь_к_изображению.jpg', width=docx.shared.Inches(2))
doc.save('документ_с_изображением.docx')
add_image_to_document()
from docx import Document
def remove_paragraphs(file_path, text_to_remove):
doc = Document(file_path)
for paragraph in doc.paragraphs:
if text_to_remove in paragraph.text:
p = paragraph._element
p.getparent().remove(p)
doc.save('документ_без_абзацев.docx')
remove_paragraphs('существующий_документ.docx', 'текст для удаления')
from docx import Document
from docx.shared import Pt
def format_text_in_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
run = paragraph.add_run('Этот текст будет жирным и курсивом. ')
run.bold = True
run.italic = True
doc.save('документ_с_форматированием.docx')
format_text_in_document('существующий_документ.docx')
20 Oct, 06:06
hashlib
— это стандартная библиотека Python, которая предоставляет интерфейс для создания хеш-функций. Хеш-функции используются для создания уникального представления данных фиксированной длины (хеша) из произвольного объема данных.import hashlib
hashlib
поддерживает несколько популярных хеш-функций:hashlib.md5()
hashlib.sha1()
hashlib.sha256()
hashlib.sha512()
import hashlib
# Создание объекта хеша
hash_object = hashlib.sha256()
# Обновление хеша данными
hash_object.update(b'Hello, world!') # Обратите внимание, данные должны быть в байтах
# Получение хеша в шестнадцатеричном формате
hex_dig = hash_object.hexdigest()
print(hex_dig) # Пример вывода: '315f5bdb76d084c2d8b11d0f600bfb0c8b11f8c3f0f0f8e7e7b6f3e4f2c4b2c1'
import hashlib
# Функция для хеширования строки
def hash_string(input_string):
return hashlib.sha256(input_string.encode()).hexdigest()
# Пример использования
print(hash_string("Hello, world!")) # Вывод: 'a591a6d40bf420404a011733cfb7b190d62c65bf0bcda190c3c6c1e06f89c1b'
import hashlib
# Функция для хеширования содержимого файла
def hash_file(filepath):
hash_object = hashlib.sha256() # Или любой другой алгоритм
with open(filepath, 'rb') as file:
# Чтение файла по частям
while chunk := file.read(4096):
hash_object.update(chunk)
return hash_object.hexdigest()
# Пример использования
print(hash_file('example.txt')) # Хеш содержимого файла example.txt
import hashlib
# Данные для хеширования
data = b"Hello, world!"
# MD5
md5_hash = hashlib.md5(data).hexdigest()
print("MD5:", md5_hash)
# SHA-1
sha1_hash = hashlib.sha1(data).hexdigest()
print("SHA-1:", sha1_hash)
# SHA-256
sha256_hash = hashlib.sha256(data).hexdigest()
print("SHA-256:", sha256_hash)
# SHA-512
sha512_hash = hashlib.sha512(data).hexdigest()
print("SHA-512:", sha512_hash)
hashlib
— это мощный инструмент для работы с хешами в Python. Он широко используется в безопасных приложениях, проверке целостности данных и многих других задачах. Используйте хеши для проверки идентичности данных и защиты паролей, но помните, что некоторые алгоритмы, такие как MD5, больше не считаются безопасными для криптографических целей.19 Oct, 07:01
19 Oct, 00:52
pip install paramiko
import paramiko
# Создание клиента SSH
client = paramiko.SSHClient()
# Загрузка известных хостов
client.load_system_host_keys()
# Добавление сервера, если он не в известных хостах
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Подключение к удалённому серверу
client.connect('hostname_or_ip', username='your_username', password='your_password')
# Выполнение команды
stdin, stdout, stderr = client.exec_command('ls -l')
# Получение результата
print(stdout.read().decode())
# Закрытие соединения
client.close()
# Создание клиента SSH
client = paramiko.SSHClient()
# Загрузка известных хостов
client.load_system_host_keys()
# Добавление сервера, если он не в известных хостах
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Подключение к удалённому серверу с использованием ключа
private_key_path = '/path/to/your/private/key'
private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
client.connect('hostname_or_ip', username='your_username', pkey=private_key)
# Выполнение команды
stdin, stdout, stderr = client.exec_command('ls -l')
# Получение результата
print(stdout.read().decode())
# Закрытие соединения
client.close()
# Выполнение команды и получение результата
stdin, stdout, stderr = client.exec_command('your_command')
# Чтение вывода
output = stdout.read().decode()
error_output = stderr.read().decode()
print('Output:', output)
print('Error:', error_output)
sftp = client.open_sftp()
sftp.get('/remote/path/to/file', '/local/path/to/file')
sftp.close()
sftp = client.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file')
sftp.close()
with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname_or_ip', username='your_username', password='your_password')
stdin, stdout, stderr = client.exec_command('ls -l')
print(stdout.read().decode())
transport = client.get_transport()
local_port = 12345
remote_host = 'remote_host'
remote_port = 80
# Создание локального туннеля
transport.request_port_forward('localhost', local_port, remote_host, remote_port)
transport.close()
try:
client.connect('hostname_or_ip', username='your_username', password='your_password')
except paramiko.AuthenticationException:
print("Authentication failed.")
except paramiko.SSHException as e:
print(f"Failed to connect: {e}")
# Получение информации о системе
stdin, stdout, stderr = client.exec_command('uname -a')
print(stdout.read().decode())
client.close()
18 Oct, 07:01
17 Oct, 03:58
python-nmap
, которая позволяет взаимодействовать с инструментом Nmap из Python. Эта библиотека полезна для автоматизации сетевого сканирования и анализа.pip install python-nmap
import nmap
nm = nmap.PortScanner()
scan(hosts, arguments)
nm.scan('192.168.1.1', arguments='-sP') # Ping scan
print(nm.all_hosts()) # Список всех хостов
print(nm['192.168.1.1'].state()) # Состояние хоста (up/down)
for proto in nm['192.168.1.1'].all_protocols():
print('Protocol : %s' % proto)
lport = nm['192.168.1.1'][proto].keys()
for port in sorted(lport):
print('Port : %s\tState : %s' % (port, nm['192.168.1.1'][proto][port]['state']))
nm.scan(hosts='192.168.1.1,192.168.1.2', arguments='-sV') # Сканирование с определением версии
-sP
: Ping scan-sS
: TCP SYN scan-sV
: Определение версии службы-O
: Определение операционной системы-p
: Сканирование определенных портовnm.scan('192.168.1.1', arguments='-sS -O -p 22,80')
import nmap
# Создание объекта сканера
nm = nmap.PortScanner()
# Сканирование
nm.scan('192.168.1.1', arguments='-sS')
# Вывод информации
print(nm.all_hosts())
print(nm['192.168.1.1'].state())
import nmap
nm = nmap.PortScanner()
nm.scan(hosts='192.168.1.0/24', arguments='-sP')
for host in nm.all_hosts():
print(f'Host: {host} ({nm[host].hostname()})')
print(f'State: {nm[host].state()}')
import nmap
nm = nmap.PortScanner()
nm.scan('192.168.1.1', arguments='-sS -sV -O')
print(f"IP: {nm['192.168.1.1'].hostname()}")
print(f"State: {nm['192.168.1.1'].state()}")
print(f"OS: {nm['192.168.1.1']['osmatch'][0]['name']}")
try:
nm.scan('192.168.1.1')
except nmap.PortScannerError as e:
print(f'Error: {e}')
all_hosts()
: Возвращает список всех найденных хостов.state()
: Возвращает состояние хоста (up/down).all_protocols()
: Возвращает все протоколы (TCP/UDP).has_tcp(port)
: Проверяет, есть ли TCP порт.has_udp(port)
: Проверяет, есть ли UDP порт.get_service(port, proto)
: Получает информацию о службе на порту. 16 Oct, 13:40
13 Oct, 12:46
pip install scapy
from scapy.all import *
# Создание ICMP пакета
packet = IP(dst="8.8.8.8")/ICMP()
# Отправка пакета и получение ответа
response = sr1(packet)
response.show() # Отображение ответа
# Сканирование портов на хосте
ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=[22, 80, 443], flags="S"), timeout=1)
ans.summary() # Отображение результатов
# Функция для обработки пакетов
def packet_callback(packet):
print(packet.summary())
# Захват пакетов
sniff(prn=packet_callback, count=10) # Захват 10 пакетов
# Создание UDP пакета
udp_packet = IP(dst="192.168.1.1")/UDP(dport=12345)/Raw(load="Hello, World!")
# Отправка пакета
send(udp_packet)
# Захват только TCP пакетов
sniff(filter="tcp", prn=lambda x: x.show(), count=10)
# Создание ARP запроса
arp_request = ARP(pdst="192.168.1.1")
# Создание Ethernet фрейма
broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
# Комбинирование
arp_request_broadcast = broadcast/arp_request
# Отправка запроса и получение ответа
answered_list = srp(arp_request_broadcast, timeout=1, verbose=False)[0]
for element in answered_list:
print(f"IP: {element[1].psrc}, MAC: {element[1].hwsrc}")
# Захват пакетов и сохранение в файл
packets = sniff(count=10)
wrpcap("captured_packets.pcap", packets)
# Загрузка пакетов из файла
packets = rdpcap("captured_packets.pcap")
for packet in packets:
print(packet.summary())
# Создание TCP пакета с пользовательскими данными
tcp_packet = IP(dst="192.168.1.1")/TCP(dport=80, flags="S")/Raw(load="GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
# Отправка пакета
send(tcp_packet)
10 Oct, 03:23
pywinauto
— это библиотека для автоматизации GUI приложений в Windows. Она позволяет автоматически управлять окнами приложений, нажимать кнопки, вводить текст, выбирать элементы и т.д.pip install pywinauto
from pywinauto import Application
app = Application(backend="win32").start("notepad.exe")
app = Application(backend="win32").connect(process=1234) # по PID
app = Application(backend="win32").connect(path="notepad.exe") # по имени исполняемого файла
"win32"
— для большинства классических приложений Windows."uia"
— для приложений на основе UIAutomation (WPF, UWP и т.д.).dlg = app.window(title="Untitled - Notepad")
dlg = app.window(title_re=".*Notepad.*") # регулярное выражение
dlg = app.window(class_name="Notepad")
dlg.wait("exists", timeout=10) # ждет 10 секунд, пока окно не появится
dlg.set_focus()
dlg.minimize()
dlg.maximize()
dlg.close()
title = dlg.window_text()
dlg.Button.click()
dlg.child_window(title="OK").click() # через child_window
dlg.Edit.type_keys("Hello, World!")
send_keys
для более точных симуляций клавиатуры.dlg.ComboBox.select("Item 1")
dlg.CheckBox.check()
dlg.CheckBox.uncheck()
text = dlg.Static.texts()
dlg.menu_select("Файл->Сохранить как")
dlg.menu_select("Файл[0]->Выход[5]") # через индексы
dlg.menu_select("Файл->Открыть...")
open_dlg = app.window(title_re=".*Открыть.*")
open_dlg.Edit.type_keys("C:\\path_to_file.txt")
open_dlg.Open.click()
dlg.print_control_identifiers()
btn = dlg.child_window(auto_id="12345")
btn.click()
05 Oct, 06:01
imaplib
в Python, которая включает основные операции с IMAP-сервером, такие как подключение, аутентификация, чтение и отправка писем, а также пример кода для каждой операции.imaplib
не требуется дополнительная установка, так как это стандартная библиотека Python. Однако, для работы с электронной почтой может понадобиться модуль email
для обработки содержимого писем.imaplib
import imaplib
# Укажите адрес вашего IMAP-сервера и порт
IMAP_SERVER = 'imap.example.com'
EMAIL_ACCOUNT = '[email protected]'
PASSWORD = 'your_password'
# Создаем объект IMAP
mail = imaplib.IMAP4_SSL(IMAP_SERVER)
# Вход в учетную запись
mail.login(EMAIL_ACCOUNT, PASSWORD)
# Получаем список папок (почтовых ящиков)
status, folders = mail.list()
print(folders)
# Выбор папки "INBOX"
mail.select('INBOX')
# Поиск писем по заданному критерию (например, все непрочитанные)
status, messages = mail.search(None, 'UNSEEN')
# messages - это строка с номерами писем, разделенными пробелом
email_ids = messages[0].split()
print(email_ids) # Список ID непрочитанных писем
# Чтение первого непрочитанного письма
if email_ids:
latest_email_id = email_ids[0] # ID первого непрочитанного письма
status, msg_data = mail.fetch(latest_email_id, '(RFC822)') # Получаем полное сообщение
raw_email = msg_data[0][1] # raw_email - это сырое содержимое письма
print(raw_email.decode('utf-8')) # Декодируем и выводим содержимое
# Удаление письма
if email_ids:
mail.store(latest_email_id, '+FLAGS', '\\Deleted') # Помечаем письмо как удаленное
mail.expunge() # Удаляем помеченные письма
# Выход из учетной записи и закрытие соединения
mail.logout()
import imaplib
import email
from email.header import decode_header
# Настройки
IMAP_SERVER = 'imap.example.com'
EMAIL_ACCOUNT = '[email protected]'
PASSWORD = 'your_password'
# Подключаемся к IMAP-серверу
mail = imaplib.IMAP4_SSL(IMAP_SERVER)
mail.login(EMAIL_ACCOUNT, PASSWORD)
# Выбираем папку "INBOX"
mail.select('INBOX')
# Поиск непрочитанных писем
status, messages = mail.search(None, 'UNSEEN')
email_ids = messages[0].split()
# Чтение и вывод непрочитанных писем
for email_id in email_ids:
status, msg_data = mail.fetch(email_id, '(RFC822)')
raw_email = msg_data[0][1]
# Парсим письмо
msg = email.message_from_bytes(raw_email)
subject, encoding = decode_header(msg['Subject'])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding if encoding else 'utf-8')
print(f'Subject: {subject}')
# Удаляем письмо
mail.store(email_id, '+FLAGS', '\\Deleted')
# Удаляем помеченные письма
mail.expunge()
# Выход из учетной записи
mail.logout()
decode_header
для правильного извлечения.28 Sep, 13:38
configparser
configparser
является встроенным модулем в Python (начиная с версии 3.0), поэтому установка не требуется. Просто импортируйте его в вашем коде.import configparser
import configparser
# Создание объекта ConfigParser
config = configparser.ConfigParser()
# Добавление секции и параметров
config['DEFAULT'] = {
'Server': 'smtp.example.com',
'Port': '587'
}
config['USER'] = {
'Username': '[email protected]',
'Password': 'secret'
}
# Запись конфигурации в файл
with open('config.ini', 'w') as configfile:
config.write(configfile)
import configparser
# Создание объекта ConfigParser
config = configparser.ConfigParser()
# Чтение конфигурационного файла
config.read('config.ini')
# Получение значений
server = config['DEFAULT']['Server']
port = config.getint('DEFAULT', 'Port') # Получение значения как int
username = config['USER']['Username']
password = config['USER'].get('Password') # Получение значения, если параметр может отсутствовать
print(server, port, username, password)
ConfigParser
.[DEFAULT]
Server = smtp.example.com
Port = 587
[USER]
Username = [email protected]
Password = secret
[SETTINGS]
EnableFeatureX = True
if config.has_section('USER'):
print('Секция USER существует')
if config.has_option('USER', 'Username'):
print('Параметр Username существует')
try:
value = config['USER']['NonExistentOption']
except KeyError:
print('Параметр не найден')
optionxform
или переопределить их.configparser
можно использовать комментарии, начиная строку с #
или ;
. 28 Sep, 00:56
virtualenv
virtualenv
pip install virtualenv
virtualenv --version
virtualenv <имя_окружения>
virtualenv myenv
virtualenv -p /usr/bin/python3.8 <имя_окружения>
virtualenv -p python3.8 myenv
.\myenv\Scripts\activate
source myenv/bin/activate
deactivate
pip install <имя_пакета>
pip install requests
pip list
pip freeze > requirements.txt
pip install -r requirements.txt
rm -rf myenv # Linux/Mac
rmdir /S /Q myenv # Windows
virtualenv --no-site-packages <имя_окружения>
virtualenv --help
pip
и python
будут относиться к этому окружению, пока оно активно.requirements.txt
или использовать Pipenv
или Poetry
для управления зависимостями и окружениями. 26 Sep, 16:59
26 Sep, 09:20
cryptography
в Pythoncryptography
предоставляет инструменты для работы с различными криптографическими задачами, такими как шифрование, дешифрование, создание цифровых подписей и управление ключами. Ниже приведены основные функции и примеры их использования.pip install cryptography
cryptography
from cryptography.fernet import Fernet
key = Fernet.generate_key()
print(key)
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# Шифрование
text = b"Hello, World!"
cipher_text = cipher_suite.encrypt(text)
print(cipher_text)
# Дешифрование
plain_text = cipher_suite.decrypt(cipher_text)
print(plain_text)
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
# Сохранение приватного ключа
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
# Сохранение публичного ключа
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print(private_pem)
print(public_pem)
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
message = b"Secret message"
cipher_text = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(cipher_text)
plain_text = private_key.decrypt(
cipher_text,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(plain_text)
from cryptography.hazmat.primitives import hashes
digest = hashes.Hash(hashes.SHA256())
digest.update(b"Hello, World!")
hash_value = digest.finalize()
print(hash_value)
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# Подпись данных
signature = private_key.sign(
b"Sign this message",
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# Проверка подписи
try:
public_key.verify(
signature,
b"Sign this message",
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature is valid.")
except:
print("Signature is invalid.")
cryptography
. Вы можете адаптировать и расширять эти примеры в зависимости от ваших конкретных требований. 24 Sep, 11:36
pip install flask
app.py
:from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
python app.py
@app.route('/about')
def about():
return 'About Page'
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'Do the login'
else:
return 'Show the login form'
from flask import request
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
return f'Username: {username}, Password: {password}'
from flask import redirect, url_for
@app.route('/admin')
def admin():
return redirect(url_for('home'))
templates
и добавьте файл index.html
:<!doctype html>
<html>
<head><title>Hello</title></head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
app.py
:from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('index.html', name=name)
static
и добавьте CSS или JavaScript файлы. Например, style.css
:body {
background-color: #f0f0f0;
}
index.html
):<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
pip install flask_sqlalchemy
app.py
:from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
if __name__ == '__main__':
app.run(debug=True)
pip install flask-wtf
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Login')