No description
- Go 78.1%
- JavaScript 11.6%
- CSS 4.4%
- HTML 3%
- Shell 1.5%
- Other 1.4%
| .qwen | ||
| auth | ||
| config | ||
| docs | ||
| portintranettunnel-release | ||
| scanner | ||
| static | ||
| tunnel | ||
| web | ||
| .gitignore | ||
| build.ps1 | ||
| build.sh | ||
| config.example.json | ||
| go.mod | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
PortIntranetTunnel
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 Authenticationauth.pass: Пароль для HTTP Basic Authenticationtunnel.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
Использование готового бинарного файла
- Скачайте архив с релизом
- Извлеките бинарный файл и
config.example.json - Переименуйте
config.example.jsonвconfig.jsonи настройте под себя - Запустите
./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