{"id":49345193,"url":"https://github.com/packetthrower/portfinder","last_synced_at":"2026-05-18T04:17:07.095Z","repository":{"id":354063287,"uuid":"1221938866","full_name":"packetThrower/PortFinder","owner":"packetThrower","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-27T00:06:57.000Z","size":641,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T01:23:47.286Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/packetThrower.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-26T21:45:37.000Z","updated_at":"2026-04-27T00:06:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"93bfcd98-bbf4-4b07-b4b8-d683c850f3d9","html_url":"https://github.com/packetThrower/PortFinder","commit_stats":null,"previous_names":["packetthrower/portfinder"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/packetThrower/PortFinder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FPortFinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FPortFinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FPortFinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FPortFinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/packetThrower","download_url":"https://codeload.github.com/packetThrower/PortFinder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FPortFinder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32326122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-27T07:00:46.745Z","updated_at":"2026-05-18T04:17:07.081Z","avatar_url":"https://github.com/packetThrower.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"resources/icons/icon.png\" alt=\"PortFinder\" width=\"160\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ePortFinder\u003c/h1\u003e\n\n[![CI](https://img.shields.io/github/actions/workflow/status/packetThrower/PortFinder/ci.yml?branch=main\u0026style=flat-square\u0026logo=github\u0026label=CI)](https://github.com/packetThrower/PortFinder/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/packetThrower/PortFinder?style=flat-square\u0026logo=github\u0026label=release\u0026include_prereleases)](https://github.com/packetThrower/PortFinder/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/packetThrower/PortFinder/total?style=flat-square\u0026logo=github\u0026label=downloads)](https://github.com/packetThrower/PortFinder/releases)\n[![Rust](https://img.shields.io/badge/Rust-stable-CE422B?style=flat-square\u0026logo=rust\u0026logoColor=white)](Cargo.toml)\n[![gpui](https://img.shields.io/badge/gpui-from%20Zed-1F1F28?style=flat-square)](https://www.gpui.rs/)\n\n## Minimum OS Versions\n\n**macOS** (Apple Silicon and Intel)\n[![macOS 11+](https://img.shields.io/badge/macOS-11%2B-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](#requirements)\n[![Apple Silicon](https://img.shields.io/badge/Apple%20Silicon-arm64-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](#requirements)\n[![Intel](https://img.shields.io/badge/Intel-x86__64-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](#requirements)\n\n**Windows** (x64 and ARM64)\n[![Windows 10 21H2+ x64](https://img.shields.io/badge/Windows%2010%2021H2%2B-x64-0078D4?style=flat-square\u0026logo=windows\u0026logoColor=white)](#requirements)\n[![Windows 11 ARM64](https://img.shields.io/badge/Windows%2011-ARM64-0078D4?style=flat-square\u0026logo=windows11\u0026logoColor=white)](#requirements)\n\n**Linux** (amd64 and arm64)\n[![Ubuntu 24.04+](https://img.shields.io/badge/Ubuntu-24.04%2B-E95420?style=flat-square\u0026logo=ubuntu\u0026logoColor=white)](#requirements)\n[![Debian 13+](https://img.shields.io/badge/Debian-13%2B-A81D33?style=flat-square\u0026logo=debian\u0026logoColor=white)](#requirements)\n[![Fedora 40+](https://img.shields.io/badge/Fedora-40%2B-294172?style=flat-square\u0026logo=fedora\u0026logoColor=white)](#requirements)\n[![Arch](https://img.shields.io/badge/Arch-1793D1?style=flat-square\u0026logo=archlinux\u0026logoColor=white)](#requirements)\n\nNetwork switch port discovery tool. Captures CDP (Cisco Discovery Protocol), LLDP (Link Layer Discovery Protocol), and MNDP (MikroTik Neighbor Discovery Protocol) packets to identify what switch, port, and VLAN your device is connected to.\n\n📖 **Docs:** \u003chttps://packetthrower.github.io/PortFinder/\u003e · 📝 [**Changelog**](CHANGELOG.md)\n\n\u003e **4.x is the pure-Rust rewrite.** Zed's [gpui](https://www.gpui.rs/)\n\u003e replaces the Tauri 2 + Svelte 5 stack from the 3.x line, which is\n\u003e preserved on the [`tauri-version`](https://github.com/packetThrower/PortFinder/tree/tauri-version)\n\u003e branch. The capture engine (CDP / LLDP / MNDP parsers, BPF helper,\n\u003e pcap orchestration) ports across unchanged.\n\n## What it does\n\n1. Select a network interface (or sniff all)\n2. Choose protocol: CDP (Cisco), LLDP (Aruba, HP, etc.), or MNDP (MikroTik)\n3. Click Start and PortFinder captures the next discovery packet\n4. Displays: Switch Name, Switch IP, Switchport, Native VLAN, Voice VLAN, MTU, Switch Model\n\n## CLI\n\nThe headless CLI shares the capture engine with the GUI. Run with no args to launch the GUI; pass a subcommand to use the CLI.\n\n```bash\nportfinder capture --interface en0 --protocol LLDP        # capture and print\nportfinder capture --json                                  # machine-readable\nportfinder list --with-ip                                  # interfaces with IPs\nportfinder privileges                                      # diagnose access\nportfinder --help                                          # see all options\n```\n\nPress Ctrl+C to interrupt a running capture; a second press force-exits. The Homebrew cask, Scoop manifest, and Linux `.deb` / `.rpm` / `pacman` packages all expose `portfinder` on `PATH` so the commands above work from any shell on every platform.\n\n## Install\n\n### macOS — Homebrew\n\n```bash\nbrew install --cask packetThrower/tap/portfinder\n```\n\nThis pulls the `.dmg` from the latest release, drops `PortFinder.app` into `/Applications`, and symlinks the headless CLI to `$(brew --prefix)/bin/portfinder`. See the [tap README](https://github.com/packetThrower/homebrew-tap) for upgrade and uninstall details. Click **Install BPF Helper** in the app once for non-sudo capture.\n\nFor early access to alpha / beta / rc builds, install the parallel `@alpha` cask alongside stable:\n\n```bash\nbrew install --cask packetThrower/tap/portfinder@alpha\n```\n\n### Windows — Scoop\n\n```powershell\nscoop bucket add packetThrower https://github.com/packetThrower/scoop-bucket\nscoop install portfinder\n```\n\nInstalls PortFinder and exposes `portfinder` on your `PATH` so `portfinder capture …` works from PowerShell. Update with `scoop update portfinder`; uninstall with `scoop uninstall portfinder`. You'll still need [Npcap](https://npcap.com/#download) installed for packet capture.\n\n### All platforms — release artifacts\n\n`.dmg` + `PortFinder-BPF-*.pkg` (macOS arm64 + amd64), `.deb` / `.rpm` / `.AppImage` / `.pkg.tar.zst` (Linux amd64 + arm64), and `-setup.exe` + `.msi` (Windows x64 + ARM64) on every [release](https://github.com/packetThrower/PortFinder/releases/latest).\n\n## Requirements\n\n- **libpcap** (Linux: `libpcap0.8`, macOS: included, Windows: [Npcap](https://npcap.com/))\n- **Elevated privileges** for packet capture:\n  - macOS: click **Install BPF Helper** in the app (one-time, prompts for admin password). The installer drops the helper binary under `/Library/Application Support/PortFinder/PortFinder BPF Helper` and registers a LaunchDaemon `io.github.packetThrower.PortFinder.BPFHelper`. In macOS System Settings → General → Login Items \u0026 Extensions the entry shows as **PortFinder BPF Helper**.\n  - Linux: install the `.deb` / `.rpm` / `.pkg.tar.zst` (postinstall sets `CAP_NET_RAW`), or run as root.\n  - Windows: install Npcap with **Allow non-administrators to capture** enabled, or run PortFinder as Administrator.\n\n## Development\n\n### Prerequisites\n\n- [Rust](https://rustup.rs/) 1.80+ (stable). No Node / pnpm in the build path.\n- Platform-specific:\n  - Linux: `libpcap-dev libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libx11-dev libxcb1-dev libxcb-randr0-dev libxcb-xkb-dev libxcb-cursor-dev libxcb-shape0-dev libxcb-xfixes0-dev libxcb-render0-dev libfontconfig1-dev libfreetype-dev pkg-config`\n  - macOS: Xcode command-line tools + `pkg-config` (via Homebrew)\n  - Windows: [Npcap SDK](https://npcap.com/) on the `LIB` path\n\n### Run\n\n```bash\ncargo run                             # debug build + launch GUI\ncargo run -- capture --protocol lldp  # CLI mode (any subcommand → headless)\ncargo build --release                 # production binary at target/release/PortFinder\n```\n\nThe first `cargo build` compiles gpui's full dep graph (~830 crates) and takes a few minutes. Incremental builds are fast.\n\n### Bundle locally\n\n[cargo-packager](https://github.com/crabnebula-dev/cargo-packager) wraps the release binary into platform installers.\n\n```bash\ncargo install cargo-packager\ncargo packager --release -f app -f dmg   # macOS\ncargo packager --release -f deb          # Linux\ncargo packager --release -f nsis         # Windows (NSIS .exe)\n```\n\n## Versioning\n\n[SemVer](https://semver.org/) `MAJOR.MINOR.PATCH`. Version lives in `version.txt` and is propagated to `Cargo.toml`'s `[package].version` by `scripts/bump.mjs`. Major-version history:\n\n- `4.x` — gpui rewrite (current `main`)\n- `3.x` — Tauri 2 + Svelte 5 (`tauri-version` branch)\n- `2.x` — Wails 2 + Go (`wails-version` branch)\n- `1.x` — original Python (`python-legacy` branch)\n\n```bash\nnode scripts/bump.mjs patch    # 4.0.0 -\u003e 4.0.1\nnode scripts/bump.mjs minor    # 4.0.5 -\u003e 4.1.0\nnode scripts/bump.mjs major    # 4.1.4 -\u003e 5.0.0\nnode scripts/tag.mjs           # git tag + push (triggers GitHub release)\n```\n\n## Tech Stack\n\n- **Capture:** Rust + [pcap](https://crates.io/crates/pcap) (libpcap / Npcap bindings) + [Tokio](https://tokio.rs/) for async + cancellation\n- **UI:** [gpui](https://www.gpui.rs/) (Zed's GPU-accelerated UI framework) + [gpui-component](https://github.com/longbridge/gpui-component)\n- **Bundler:** [cargo-packager](https://github.com/crabnebula-dev/cargo-packager) (`.dmg` / `.deb` / `.rpm` / `.AppImage` / `.pkg.tar.zst` / NSIS / WiX)\n\n## License\n\n[GNU General Public License v3.0 or later](LICENSE). Forks are\nwelcome; derivative works must stay open under the same license.\nCommercial use is permitted but can't close the source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacketthrower%2Fportfinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpacketthrower%2Fportfinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpacketthrower%2Fportfinder/lists"}