Compare commits
3 Commits
5954c54ddc
...
1b49b733a1
| Author | SHA1 | Date | |
|---|---|---|---|
| 1b49b733a1 | |||
| 904d8595fa | |||
| 77f86ba165 |
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
# Игнорировать файлы Python
|
||||
pycache/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
|
||||
# Игнорировать файлы окружения
|
||||
venv/
|
||||
.venv/
|
||||
|
||||
# Игнорировать файлы конфигурации VS Code
|
||||
.vscode/
|
||||
|
||||
# Игнорировать файлы с токенами
|
||||
.env
|
||||
token.txt
|
||||
|
||||
# Временные файлы
|
||||
*.tmp
|
||||
*.bak
|
||||
*.swp
|
||||
.env
|
||||
18
README.md
18
README.md
@ -0,0 +1,18 @@
|
||||
# Лабораторная работа №3
|
||||
|
||||
## Описание работы
|
||||
|
||||
### Цель работы
|
||||
Изучение сетевых соединений в Python
|
||||
|
||||
### Содержание работы
|
||||
* Создание TCP-сервера
|
||||
* Создание TCP-клиента
|
||||
* Анализ трафика в Wireshark
|
||||
* Работа с HTTP
|
||||
* Взаимодействие с API
|
||||
|
||||
### Инструкция по запуску
|
||||
1. Активация виртуального окружения
|
||||
2. Установка зависимостей
|
||||
3. Запуск программ
|
||||
28
create_repo.py
Normal file
28
create_repo.py
Normal file
@ -0,0 +1,28 @@
|
||||
import os
|
||||
import requests
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
TOKEN = os.getenv("TOKEN")
|
||||
|
||||
headers = {
|
||||
"Authorization": f"token {TOKEN}"
|
||||
}
|
||||
|
||||
data = {
|
||||
"name": "lab3-api-test"
|
||||
}
|
||||
|
||||
response = requests.post(
|
||||
"https://git.vyatsu.ru/api/v1/user/repos",
|
||||
headers=headers,
|
||||
json=data
|
||||
)
|
||||
|
||||
print("Статус:", response.status_code)
|
||||
|
||||
print(response.json())
|
||||
|
||||
input()
|
||||
15
docs/architecture.md
Normal file
15
docs/architecture.md
Normal file
@ -0,0 +1,15 @@
|
||||
lab3/
|
||||
├── src/
|
||||
│ ├── tcp_server.py
|
||||
│ ├── tcp_client.py
|
||||
│ ├── udp_server.py
|
||||
│ ├── udp_client.py
|
||||
│ └── config.py
|
||||
├── tests/
|
||||
│ └── test_server.py
|
||||
├── docs/
|
||||
│ └── architecture.md
|
||||
├── README.md
|
||||
├── requirements.txt
|
||||
├── run.sh
|
||||
└── .gitignore
|
||||
23
gitea_api.py
Normal file
23
gitea_api.py
Normal file
@ -0,0 +1,23 @@
|
||||
import os
|
||||
import requests
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
TOKEN = os.getenv("TOKEN")
|
||||
|
||||
headers = {
|
||||
"Authorization": f"token {TOKEN}"
|
||||
}
|
||||
|
||||
response = requests.get(
|
||||
"https://git.vyatsu.ru/api/v1/user",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
print("Статус:", response.status_code)
|
||||
|
||||
print(response.json())
|
||||
|
||||
input("\nНажми Enter...")
|
||||
41
http_requests.py
Normal file
41
http_requests.py
Normal file
@ -0,0 +1,41 @@
|
||||
import socket
|
||||
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
print("Подключение к серверу...")
|
||||
|
||||
client.connect(("vyatsu.ru", 80))
|
||||
|
||||
request = (
|
||||
"GET / HTTP/1.1\r\n"
|
||||
"Host: vyatsu.ru\r\n"
|
||||
"User-Agent: Mozilla/5.0\r\n"
|
||||
"Accept: */*\r\n"
|
||||
"Connection: close\r\n"
|
||||
"\r\n"
|
||||
)
|
||||
|
||||
print("Отправка запроса...\n")
|
||||
|
||||
client.sendall(request.encode())
|
||||
|
||||
response = b""
|
||||
|
||||
running = True
|
||||
|
||||
while running:
|
||||
|
||||
data = client.recv(4096)
|
||||
|
||||
if data:
|
||||
response += data
|
||||
else:
|
||||
running = False
|
||||
|
||||
decoded = response.decode(errors="ignore")
|
||||
|
||||
print(decoded[:5000])
|
||||
|
||||
client.close()
|
||||
|
||||
input("\nНажми Enter...")
|
||||
26
http_socket.py
Normal file
26
http_socket.py
Normal file
@ -0,0 +1,26 @@
|
||||
import socket
|
||||
|
||||
client = socket.socket(
|
||||
socket.AF_INET,
|
||||
socket.SOCK_STREAM
|
||||
)
|
||||
|
||||
client.connect(("vyatsu.ru", 80))
|
||||
|
||||
request = (
|
||||
"GET / HTTP/1.1\r\n"
|
||||
"Host: vyatsu.ru\r\n"
|
||||
"User-Agent: python-requests/2.32.3\r\n"
|
||||
"Accept-Encoding: gzip, deflate\r\n"
|
||||
"Accept: */*\r\n"
|
||||
"Connection: keep-alive\r\n"
|
||||
"\r\n"
|
||||
)
|
||||
|
||||
client.sendall(request.encode())
|
||||
|
||||
response = client.recv(4096)
|
||||
|
||||
print(response.decode(errors="ignore"))
|
||||
|
||||
client.close()
|
||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
requests
|
||||
5
run.sh
Normal file
5
run.sh
Normal file
@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
echo "Запуск TCP сервера"
|
||||
python src/tcp_server.py &
|
||||
echo "Запуск TCP клиента"
|
||||
python src/tcp_client.py
|
||||
4
src/config.py
Normal file
4
src/config.py
Normal file
@ -0,0 +1,4 @@
|
||||
# config.py
|
||||
HOST = '127.0.0.1'
|
||||
TCP_PORT = 10000
|
||||
UDP_PORT = 10001
|
||||
15
src/tcp_client.py
Normal file
15
src/tcp_client.py
Normal file
@ -0,0 +1,15 @@
|
||||
import socket
|
||||
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
client.connect(("127.0.0.1", 10000))
|
||||
|
||||
message = input("Введите сообщение: ")
|
||||
|
||||
client.sendall(message.encode())
|
||||
|
||||
data = client.recv(1024)
|
||||
|
||||
print(f"Ответ сервера: {data.decode()}")
|
||||
|
||||
client.close()
|
||||
34
src/tcp_server.py
Normal file
34
src/tcp_server.py
Normal file
@ -0,0 +1,34 @@
|
||||
import socket
|
||||
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
server.bind(("0.0.0.0", 10000))
|
||||
|
||||
server.listen(1)
|
||||
|
||||
print("TCP сервер запущен")
|
||||
|
||||
running = True
|
||||
|
||||
while running:
|
||||
|
||||
conn, addr = server.accept()
|
||||
|
||||
print(f"Подключение от {addr}")
|
||||
|
||||
data = conn.recv(1024)
|
||||
|
||||
if data:
|
||||
|
||||
text = data.decode()
|
||||
|
||||
print(f"Получено: {text}")
|
||||
|
||||
conn.sendall(data.upper())
|
||||
|
||||
if text.upper() == "EXIT":
|
||||
running = False
|
||||
|
||||
conn.close()
|
||||
|
||||
server.close()
|
||||
20
src/udp_client.py
Normal file
20
src/udp_client.py
Normal file
@ -0,0 +1,20 @@
|
||||
import socket
|
||||
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
|
||||
running = True
|
||||
|
||||
while running:
|
||||
|
||||
message = input("Введите сообщение: ")
|
||||
|
||||
client.sendto(message.encode(), ("127.0.0.1", 12000))
|
||||
|
||||
data, _ = client.recvfrom(1024)
|
||||
|
||||
print(f"Ответ сервера: {data.decode()}")
|
||||
|
||||
if message.upper() == "EXIT":
|
||||
running = False
|
||||
|
||||
client.close()
|
||||
26
src/udp_server.py
Normal file
26
src/udp_server.py
Normal file
@ -0,0 +1,26 @@
|
||||
import socket
|
||||
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
|
||||
server.bind(("0.0.0.0", 12000))
|
||||
|
||||
print("UDP сервер запущен")
|
||||
|
||||
running = True
|
||||
|
||||
while running:
|
||||
|
||||
data, addr = server.recvfrom(1024)
|
||||
|
||||
text = data.decode()
|
||||
|
||||
print(f"Сообщение от {addr}: {text}")
|
||||
|
||||
response = "СЕРВЕР: " + text[::-1]
|
||||
|
||||
server.sendto(response.encode(), addr)
|
||||
|
||||
if text.upper() == "EXIT":
|
||||
running = False
|
||||
|
||||
server.close()
|
||||
9
tests/test_server.py
Normal file
9
tests/test_server.py
Normal file
@ -0,0 +1,9 @@
|
||||
import unittest
|
||||
|
||||
class TestServer(unittest.TestCase):
|
||||
def test_connection(self):
|
||||
# Здесь будет код теста
|
||||
pass
|
||||
|
||||
if name == 'master':
|
||||
unittest.main()
|
||||
Loading…
Reference in New Issue
Block a user