Реализация основных функций Tor для доступа к onion-сервисам версии 3 с возможностью аутентификации клиента.
Поддерживает работу с Guard-узлами из консенсуса, мостов, а также мостов с транспортом obfs4 (iat-mode=0).
Также присутствует самописная реализация TLS 1.3 (шифрование TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, кривые secp256r1 и x25519). Много чего отсутствует из стандарта, но в контексте задачи это и не нужно.
Писал как прототип для отладки/изучения и последующего переписывания на C
Архив в аттаче.
Для работы необходимы следующие модули
Запуск
Подключение к мосту
Подключение к Guard-узлу (нужен fingerprint узла и его ntor-ключ)
Подключение к мосту с поддержкой obfs4
Запрос в клирнет
Запрос в даркнет
Запрос в даркнет с авторизацией клиента
Поддерживает работу с Guard-узлами из консенсуса, мостов, а также мостов с транспортом obfs4 (iat-mode=0).
Также присутствует самописная реализация TLS 1.3 (шифрование TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, кривые secp256r1 и x25519). Много чего отсутствует из стандарта, но в контексте задачи это и не нужно.
Писал как прототип для отладки/изучения и последующего переписывания на C
Архив в аттаче.
Для работы необходимы следующие модули
python -m venv py_test_env
call .\py_test_env\Scripts\activate.bat
pip install cryptography
pip install PyNaCl
Запуск
call .\py_test_env\Scripts\activate.bat
python main.py
Подключение к мосту
Python:
tor = make_tor('87.100.193.2', 9010)
Подключение к Guard-узлу (нужен fingerprint узла и его ntor-ключ)
Python:
tor = make_tor('87.100.193.2', 9010, '<fingerprint>', '<ntor key>')
Подключение к мосту с поддержкой obfs4
Python:
tor = make_tor_obfs4('167.71.76.157', 7962, '1/awezUsTbi3BUkYm95ye/tx+yNiqNhHs9nUZYc/97/krESVR64NwxTW9MYcBmdX/4zzMw')
Запрос в клирнет
Python:
host = 'api.ipify.org'
port = 80
req = f'GET / HTTP/1.1\r\n' \
f'Host: {host}\r\n' \
f'Connection: close\r\n\r\n'
circ_id = tor.clearnet_create_circuit(7)
data = tor.clearnet_send(circ_id, host, port, req)
hexdump(data)
Запрос в даркнет
Python:
host = 'xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion'
port = 80
req = f'GET / HTTP/1.1\r\n' \
f'Host: {host}\r\n' \
f'Connection: close\r\n\r\n'
circ_id = tor.darknet_create_circuit(host)
data = tor.darknet_send(circ_id, port, req)
hexdump(data)
Запрос в даркнет с авторизацией клиента
Python:
host = 'ltkdzbpfxl3fhzq3oyk6uqjzfoiin2q6debfjb7o3rfupft2jkmkitqd.onion'
port = 80
auth_key = 'E37NV62BY7X2TQUCQMH7QQKBNSEON23EAPSWNZBEP2WAIQNV2ASQ'
req = f'GET / HTTP/1.1\r\n' \
f'Host: {host}\r\n' \
f'Connection: close\r\n\r\n'
circ_id = tor.darknet_create_circuit(host, auth_key)
data = tor.darknet_send(circ_id, port, req)
hexdump(data)