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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/pbxqdown/portclue
Оборонительные ИнструментыБезопасность контейнеровАудит конфигурацииСбор информацииСетевая безопасностьУтилиты и фреймворки
GitHubpbxqdown/portclue

portclue

Объясните, почему TCP-порт Linux может быть доступен или недоступен

Репозиторий
32 дней назадЕщё не проверено

Популярное

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

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

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

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

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

PortClue

CI Release License Go

PortClue объясняет, почему TCP-порт на машине с Linux может быть или не быть доступен. Он превращает состояние сокетов, процессов, межсетевого экрана и Docker в короткую цепочку доказательств вместо того, чтобы заставлять вас вручную сопоставлять ss, /proc, nftables, iptables и docker inspect.

Демонстрация PortClue: обзор локальных TCP-слушателей, затем цепочка доказательств для порта 8080

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

root@kitploit:~
$ sudo portclue
LOCAL TCP LISTENERS

PORT    SERVICE                   CONFIDENCE BIND            OWNER       SOURCE BIND SCOPE
22      OpenSSH server            HIGH       0.0.0.0,::      ssh.service host   ALL_INTERFACES
8080    NGINX web server          HIGH       0.0.0.0,::      nginx       host   ALL_INTERFACES
8443    api service               MEDIUM     192.0.2.10      demo-api    docker SPECIFIC_INTERFACE
9000    Python HTTP server        MEDIUM     127.0.0.1       python3     host   LOOPBACK_ONLY

BIND SCOPE describes socket binding, not firewall reachability.
Run `portclue PORT` for the complete evidence chain and local exposure verdict.

ALL_INTERFACES, SPECIFIC_INTERFACE и LOOPBACK_ONLY описывают, где сокет принимает трафик. Они намеренно не утверждают, что межсетевой экран его пропускает. Изучите порт для полного анализа локального межсетевого экрана:

root@kitploit:~
$ sudo portclue 8080
POTENTIAL EXTERNAL EXPOSURE

TCP port 8080

  0.0.0.0:8080/tcp  [POTENTIAL]
    Service            NGINX web server
    Category           web
    Confidence         HIGH
    Identity evidence  executable basename matched "nginx"
    -> LISTEN             NETLINK_INET_DIAG reports socket inode 123456 bound to 0.0.0.0:8080/tcp
    -> OWNED              PID 4242 (nginx), systemd unit nginx.service
    -> ALL_INTERFACES     0.0.0.0 accepts traffic addressed to any local interface
    -> ACCEPT             nftables: a direct rule matches TCP destination port 8080 and returns accept

Unknown outside this machine:
  - router port forwarding
  - cloud firewall or security group
  - upstream NAT, including carrier-grade NAT

[!IMPORTANT] PortClue v0.1 — это ранний, консервативный прототип для Linux. POTENTIAL означает, что наблюдаемый локальный путь допускает трафик; он не утверждает, что порт доступен из публичного интернета. Неподдерживаемые выражения межсетевого экрана дают UNKNOWN.

Что он читает

  • TCP-слушатели через NETLINK_INET_DIAG, а не путём разбора вывода ss
  • владельца процесса, исполняемый файл, командную строку, cgroup и сетевой namespace через /proc
  • описания systemd-юнитов из установленных файлов юнитов и активные триггеры сокетов через systemctl show
  • nftables через nft --json list ruleset
  • iptables через iptables-save, когда nftables недоступен
  • опубликованные порты Docker через локальный HTTP API Docker Engine, включая образ и метки

Идентификация сервиса

PortClue определяет, чему принадлежит порт, прежде чем объяснять его доступность. Доказательства ранжируются в следующем порядке:

  1. наблюдаемый исполняемый файл, systemd-юнит и активный триггер сокета;
  2. образ Docker, имя контейнера и метки;
  3. встроенный курируемый каталог сервисов;
  4. локальное соглашение о портах из /etc/services.

Фактический владелец всегда имеет приоритет над условным именем порта. Если известно только соглашение о портах, идентификация явно помечается уровнем достоверности LOW. Встроенный каталог хранится в internal/identify/catalog.json и поставляется внутри единого бинарного файла; PortClue не загружает данные идентификации во время выполнения.

PortClue работает только на чтение. Он не подключается к запрашиваемому порту, не сканирует другой хост, не изменяет правила межсетевого экрана, не останавливает процессы или контейнеры, не загружает данные и не запускает демон.

Установка

Скрипт установки (рекомендуется)

Работает на Linux (amd64 и arm64). Скрипт загружает соответствующий архив GitHub Release, проверяет SHA256SUMS и устанавливает единый бинарный файл. Он не изменяет конфигурацию оболочки.

Пользовательская установка (по умолчанию, без root). Устанавливается в ~/.local/bin, принадлежит вам:

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh
portclue

Пользовательская установка запускается без root и сообщает о доказательствах, доступных вашей учётной записи, отмечая то, чего не хватает. Этого достаточно для изучения слушателей и сопоставлений Docker. Поскольку sudo не ищет в ~/.local/bin, а этот бинарный файл доступен для записи вашему пользователю, не запускайте эту копию с sudo.

Системная установка (принадлежит root, для sudo portclue). PortClue читает наиболее полные доказательства (ограниченный /proc, полное состояние межсетевого экрана) от имени root. Для этого установите принадлежащий root бинарный файл в /usr/local/bin (скрипт использует sudo только для финального шага установки, а не для загрузки или распаковки):

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system
sudo portclue

Необязательные переопределения: PORTCLUE_VERSION=0.1.2 (без ведущей v) и PORTCLUE_INSTALL_DIR для любого режима.

Удаление:

root@kitploit:~
# user install
rm ~/.local/bin/portclue
# system install
sudo rm /usr/local/bin/portclue
# or, matching how you installed:
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --uninstall
curl -fsSL https://raw.githubusercontent.com/pbxqdown/portclue/v0.1.2/scripts/install.sh | sh -s -- --system --uninstall

Архив релиза

Загрузите соответствующий portclue-VERSION-linux-ARCH.tar.gz и SHA256SUMS из GitHub Releases, проверьте контрольную сумму, затем установите:

root@kitploit:~
sha256sum -c SHA256SUMS --ignore-missing
tar -xzf portclue-0.1.2-linux-amd64.tar.gz   # or linux-arm64
sudo install -m 0755 portclue-0.1.2-linux-amd64/portclue /usr/local/bin/portclue
portclue --version

Сопоставление архитектур:

uname -mАрхив
x86_64linux-amd64
aarch64, arm64linux-arm64

Каждый архив включает бинарный файл, README, лицензию Apache-2.0 и уведомления третьих сторон.

Установка через Go

Требуется Linux и Go 1.25+:

root@kitploit:~
go install github.com/pbxqdown/portclue/cmd/[email protected]

Это помещает бинарный файл в $(go env GOPATH)/bin. Предпочитайте проверенный по контрольной сумме архив релиза или скрипт установки, когда вам нужны воспроизводимые артефакты установки.

Сборка и запуск из исходного кода

Требования: Linux и Go 1.25 или новее.

root@kitploit:~
go build -o portclue ./cmd/portclue
./portclue
./portclue --json
./portclue 8080
./portclue --json 8080

Режим обзора принимает необязательные фильтры (игнорируемые поля остаются без ограничений):

root@kitploit:~
./portclue --bind-scope ALL_INTERFACES,SPECIFIC_INTERFACE
./portclue --source docker
./portclue --min-confidence MEDIUM
./portclue --json --bind-scope ALL_INTERFACES --min-confidence HIGH

--bind-scope принимает список значений ALL_INTERFACES, SPECIFIC_INTERFACE и LOOPBACK_ONLY, разделённых запятыми. --source принимает host и/или docker. --min-confidence сохраняет записи на уровне HIGH, MEDIUM, LOW или UNKNOWN и выше. Эти флаги применяются только когда PORT опущен.

Запуск без root всё ещё даёт полезные доказательства о слушателях, сопоставлениях Docker и адресах привязки. Идентификация процессов и доказательства межсетевого экрана могут быть неполными, когда /proc или состояние межсетевого экрана ограничены; PortClue сообщает об этом в разделе Incomplete evidence. Используйте sudo для наиболее полного результата:

root@kitploit:~
sudo ./portclue
sudo ./portclue --bind-scope ALL_INTERFACES,SPECIFIC_INTERFACE
sudo ./portclue 8080

Версионированный JSON

Формы JSON предназначены для скриптов и агентов. JSON обзора использует schema_version: 2, mode: "overview" и entries с service_identity и bind_scope. Подробный отчёт использует schema_version: 1, query, verdict, paths с service_identity, unknowns и warnings.

В пределах версии схемы существующие имена полей и их значения считаются стабильными. Могут добавляться новые необязательные поля. Удаление, переименование или несовместимое изменение значения требует новой schema_version. Оба контракта имеют регрессионные тесты.

Вердикты

ВердиктЗначение
POTENTIALНаблюдается не-loopback локальный путь, и поддерживаемые доказательства межсетевого экрана его допускают. Внешняя маршрутизация неизвестна.
NOT_EXPOSED_LOCALLYСлушатель/сопоставление отсутствует, привязка только к loopback, или поддерживаемые доказательства локального межсетевого экрана блокируют путь.
UNKNOWNТребуемый факт недоступен или потенциально значимое выражение межсетевого экрана не поддерживается.
CONFIRMEDЗарезервировано для будущей явной внешней проверки. Текущий CLI, работающий только локально, никогда его не выдаёт.

Поддерживается в v0.1

  • Linux, TCP, сетевой namespace хоста
  • анализ слушателей IPv4 и локальной фильтрации
  • корректная классификация слушателей/привязок IPv6; полное моделирование межсетевого экрана IPv6 не обещается
  • простые базовые цепочки nftables/iptables, прямые правила по порту назначения TCP и базовые политики
  • атрибуция опубликованных портов Docker bridge
  • атрибуция TCP-сервисов, активируемых сокетами systemd
  • вывод в терминал и JSON
  • фильтры обзора: --bind-scope, --source, --min-confidence

Не включено: UDP, Podman, Kubernetes, облачные группы безопасности, обнаружение маршрутизаторов, удалённое сканирование, eBPF, непрерывный мониторинг или устранение проблем.

Консервативное поведение межсетевого экрана

PortClue намеренно не пытается реализовать всю виртуальную машину Netfilter. Первая версия понимает небольшой набор прямых правил. Несколько базовых цепочек, переходы, наборы, карты, fib, динамические выражения или другая нераспознанная логика вызывают UNKNOWN, когда они могут повлиять на запрос. Это безопаснее, чем молча трактовать неразобранное правило как accept или drop.

Разработка

См. CONTRIBUTING.md для информации об области охвата, тестировании и о том, как сообщать о результатах UNKNOWN межсетевого экрана.

root@kitploit:~
make check
make release VERSION=0.1.2

make release требует чистого рабочего дерева Git и создаёт версионированные архивы amd64/arm64 плюс dist/SHA256SUMS. Отправка тега v* в настроенный удалённый репозиторий GitHub запускает те же проверки и создаёт релиз GitHub. Makefile не создаёт тег.

Долгосрочный дизайн сохраняет анализатор, причинную модель и средства визуализации платформенно-нейтральными. Linux — первый бэкенд доказательств; Windows — вероятный второй бэкенд, если Linux-прототип получит реальное применение.

Лицензия

PortClue лицензирован под Apache License 2.0. См. LICENSE. Бинарные архивы также включают THIRD_PARTY_NOTICES.

См. CHANGELOG.md для истории релизов и заметок о совместимости JSON, SECURITY.md для поддерживаемых версий и приватного сообщения об уязвимостях, и CONTRIBUTING.md для участия в разработке.

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