udtp-protocol 3.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- udtp_protocol-3.6.1/PKG-INFO +10 -0
- udtp_protocol-3.6.1/setup.cfg +4 -0
- udtp_protocol-3.6.1/setup.py +19 -0
- udtp_protocol-3.6.1/tests/test.py +75 -0
- udtp_protocol-3.6.1/udtp_core/__init__.py +2 -0
- udtp_protocol-3.6.1/udtp_core/compiler.py +17 -0
- udtp_protocol-3.6.1/udtp_core/engine.py +42 -0
- udtp_protocol-3.6.1/udtp_protocol.egg-info/PKG-INFO +10 -0
- udtp_protocol-3.6.1/udtp_protocol.egg-info/SOURCES.txt +10 -0
- udtp_protocol-3.6.1/udtp_protocol.egg-info/dependency_links.txt +1 -0
- udtp_protocol-3.6.1/udtp_protocol.egg-info/entry_points.txt +2 -0
- udtp_protocol-3.6.1/udtp_protocol.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: udtp_protocol
|
|
3
|
+
Version: 3.6.1
|
|
4
|
+
Summary: Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.
|
|
5
|
+
Author: HioDev
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Topic :: System :: Networking
|
|
8
|
+
Dynamic: author
|
|
9
|
+
Dynamic: classifier
|
|
10
|
+
Dynamic: summary
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name='udtp_protocol',
|
|
5
|
+
version='3.6.1',
|
|
6
|
+
description='Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.',
|
|
7
|
+
author='HioDev',
|
|
8
|
+
packages=find_packages(),
|
|
9
|
+
install_requires=[],
|
|
10
|
+
entry_points={
|
|
11
|
+
'console_scripts': [
|
|
12
|
+
'udtp-compile=udtp_core.compiler:main_cli',
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
classifiers=[
|
|
16
|
+
'Programming Language :: Python :: 3',
|
|
17
|
+
'Topic :: System :: Networking',
|
|
18
|
+
],
|
|
19
|
+
)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
import struct
|
|
4
|
+
import binascii
|
|
5
|
+
|
|
6
|
+
# Добавляем путь, чтобы Python видел наш пакет udtp_core
|
|
7
|
+
sys.path.append(os.path.join(os.getcwd(), 'udtp_core'))
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
from udtp_core.engine import UDTP_Packet
|
|
11
|
+
from udtp_core.compiler import UDTP_Compiler
|
|
12
|
+
except ImportError:
|
|
13
|
+
print("❌ Ошибка: Сначала запусти генератор проекта, чтобы создать папку udtp_core!")
|
|
14
|
+
sys.exit(1)
|
|
15
|
+
|
|
16
|
+
def run_tests():
|
|
17
|
+
print("🧪 ЗАПУСК СИСТЕМЫ ТЕСТИРОВАНИЯ UDTP\n" + "="*40)
|
|
18
|
+
|
|
19
|
+
# ТЕСТ 1: Валидация упаковки (Pack/Unpack)
|
|
20
|
+
print("[TEST 1] Проверка бинарной упаковки...")
|
|
21
|
+
original_data = b"Secret Payload"
|
|
22
|
+
packet = UDTP_Packet(src_port=8080, dst_port=9090, seq=1, data=original_data)
|
|
23
|
+
raw_bytes = packet.pack()
|
|
24
|
+
|
|
25
|
+
parsed = UDTP_Packet.unpack(raw_bytes)
|
|
26
|
+
if parsed['data'] == original_data and parsed['seq'] == 1:
|
|
27
|
+
print("✅ Успех: Данные корректно упакованы и распакованы.")
|
|
28
|
+
else:
|
|
29
|
+
print("❌ Ошибка: Данные при распаковке искажены!")
|
|
30
|
+
|
|
31
|
+
# ТЕСТ 2: Контрольная сумма (Checksum/CRC32)
|
|
32
|
+
print("\n[TEST 2] Проверка защиты от повреждений (CRC32)...")
|
|
33
|
+
corrupted_bytes = bytearray(raw_bytes)
|
|
34
|
+
# Искусственно меняем один байт в данных (имитация помех в кабеле)
|
|
35
|
+
corrupted_bytes[-1] = corrupted_bytes[-1] ^ 0xFF
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
# Проверяем, совпадет ли CRC32 (в идеале unpack должен выдать ошибку,
|
|
39
|
+
# если мы добавим проверку CRC в метод unpack)
|
|
40
|
+
h_size = struct.calcsize(UDTP_Packet.HEADER_FORMAT)
|
|
41
|
+
header_parts = struct.unpack(UDTP_Packet.HEADER_FORMAT, corrupted_bytes[:h_size])
|
|
42
|
+
received_crc = header_parts[6]
|
|
43
|
+
|
|
44
|
+
# Считаем CRC заново для "битых" данных
|
|
45
|
+
pre_header = corrupted_bytes[:h_size-4] # Заголовок без CRC
|
|
46
|
+
actual_crc = binascii.crc32(pre_header + corrupted_bytes[h_size:]) & 0xFFFFFFFF
|
|
47
|
+
|
|
48
|
+
if received_crc != actual_crc:
|
|
49
|
+
print(f"✅ Успех: Система обнаружила повреждение! (CRC {received_crc} != {actual_crc})")
|
|
50
|
+
else:
|
|
51
|
+
print("❌ Ошибка: Повреждение не замечено!")
|
|
52
|
+
except Exception as e:
|
|
53
|
+
print(f"❌ Сбой теста: {e}")
|
|
54
|
+
|
|
55
|
+
# ТЕСТ 3: Компиляция большого файла
|
|
56
|
+
print("\n[TEST 3] Тест компилятора (Сегментация)...")
|
|
57
|
+
big_data = b"A" * 5000 # 5 килобайт данных
|
|
58
|
+
with open("large_test.bin", "wb") as f: f.write(big_data)
|
|
59
|
+
|
|
60
|
+
compiler = UDTP_Compiler(mtu=1000) # Разбиваем по 1000 байт
|
|
61
|
+
compiler.compile_binary("large_test.bin", "output.udtp")
|
|
62
|
+
|
|
63
|
+
# Считаем размер: заголовок(19) + данные(1000) = 1019 байт на пакет.
|
|
64
|
+
# Должно быть 5 полных пакетов.
|
|
65
|
+
file_size = os.path.getsize("output.udtp")
|
|
66
|
+
expected_min = 5 * 1019
|
|
67
|
+
if file_size >= expected_min:
|
|
68
|
+
print(f"✅ Успех: Файл сегментирован. Итоговый размер: {file_size} байт.")
|
|
69
|
+
else:
|
|
70
|
+
print(f"❌ Ошибка: Неверный размер скомпилированного UDTP-файла ({file_size}).")
|
|
71
|
+
|
|
72
|
+
print("\n" + "="*40 + "\n🎉 ВСЕ ТЕСТЫ ПРОЙДЕНЫ!")
|
|
73
|
+
|
|
74
|
+
if __name__ == "__main__":
|
|
75
|
+
run_tests()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from .engine import UDTP_Packet
|
|
3
|
+
|
|
4
|
+
class UDTP_Compiler:
|
|
5
|
+
def __init__(self, mtu=1400):
|
|
6
|
+
self.mtu = mtu
|
|
7
|
+
|
|
8
|
+
def compile_binary(self, input_file, output_udtp_bin):
|
|
9
|
+
if not os.path.exists(input_file): return False
|
|
10
|
+
|
|
11
|
+
packets_count = 0
|
|
12
|
+
with open(input_file, 'rb') as src, open(output_udtp_bin, 'wb') as dst:
|
|
13
|
+
while chunk := src.read(self.mtu):
|
|
14
|
+
p = UDTP_Packet(src_port=5000, dst_port=5000, seq=packets_count, data=chunk)
|
|
15
|
+
dst.write(p.pack())
|
|
16
|
+
packets_count += 1
|
|
17
|
+
print(f"[*] Скомпилировано {packets_count} UDTP пакетов в {output_udtp_bin}")
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import struct
|
|
2
|
+
import binascii
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
class UDTP_Packet:
|
|
6
|
+
# Заголовок UDTP:
|
|
7
|
+
# [Signature:4b][Src:2b][Dst:2b][Seq:4b][Ack:4b][Flags:1b][CRC:4b] = 19 байт
|
|
8
|
+
HEADER_FORMAT = "!4sHHIIBI"
|
|
9
|
+
SIGNATURE = b"UDTP"
|
|
10
|
+
|
|
11
|
+
def __init__(self, src_port, dst_port, seq=0, ack=0, flags=0, data=b""):
|
|
12
|
+
self.src = src_port
|
|
13
|
+
self.dst = dst_port
|
|
14
|
+
self.seq = seq
|
|
15
|
+
self.ack = ack
|
|
16
|
+
self.flags = flags
|
|
17
|
+
self.data = data
|
|
18
|
+
|
|
19
|
+
def pack(self) -> bytes:
|
|
20
|
+
# Предварительная упаковка для расчета контрольной суммы
|
|
21
|
+
pre_header = struct.pack("!4sHHIIB", self.SIGNATURE, self.src, self.dst, self.seq, self.ack, self.flags)
|
|
22
|
+
checksum = binascii.crc32(pre_header + self.data) & 0xFFFFFFFF
|
|
23
|
+
|
|
24
|
+
# Финальный пакет
|
|
25
|
+
return struct.pack(self.HEADER_FORMAT, self.SIGNATURE, self.src, self.dst, self.seq, self.ack, self.flags, checksum) + self.data
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def unpack(cls, raw_bytes):
|
|
29
|
+
h_size = struct.calcsize(cls.HEADER_FORMAT)
|
|
30
|
+
if len(raw_bytes) < h_size: raise ValueError("Packet too small")
|
|
31
|
+
|
|
32
|
+
h = struct.unpack(cls.HEADER_FORMAT, raw_bytes[:h_size])
|
|
33
|
+
if h[0] != cls.SIGNATURE: raise ValueError("Invalid UDTP Signature")
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
"ports": (h[1], h[2]),
|
|
37
|
+
"seq": h[3],
|
|
38
|
+
"ack": h[4],
|
|
39
|
+
"flags": h[5],
|
|
40
|
+
"crc": h[6],
|
|
41
|
+
"data": raw_bytes[h_size:]
|
|
42
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: udtp_protocol
|
|
3
|
+
Version: 3.6.1
|
|
4
|
+
Summary: Universal Data Transfer Protocol Stack, created on TAFTP. With new functions based on TCP, TAFTP.
|
|
5
|
+
Author: HioDev
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Topic :: System :: Networking
|
|
8
|
+
Dynamic: author
|
|
9
|
+
Dynamic: classifier
|
|
10
|
+
Dynamic: summary
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
setup.py
|
|
2
|
+
tests/test.py
|
|
3
|
+
udtp_core/__init__.py
|
|
4
|
+
udtp_core/compiler.py
|
|
5
|
+
udtp_core/engine.py
|
|
6
|
+
udtp_protocol.egg-info/PKG-INFO
|
|
7
|
+
udtp_protocol.egg-info/SOURCES.txt
|
|
8
|
+
udtp_protocol.egg-info/dependency_links.txt
|
|
9
|
+
udtp_protocol.egg-info/entry_points.txt
|
|
10
|
+
udtp_protocol.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
udtp_core
|