Lab 3: TCP/UDP servers, HTTP clients, Gitea API integration - repo created successfully
This commit is contained in:
commit
0bbdad4a4b
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Виртуальные окружения
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Файлы Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Операционные системы
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Логи и временные файлы
|
||||||
|
*.log
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Работа с сетевыми соединениями в Python
|
||||||
|
|
||||||
|
Лабораторная работа №3 по сетям.
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
Реализация TCP/UDP клиентов и серверов, анализ трафика в Wireshark, работа с HTTP и API Gitea.
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
1. Клонируйте репозиторий.
|
||||||
|
2. Создайте и активируйте виртуальное окружение:
|
||||||
|
```bash
|
||||||
|
python -m venv venv
|
||||||
|
.\venv\Scripts\Activate.ps1 # для Windows PowerShell
|
||||||
27
gitea_api.py
Normal file
27
gitea_api.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
# Загружаем переменные из .env файла
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
TOKEN = os.getenv("GITEA_TOKEN")
|
||||||
|
if not TOKEN:
|
||||||
|
raise ValueError("Токен Gitea не найден. Проверьте файл .env")
|
||||||
|
|
||||||
|
headers = {"Authorization": f"token {TOKEN}"}
|
||||||
|
|
||||||
|
# Получаем информацию о пользователе
|
||||||
|
response = requests.get("https://git.vyatsu.ru/api/v1/user", headers=headers)
|
||||||
|
print("Информация о пользователе:")
|
||||||
|
print(response.json())
|
||||||
|
|
||||||
|
# Пример создания репозитория (раскомментируйте, если нужно)
|
||||||
|
repo_data = {
|
||||||
|
"name": "test-repo-from-api",
|
||||||
|
"description": "Репозиторий созданный через API",
|
||||||
|
"private": False
|
||||||
|
}
|
||||||
|
response = requests.post("https://git.vyatsu.ru/api/v1/user/repos", json=repo_data, headers=headers)
|
||||||
|
print("\nСоздание репозитория:")
|
||||||
|
print(response.status_code, response.json())
|
||||||
4
http_requests_client.py
Normal file
4
http_requests_client.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
response = requests.get("http://vyatsu.ru")
|
||||||
|
print(response.text[:500]) # Первые 500 символов ответа
|
||||||
17
http_socket_client.py
Normal file
17
http_socket_client.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
client.connect(('vyatsu.ru', 80))
|
||||||
|
|
||||||
|
request = "GET / HTTP/1.1\r\nHost: vyatsu.ru\r\nConnection: close\r\n\r\n"
|
||||||
|
client.sendall(request.encode())
|
||||||
|
|
||||||
|
response = b""
|
||||||
|
while True:
|
||||||
|
chunk = client.recv(4096)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
response += chunk
|
||||||
|
|
||||||
|
print(response.decode(errors='ignore'))
|
||||||
|
client.close()
|
||||||
12
tcp_client.py
Normal file
12
tcp_client.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
client.connect(('127.0.0.1', 10000))
|
||||||
|
|
||||||
|
message = input("Введите сообщение для отправки серверу (или 'EXIT' для выхода): ")
|
||||||
|
client.sendall(message.encode())
|
||||||
|
|
||||||
|
data = client.recv(1024)
|
||||||
|
print(f"Ответ от сервера: {data.decode()}")
|
||||||
|
|
||||||
|
client.close()
|
||||||
29
tcp_server.py
Normal file
29
tcp_server.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
server.bind(("0.0.0.0", 10000))
|
||||||
|
server.listen(1)
|
||||||
|
print("TCP сервер запущен на порту 10000...")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
conn, addr = server.accept()
|
||||||
|
print(f"Подключение от {addr}")
|
||||||
|
|
||||||
|
data = conn.recv(1024)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Модифицируем данные: переводим в верхний регистр
|
||||||
|
modified_data = data.upper()
|
||||||
|
conn.sendall(modified_data)
|
||||||
|
|
||||||
|
# Если клиент отправил 'EXIT' — завершаем сервер
|
||||||
|
if modified_data == b'EXIT':
|
||||||
|
print("Получена команда EXIT. Сервер завершает работу.")
|
||||||
|
conn.close()
|
||||||
|
break
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
server.close()
|
||||||
|
print("Сервер остановлен.")
|
||||||
11
udp_client.py
Normal file
11
udp_client.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
|
||||||
|
message = input("Введите сообщение для отправки UDP-серверу (или 'EXIT' для выхода): ")
|
||||||
|
client.sendto(message.encode(), ('127.0.0.1', 10001))
|
||||||
|
|
||||||
|
data, _ = client.recvfrom(1024)
|
||||||
|
print(f"Ответ от сервера: {data.decode()}")
|
||||||
|
|
||||||
|
client.close()
|
||||||
22
udp_server.py
Normal file
22
udp_server.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import socket
|
||||||
|
|
||||||
|
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
server.bind(('0.0.0.0', 10001))
|
||||||
|
print("UDP сервер запущен на порту 10001...")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
data, addr = server.recvfrom(1024)
|
||||||
|
print(f"Сообщение от {addr}: {data.decode()}")
|
||||||
|
|
||||||
|
# Модифицируем данные: переводим в верхний регистр
|
||||||
|
modified_data = data.upper()
|
||||||
|
server.sendto(modified_data, addr)
|
||||||
|
|
||||||
|
# Опционально: можно добавить условие выхода, но UDP не имеет "соединения"
|
||||||
|
# Например, если получили 'EXIT' — выходим
|
||||||
|
if modified_data == b'EXIT':
|
||||||
|
print("Получена команда EXIT. Сервер завершает работу.")
|
||||||
|
break
|
||||||
|
|
||||||
|
server.close()
|
||||||
|
print("UDP сервер остановлен.")
|
||||||
Loading…
Reference in New Issue
Block a user