No description
  • Go 78.1%
  • JavaScript 11.6%
  • CSS 4.4%
  • HTML 3%
  • Shell 1.5%
  • Other 1.4%
Find a file
2026-02-06 23:12:09 +03:00
.qwen Реализация frontend 2026-02-06 22:58:00 +03:00
auth Реализация frontend 2026-02-06 22:58:00 +03:00
config Добавление тестов для чтения конфигурации 2026-02-06 21:54:44 +03:00
docs Реализация frontend 2026-02-06 22:58:00 +03:00
portintranettunnel-release Реализация frontend 2026-02-06 22:58:00 +03:00
scanner Реализация ядра сканера 2026-02-06 22:14:55 +03:00
static Реализация frontend 2026-02-06 22:58:00 +03:00
tunnel Добавление ядра туннелирования 2026-02-06 22:01:31 +03:00
web Исправление тестов 2026-02-06 23:05:16 +03:00
.gitignore Реализация frontend 2026-02-06 22:58:00 +03:00
build.ps1 Реализация frontend 2026-02-06 22:58:00 +03:00
build.sh Реализация frontend 2026-02-06 22:58:00 +03:00
config.example.json first commit 2026-02-06 21:42:46 +03:00
go.mod first commit 2026-02-06 21:42:46 +03:00
LICENSE first commit 2026-02-06 21:42:46 +03:00
main.go Реализация frontend 2026-02-06 22:58:00 +03:00
README.md Обновление README.md 2026-02-06 23:12:09 +03:00

PortIntranetTunnel

Go Version License Status Repo

PortIntranetTunnel — это легковесный, автономный, безопасный веб-сервис для временного перенаправления TCP-трафика и сканирования устройств во внутренней сети.

🚀 Особенности

  • Нулевые внешние зависимости — только стандартная библиотека Go
  • Распространение в виде одного исполняемого файла — легко деплоить и использовать
  • Настройка при запуске — через JSON-файл или флаги командной строки
  • Безопасность по умолчанию — HTTP Basic Authentication, ограничения на сканирование, контроль доступа
  • Удобный веб-интерфейсс использованием vanilla JavaScript, без необходимости в сложных фреймворках
  • Автоматическая очистка — устаревшие туннели автоматически удаляются
  • Ограничения ресурсов — контроль количества активных туннелей и времени их жизни

🛠 Технологии

  • Язык программирования: Go 1.20+
  • Стандартная библиотека: только встроенные пакеты Go
  • Конфигурация: JSON-файл
  • Аутентификация: HTTP Basic Authentication
  • Веб-интерфейс: vanilla JavaScript, HTML, CSS
  • Сканирование: TCP-сканирование с ограничениями

📋 Конфигурация

Сервис настраивается через JSON-файл. Пример конфигурации см. в файле config.example.json:

{
  "listen": ":8081",
  "auth": {
    "user": "admin",
    "pass": "secret"
  },
  "tunnel": {
    "port_range": [20000, 30000],
    "max_duration_minutes": 60,
    "max_count": 20
  },
  "scan": {
    "max_cidr": 22,
    "rate_limit_seconds": 10,
    "default_timeout_seconds": 2
  },
  "allowed_networks": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
  "log_file": ""
}

Параметры конфигурации:

  • listen: Адрес и порт, на котором будет слушать сервис
  • auth.user: Имя пользователя для HTTP Basic Authentication
  • auth.pass: Пароль для HTTP Basic Authentication
  • tunnel.port_range: Диапазон портов, которые могут использоваться для туннелей
  • tunnel.max_duration_minutes: Максимальная продолжительность жизни туннеля в минутах
  • tunnel.max_count: Максимальное количество активных туннелей
  • scan.max_cidr: Максимальный размер CIDR-блока для сканирования (например, 22 означает /22)
  • scan.rate_limit_seconds: Минимальный интервал между сканированиями
  • scan.default_timeout_seconds: Таймаут для операций сканирования
  • allowed_networks: Список разрешенных сетей для сканирования
  • log_file: Путь к файлу логов (пустая строка означает вывод в stderr)

🚀 Быстрый старт

Сборка из исходников

# Клонирование репозитория
git clone https://github.com/yourusername/portintranettunnel.git
cd portintranettunnel

# Сборка проекта
go build -o portintranettunnel .

# Запуск со стандартными настройками (будет создан config.json по умолчанию)
./portintranettunnel

# Или запуск с пользовательской конфигурацией
./portintranettunnel --config config.json

Использование готового бинарного файла

  1. Скачайте архив с релизом
  2. Извлеките бинарный файл и config.example.json
  3. Переименуйте config.example.json в config.json и настройте под себя
  4. Запустите ./portintranettunnel

🖥️ Веб-интерфейс

После запуска сервиса откройте в браузере http://localhost:8081 (или другой порт, указанный в конфигурации).

Функции интерфейса:

1. Создание туннелей

  • Введите целевой адрес в формате host:port (например, 192.168.1.10:80)
  • Нажмите "Создать туннель"
  • Сервис создаст туннель и назначит ему локальный порт
  • Активные туннели отображаются в разделе "Активные туннели"
  • Туннель можно удалить кнопкой "Удалить"

2. Сканирование сети

  • Введите целевой IP или CIDR-диапазон (например, 192.168.1.0/24)
  • Укажите порты для сканирования через запятую (например, 22,80,443)
  • Нажмите "Сканировать"
  • Результаты сканирования отобразятся ниже
  • Открытые порты будут помечены зеленым, закрытые — красным

🔐 Безопасность

PortIntranetTunnel включает несколько уровней безопасности:

  • HTTP Basic Authentication: Все API-эндпоинты защищены аутентификацией
  • Ограничение сетей: Сканирование возможно только в разрешенных сетях
  • Ограничение CIDR: Максимальный размер сканируемого блока ограничен
  • Rate limiting: Ограничение частоты сканирования
  • Ограничение туннелей: Максимальное количество активных туннелей
  • Таймауты: Автоматическое удаление устаревших туннелей
  • Валидация входных данных: Все входные параметры проверяются

🧪 Тестирование

Для запуска всех тестов:

go test ./...

Для запуска тестов конкретного пакета:

go test ./web/
go test ./tunnel/
go test ./scanner/
go test ./config/

📦 Сборка для разных платформ

Используйте предоставленные скрипты сборки:

# Linux
./build.sh

# Windows (PowerShell)
./build.ps1

Или соберите вручную:

# Linux AMD64
GOOS=linux GOARCH=amd64 go build -o portintranettunnel-linux-amd64 .

# Windows AMD64
GOOS=windows GOARCH=amd64 go build -o portintranettunnel-windows-amd64.exe .

# macOS AMD64
GOOS=darwin GOARCH=amd64 go build -o portintranettunnel-darwin-amd64 .

📚 Документация

  • docs/USAGE.md — руководство по использованию
  • docs/ROADMAP.md — план разработки проекта
  • config.example.json — пример файла конфигурации
  • Репозиторий проекта — исходный код и история изменений

© Лицензия

Этот проект распространяется под лицензией MIT - см. файл LICENSE для подробностей.

Состояние проекта

Проект полностью реализован и готов к использованию!

Все фазы разработки завершены:

  • Фаза 0: Подготовка и структура проекта
  • Фаза 1: Конфигурация и валидация
  • Фаза 2: TCP-форвардинг
  • Фаза 3: Сканирование сети
  • Фаза 4: Веб-сервер с аутентификацией
  • Фаза 5: Frontend с интерактивным интерфейсом
  • Фаза 6: Механизмы безопасности
  • Фаза 7: Тестирование и документация
  • Фаза 8: Скрипты сборки и релиза

📊 Статистика проекта

  • Язык программирования: Go 1.20+
  • Зависимости: Только стандартная библиотека
  • Размер бинарника: ~12MB
  • Количество строк кода: ~1500 LOC
  • Компоненты: 5 основных модулей (config, tunnel, scanner, auth, web)
  • Тесты: Unit- и интеграционные тесты для всех компонентов
  • Лицензия: MIT
  • Репозиторий: https://git.ymnuktech.ru/ymnuk/portintranettunnel