commit 4bbfbd5947ef4dae50b325d8c49b18a2437774c0 Author: Дмитрий <stud179126@vyatsu.ru> Date: Tue Apr 1 17:40:17 2025 +0300 lab3, нужно читать README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bccbe1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.venv +.idea +/venv +.venv/ +.env +*.token +.env/ \ No newline at end of file diff --git a/API.py b/API.py new file mode 100644 index 0000000..d672370 --- /dev/null +++ b/API.py @@ -0,0 +1,66 @@ +import os +from dotenv import load_dotenv +import requests + +# 1. Загрузка токена +load_dotenv() +TOKEN = os.getenv("GITEA_TOKEN") + +if not TOKEN: + print("ОШИБКА: Токен не найден в .env файле!") + print("Убедитесь, что в папке с скриптом есть файл .env с содержимым:") + print("GITEA_TOKEN=ваш_токен_здесь") + exit(1) + +headers = {"Authorization": f"token {TOKEN}"} + +# 2. Проверка токена +print("Проверяем токен...") +try: + user_info = requests.get( + "https://git.vyatsu.ru/api/v1/user", + headers=headers, + timeout=10 + ) + user_info.raise_for_status() # Проверит HTTP ошибки + + # Проверка структуры ответа + if not user_info.json().get("login"): + print("Неожиданный формат ответа от API:") + print(user_info.json()) + exit(1) + + print(f"Токен работает. Ваш логин: {user_info.json()['login']}") + +except Exception as e: + print(f"ОШИБКА при проверке токена: {e}") + print("Ответ сервера:", user_info.text if 'user_info' in locals() else "Нет ответа") + exit(1) + +# 3. Создание issue +print("\nПытаемся создать issue...") +repo_owner = "stud179126" +repo_name = "lab3" + +new_issue = { + "title": "Тестовый issue из Python", + "body": "Этот issue создан через API скриптом!" +} + +try: + response = requests.post( + f"https://git.vyatsu.ru/api/v1/repos/{repo_owner}/{repo_name}/issues", + headers=headers, + json=new_issue, + timeout=10 + ) + + if response.status_code == 201: + print("✅ Issue успешно создан!") + print("Ссылка:", response.json().get("html_url", "не найдена")) + else: + print(f"❌ Ошибка {response.status_code}:") + print(response.text) + +except Exception as e: + print(f"ОШИБКА при создании issue: {e}") \ No newline at end of file diff --git a/HTTP - соединение в vyatsu.ru .jpg b/HTTP - соединение в vyatsu.ru .jpg new file mode 100644 index 0000000..e82a8e6 Binary files /dev/null and b/HTTP - соединение в vyatsu.ru .jpg differ diff --git a/HTTP_request.py b/HTTP_request.py new file mode 100644 index 0000000..6339fc3 --- /dev/null +++ b/HTTP_request.py @@ -0,0 +1,31 @@ +import socket +import ssl + +# Создаём соединение +client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +secure_client = ssl.create_default_context().wrap_socket( + client, server_hostname='vyatsu.ru' +) +secure_client.connect(('vyatsu.ru', 443)) + +# HTTP-запрос с заголовками +request = ( + "GET / HTTP/1.1\r\n" + "Host: vyatsu.ru\r\n" + "User-Agent: python-requests/2.28.1\r\n" + "Accept: */*\r\n" + "Accept-Encoding: gzip, deflate\r\n" + "Connection: keep-alive\r\n" + "\r\n" +) +secure_client.sendall(request.encode()) + +# Получаем и распаковываем ответ +response = secure_client.recv(8192) +headers, body = response.split(b'\r\n\r\n', 1) + + +print(headers.decode()) +print(body.decode()) + +secure_client.close() \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d3214a --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Сделан захват пакетов TCP и изменён код клиента/сервера для ручного отключения +Установлено UDP соединение , в отличаии от TCP тут мы отправляем запрос в один путь и не ждем ответа ,мы не узнаем дойдёт он или нет,т.к никаких ошибок не увидим. +Использовал requests и socket для сравнения +API - написан скрипт(API.py) ,который создаёт issues (задачи) \ No newline at end of file diff --git a/TCP - Sequence Number, Sequence Number (raw), Acknowledgment Number, Acknowledgment Number (raw), Flags..jpg b/TCP - Sequence Number, Sequence Number (raw), Acknowledgment Number, Acknowledgment Number (raw), Flags..jpg new file mode 100644 index 0000000..d3f0173 Binary files /dev/null and b/TCP - Sequence Number, Sequence Number (raw), Acknowledgment Number, Acknowledgment Number (raw), Flags..jpg differ diff --git a/TCP - завершение соединения 1.jpg b/TCP - завершение соединения 1.jpg new file mode 100644 index 0000000..d85a544 Binary files /dev/null and b/TCP - завершение соединения 1.jpg differ diff --git a/TCP_Client.py b/TCP_Client.py new file mode 100644 index 0000000..51f58c8 --- /dev/null +++ b/TCP_Client.py @@ -0,0 +1,16 @@ +import socket + +client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +client.connect(('127.0.0.1', 10000)) + +while True: + message = input("Введите сообщение (или 'e' для выхода): ") + if message.lower() == 'e': + client.sendall(b'EXIT') # Отправляем серверу команду на завершение + break + else: + client.sendall(message.encode()) + data = client.recv(1024) + print(f"Ответ от сервера: {data.decode()}") + +client.close() \ No newline at end of file diff --git a/TCP_Server.py b/TCP_Server.py new file mode 100644 index 0000000..90fcd8b --- /dev/null +++ b/TCP_Server.py @@ -0,0 +1,28 @@ +import socket + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.bind(("0.0.0.0", 10000)) +server.listen(1) +print("TCP сервер запущен") + +while True: + conn, addr = server.accept() + print(f"Подключение от {addr}") + + data = conn.recv(1024) + if not data: + conn.close() + continue + + print(f"Получено: {data.decode()}") + + if data.upper() == b'EXIT': + conn.sendall(b"Server shutting down...") + conn.close() + break # Выходим из цикла и завершаем сервер + + conn.sendall(data.upper()) + conn.close() + +server.close() # Закрываем серверный сокет +print("Сервер остановлен") \ No newline at end of file diff --git a/UDP - соединение (мод).jpg b/UDP - соединение (мод).jpg new file mode 100644 index 0000000..8204923 Binary files /dev/null and b/UDP - соединение (мод).jpg differ diff --git a/UDP - соединение (просто 1 запрос).jpg b/UDP - соединение (просто 1 запрос).jpg new file mode 100644 index 0000000..eb02531 Binary files /dev/null and b/UDP - соединение (просто 1 запрос).jpg differ diff --git a/UDP_Client.py b/UDP_Client.py new file mode 100644 index 0000000..1fca3b1 --- /dev/null +++ b/UDP_Client.py @@ -0,0 +1,14 @@ +import socket + +client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +while True: + message = input("Введите сообщение (или 'exit' для выхода): ") + if message.lower() == 'exit': + break + + client.sendto(message.encode(), ('127.0.0.1', 20000)) # Новый порт 20000 + data, _ = client.recvfrom(1024) + print(f"Ответ от сервера: {data.decode()}") + +client.close() \ No newline at end of file diff --git a/UDP_Server.py b/UDP_Server.py new file mode 100644 index 0000000..9d5b0bd --- /dev/null +++ b/UDP_Server.py @@ -0,0 +1,16 @@ +import socket + +server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +server.bind(('0.0.0.0', 20000)) # Новый порт 20000 +print("UDP сервер запущен на порту 20000") + +while True: + data, addr = server.recvfrom(1024) + decoded_data = data.decode() + print(f"Получено от {addr}: {decoded_data}") + + # Модификация данных: + modified_data = decoded_data.upper().replace('O', '0') # Замена 'O' на '0' + response = f"MODIFIED: {modified_data}" # Добавляем префикс + + server.sendto(response.encode(), addr) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9ad0c89 Binary files /dev/null and b/requirements.txt differ diff --git a/Изменение - Измените TCP-клиент так, чтобы TCP-сервер завершил работу..jpg b/Изменение - Измените TCP-клиент так, чтобы TCP-сервер завершил работу..jpg new file mode 100644 index 0000000..1c81a13 Binary files /dev/null and b/Изменение - Измените TCP-клиент так, чтобы TCP-сервер завершил работу..jpg differ