Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
gonc — Netcat с автоматическим обходом NAT, безопасным P2P и расширенными возможностями для доступа к оболочке, передачи файлов и сетевого проксирования. | Kitploit
Инструменты/GitHubGitHub/threatexpert/gonc
Утилиты общего назначенияИнструменты шифрования/дешифрованияВеб-прокси и перехватЭксфильтрация данныхСетевая безопасностьТестирование на ПроникновениеКомандование и УправлениеRed TeamingИнструмент Удаленного Доступа
GitHubthreatexpert/gonc

gonc

Netcat с автоматическим обходом NAT, безопасным P2P и расширенными возможностями для доступа к оболочке, передачи файлов и сетевого проксирования.

6956021 месяц назадПроверено Kitploit
РепозиторийСайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Введение в gonc

README на китайском 、 английском

gonc — это инструмент netcat на основе Golang, предназначенный для облегчения одноранговой связи. Его основные возможности включают:

  • 🔁 Автоматическое обход NAT: Нулевая конфигурация. Обеим сторонам достаточно согласовать парольную фразу. Используя параметр -p2p, узлы могут автоматически обнаруживать сетевые адреса друг друга и устанавливать соединение точка-точка через обход NAT, используя публичные сервисы STUN и MQTT для обмена адресами.

  • 🔒 Сквозное шифрование с взаимной аутентификацией: Поддерживает TLS для TCP и DTLS для UDP шифрованной передачи, с взаимной аутентификацией идентичности на основе парольной фразы.

  • 🧩 Гибкая конфигурация сервисов: С помощью параметра -e вы можете гибко настроить приложение для обслуживания каждого соединения. Например, -e /bin/sh может предоставить удалённую командную оболочку cmd. Вы также можете использовать встроенные виртуальные команды для удобного сервиса SOCKS5, HTTP-файлового сервиса и перенаправления трафика.


Скачать последнюю версию

документация


Связанные проекты

  • gonc-gui — настольное приложение (Windows) и приложение для Android, построенное на : удобное кросс-устройственное, кросс-сетевое P2P-прямое соединение и безопасная передача файлов. Просто поделитесь парольной фразой (или отсканируйте QR-код); командная строка не требуется.
gonc

Примеры использования

Базовое использование

  • Используйте как nc:

    root@kitploit:~
    gonc www.baidu.com 80
    gonc -tls www.baidu.com 443
    

    может устанавливать только соединения точка-точка на основе IP и порта.

  • Теперь вы также можете устанавливать соединения точка-точка на основе общей парольной фразы с автоматическим обходом NAT.

    На следующей диаграмме показан процесс установки P2P-соединения gonc между домашней широкополосной сетью (hard NAT) и узлом в мобильной сети (symmetric NAT). Поскольку обе стороны имеют IPv6, на обоих концах используется опция -4 для принудительного использования IPv4, чтобы продемонстрировать обход NAT.

    hole-punching

P2P-туннель и HTTP-файловый сервер

  • Обе стороны согласуют одну и ту же парольную фразу. На стороне отправителя запустите HTTP-файловый сервер, чтобы предоставить доступ к файлам или каталогам для обмена. Опция -httpserver принимает несколько путей, каждый из которых может быть как отдельным файлом, так и каталогом:

    root@kitploit:~
    gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
    
  • На принимающей стороне есть два варианта:

  1. Автоматически скачать весь каталог

    После выполнения следующей команды все файлы будут рекурсивно загружены на локальную машину. Если процесс прервётся, повторный запуск команды автоматически возобновит загрузку с места остановки:

    root@kitploit:~
    gonc -p2p <passphrase> -download c:/SavePath
    
  2. Просмотр и выборочная загрузка через браузер

    Этот вариант не запускает загрузку автоматически. Вместо этого вам нужно вручную открыть браузер и перейти по адресу http://127.0.0.1:9999, чтобы просмотреть список файлов узла и загрузить нужные файлы:

    root@kitploit:~
    gonc -p2p <passphrase> -httplocal-port 9999
    

    Если вам нужно скачать конкретный подкаталог, браузер становится неудобным, но вы можете сделать это так:

    root@kitploit:~
    gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
    

Безопасная шифрованная P2P-связь

  • Установите безопасную шифрованную P2P-связь между двумя разными сетями, согласовав парольную фразу (используйте gonc -psk . для генерации высокоэнтропийной парольной фразы вместо passphrase). Эта парольная фраза используется для взаимного обнаружения и вывода сертификатов, обеспечивая безопасность связи с TLS 1.3.

    root@kitploit:~
    gonc -p2p passphrase
    

    На другой стороне используйте те же параметры (программа автоматически попытается установить TCP- или UDP-связь (предпочтительно TCP), согласовать роли (TLS-клиент/сервер) и завершить протокол TLS):

    root@kitploit:~
    gonc -p2p passphrase
    

    Обратите внимание, что если другая сторона задержится с запуском, она завершится, если не сможет найти другую сторону для обмена информацией в течение примерно половины минуты. Поэтому также поддерживается механизм ожидания на основе подписки на сообщения MQTT, используя -mqtt-wait и -mqtt-hello для синхронизации времени запуска P2P обеими сторонами. Например, следующая команда использует -mqtt-wait для непрерывного ожидания,

    root@kitploit:~
    gonc -p2p passphrase -mqtt-wait
    

    На другой стороне,

    root@kitploit:~
    gonc -p2p passphrase -mqtt-hello
    
  • Проверьте ваш тип NAT

    root@kitploit:~
    gonc -nat-checker
    

    Это проверит ваши IPv6 и IPv4 TCP и UDP NAT-адреса и проанализирует изменения портов после NAT. Если адреса TCP6 или UDP6 не указаны, это означает, что у вас нет IPv6. Каждый адрес протокола заканчивается на "(easy)", что указывает на наивысшую вероятность успеха пробивки; "(hard)" указывает на более высокую вероятность успеха; а "(symm)" — самый сложный. Symm требует, чтобы другая сторона была либо "easy", либо "hard" для работы P2P.

Обратная оболочка (поддержка псевдотерминала для UNIX-подобных систем)

  • Слушатель (не использует -keep-open, принимает только одно соединение; без аутентификации с -psk):
    root@kitploit:~
    gonc -tls -exec ":sh /bin/bash" -l 1234
    
  • Подключитесь для получения оболочки (поддерживает TAB, Ctrl+C и т.д.):
    root@kitploit:~
    gonc -tls -pty x.x.x.x 1234
    
  • Используйте P2P для обратной оболочки (passphrase используется для аутентификации, обеспечивая безопасную связь с TLS 1.3):
    root@kitploit:~
    gonc -exec ":sh /bin/bash" -p2p passphrase
    
    На другой стороне:
    root@kitploit:~
    gonc -pty -p2p passphrase
    

Тест скорости передачи

  • Отправьте данные и измерьте скорость передачи (встроенные /dev/zero и /dev/urandom):
    root@kitploit:~
    gonc.exe -send /dev/zero -P x.x.x.x 1234
    
    Пример вывода:
    root@kitploit:~
    IN: 76.8 MiB (80543744 bytes), 3.3 MiB/s | OUT: 0.0 B (0 bytes), 0.0 B/s | 00:00:23
    
    На принимающей стороне:
    root@kitploit:~
    gonc -P -l 1234 > NUL
    

P2P-туннель и SOCKS5 / HTTP-прокси

  • Дождитесь установки туннеля:

    root@kitploit:~
    gonc -p2p passphrase -linkagent
    
  • На другой стороне запустите локальный SOCKS5 / HTTP-прокси сервис на порту 3080 для доступа к удалённой сети:

    root@kitploit:~
    # The link option controls how the local and remote proxy endpoints are created.
    # Use none to indicate that no listening port is opened on that side:
    gonc -p2p passphrase -link "3080;none"
    

    Далее, например, если вы хотите подключиться к 10.0.0.1:3389 в удалённой сети, вы можете просто ввести следующий адрес в вашем локальном клиенте удалённого рабочего стола:

    root@kitploit:~
    10.0.0.1-3389.gonc.cc:3080
    

    Этот домен будет разрешён в IP-адрес вида 127.b.c.d. В результате клиент удалённого рабочего стола подключится к локальному SOCKS5-прокси на порту 3080, а затем gonc выполнит обратный разбор адреса 127.b.c.d, чтобы извлечь информацию 10.0.0.1-3389 из доменного имени.

  • Формат конфигурации link

    root@kitploit:~
    # Based on the established tunnel, both local and remote sides listen on port 1080.
    # The proxy supports both HTTP and SOCKS5 protocols, with transparent proxy capability enabled.
    gonc -p2p <passphrase> -link "1080;1080"
    
    # Below is the configuration method for the URL format. The parameter value of -link must be enclosed in quotes; otherwise, parsing problems may occur.
    # The left side x://0.0.0.0:1080?tproxy=1 is equivalent to simply writing 1080.
    # The right side enables port 1080 on the remote host, without transparent proxy support.
    gonc -p2p <passphrase> -link "x://0.0.0.0:1080?tproxy=1;x://127.0.0.1:1080"
    
    # The left side f://127.0.0.1:1080?to=1.2.3.4:80
    # means listening locally on port 1080 and forwarding traffic to 1.2.3.4:80 on the remote side.
    # The right side 'none' indicates that no port is opened remotely.
    gonc -p2p <passphrase> -link "f://127.0.0.1:1080?to=1.2.3.4:80;none"
    
    # The right side f://0.0.0.0:80?to=127.0.0.1:80
    # means listening on port 80 on the remote side and forwarding traffic back to 127.0.0.1:80 locally.
    gonc -p2p <passphrase> -link "none;f://0.0.0.0:80?to=127.0.0.1:80"
    
    # The left side x+tls means the proxy protocol with TLS encryption and allows for certificate configuration. The right side specifies the outbound IP address via `outbound_bind` (suitable for multi-IP environments).
    gonc -p2p <口令> -link "x+tls://user:[email protected]:1080?cert=ca.pem&key=key.pem;none?outbound_bind=10.0.0.5"
    

Гибкая конфигурация сервисов

  • Используйте -exec для гибкой настройки приложения, предоставляющего сервисы для каждого соединения. Например, вместо указания /bin/bash для команд оболочки, это также можно использовать для перенаправления портов. Однако следующий пример запускает новый процесс gonc для каждого соединения:
    root@kitploit:~
    gonc -keep-open -exec "gonc -tls www.baidu.com 443" -l 8000
    
  • Чтобы избежать порождения множества дочерних процессов, используйте встроенный модуль nc:
    root@kitploit:~
    gonc -keep-open -exec ":nc -tls www.baidu.com 443" -l 8000
    

Сервис Socks5-прокси

  • Настройте режим клиента:

    root@kitploit:~
    gonc -x s.s.s.s:port x.x.x.x 1234
    
  • Встроенный Socks5-сервер: Используйте -e :s5s для предоставления стандартного сервиса Socks5. Поддерживается -auth для установки имени пользователя и пароля для Socks5. Используйте -keep-open для непрерывного приёма клиентских подключений к Socks5-серверу. Благодаря горутинам Golang достигается хорошая производительность при многоклиентской параллельности:

    root@kitploit:~
    gonc -e ":s5s -auth user:passwd" -keep-open -l 1080
    
  • Безопасный Socks5 поверх TLS: Поскольку стандартный Socks5 не шифрован, используйте -e :s5s с -tls и -psk для настройки безопасной связи Socks5 поверх TLS. Используйте -P для мониторинга информации о передаче соединений и -acl для реализации контроля доступа для входящих соединений и целей прокси. О формате файла acl.txt см. acl-example.txt.

    gonc.exe -tls -psk passphrase -e :s5s -keep-open -acl acl.txt -P -l 1080

    На другой стороне используйте :s5c (встроенная команда s5c) для преобразования Socks5 поверх TLS в стандартный Socks5, обеспечивая локальный клиентский доступ на 127.0.0.1:3080:

    gonc.exe -e ":s5c -tls -psk passphrase x.x.x.x 1080" -keep-open -l -local 127.0.0.1:3080

Установка туннеля для других приложений

  • Помогите WireGuard в обходе NAT для формирования VPN

    На пассивной (слушающей) стороне, PC-S, выполните следующую команду (используя публичный ключ пира WireGuard в качестве парольной фразы и предполагая, что WireGuard слушает на порту 51820):

    gonc -p2p <PublicKey-of-PS-S> -mqtt-wait -u -k -e ":nc -u 127.0.0.1 51820"

    На активной (инициирующей) стороне, PC-C, установите Endpoint пира WireGuard (PS-S) на 127.0.0.1:51821, при этом собственный интерфейс WireGuard слушает на 51820. Затем выполните следующую команду. Флаг -k позволяет gonc автоматически переподключаться при потере сети:

    gonc -p2p <PublicKey-of-PS-S> -mqtt-hello -u -k -e ":nc -u -local 127.0.0.1:51821 127.0.0.1 51820"

Возможности обхода NAT в P2P

Как gonc устанавливает P2P-соединение?

  • Одновременно использует несколько публичных STUN-серверов для обнаружения локальных TCP/UDP NAT-отображений и интеллектуального определения типа NAT
  • Безопасно обменивается информацией об адресах через публичные MQTT-серверы, используя хеш, производный от SessionKey, в качестве общей темы
  • Пытается установить прямое соединение в следующем порядке приоритета: IPv6 TCP > IPv4 TCP > IPv4 UDP, стремясь к истинной одноранговой связи
  • Ретрансляционные серверы не используются, и резервные механизмы не предусмотрены — либо соединение не удаётся, либо это настоящий успех P2P

Как развернуть ретрансляционный сервер для случаев, когда P2P невозможен

  • SOCKS5-сервера с поддержкой UDP ASSOCIATE, работающего на публичном IP, достаточно в качестве ретранслятора. Вы также можете запустить встроенный SOCKS5-прокси gonc на собственном VPS, чтобы он действовал как ретрансляционный сервер.

    Следующая команда запускает SOCKS5-прокси, поддерживающий только перенаправление UDP. Опции -psk и -tls включают шифрование и аутентификацию на основе PSK. Примечание: не просто откройте порт 1080 в вашем брандмауэре — перенаправление UDP использует случайные порты для каждой сессии.

    gonc -e ":s5s -u -c=0" -psk <password> -tls -k -l 1080

  • Когда P2P не удаётся, вам нужно только одной стороне gonc повторить процесс P2P, используя опцию -x для маршрутизации через SOCKS5-ретранслятор:

    gonc -p2p <passphrase> -x "-psk <password> -tls <socks5server-ip>:1080"

    В качестве альтернативы вы можете использовать стандартный SOCKS5-прокси-сервер, поддерживающий перенаправление UDP:

    gonc -p2p <passphrase> -x "<socks5server-ip>:1080" -auth "user:password"

Например, если оба узла находятся за симметричными NAT и P2P не удаётся, использование SOCKS5 UDP-ретранслятора только одной стороной эффективно меняет её поведение NAT на "easy", что значительно облегчает установку соединения. Данные остаются сквозным образом зашифрованными.

Используемые публичные серверы(STUN & MQTT):

root@kitploit:~
"tcp://turn.cloudflare.com:80",
"udp://turn.cloudflare.com:53",
"udp://stun.l.google.com:19302",
"stun.gonc.cc:3478",
"global.turn.twilio.com:3478",
"stun.nextcloud.com:443",

"tcp://broker.hivemq.com:1883",
"tcp://broker.emqx.io:1883",
"tcp://test.mosquitto.org:1883",
"tcp://mqtt.gonc.cc:1883"

Насколько эффективен gonc в обходе NAT?

За исключением сценариев симметричного NAT на обоих концах, gonc достигает очень высокой вероятности успеха

gonc классифицирует типы NAT на три категории:

  1. Easy: Один внутренний порт отображается на один и тот же внешний порт на нескольких STUN-серверах

  2. Hard: Один внутренний порт отображается на согласованный, но отличающийся внешний порт на STUN-серверах — сложнее, чем тип 1

  3. Symmetric: Один внутренний порт отображается на разные внешние порты в зависимости от назначения — самый сложный тип

Для обработки этих типов NAT gonc применяет несколько стратегий обхода:

  • Использует несколько STUN-серверов для обнаружения поведения NAT и выявления сценариев с несколькими выходными IP

  • Предпочитает IPv6-соединения, когда обе стороны поддерживают его (например, прямое соединение TCP6-to-TCP6)

  • Оба узла слушают TCP, одновременно набирая друг друга, чтобы повысить вероятность успеха пробивки TCP

  • Узел с более простым NAT задерживает свой начальный UDP-пакет, чтобы избежать запуска изменений портов на более сложной стороне

  • Узел с более сложным NAT отправляет UDP-пакеты с низким TTL, чтобы уменьшить помехи от удалённого брандмауэра

  • В качестве последнего средства использует стратегию "парадокса дней рождения": более сложная сторона использует 600 случайных исходных портов, а другая сторона пробует 600 случайных портов назначения, увеличивая шанс успешного столкновения UDP-портов

Скачать инструмент