A Go networking exercise covering port scanning, HTTP proxying, request repeating, banner-based vulnerability checks, and ICMP host discovery — all in a single static binary.
Scope note: this is a learning / portfolio project, not a production pentest tool. For real engagements use
nmap,Burp Suite,mitmproxy, andnuclei— they handle the long tail of edge cases this code doesn't. The point ofjynx-piis to show clean Go networking primitives (goroutines +sync.WaitGroup, SOCKS5 dialers, ICMP, TLS handshake, YAML templates) in one readable file.
Authorization: use only against systems you own or have explicit written permission to test. See LICENSE.
go build -o jynx-pi main.goMode is selected with -mode=<name>. Each mode has its own flag set.
# TCP
./jynx-pi -mode=scanner -host=192.168.1.100 -start=1 -end=1024
# UDP (best-effort — see caveats below)
./jynx-pi -mode=scanner -host=192.168.1.100 -start=1 -end=1024 -protocol=udpCaveat: the UDP mode sends a generic probe and waits for a response. Most real UDP services (DNS, SNMP, NTP, etc.) only respond to protocol-specific queries, so UDP results are best treated as hints. Use nmap -sU with NSE probes for accurate UDP scanning.
./jynx-pi -mode=proxy -listen=":8080"Logs CONNECT and regular HTTP requests as they pass through. Does not perform TLS MITM — for that you need a CA cert and rewriting machinery; use Burp / mitmproxy.
./jynx-pi -mode=repeater \
-url="http://example.com/api" \
-method=POST \
-data='{"key":"value"}' \
-count=5 \
-delay=3s# Plain TCP banner
./jynx-pi -mode=check -checkhost=scanme.nmap.org -checkport=22 -templates=vuln_templates.yaml
# TLS handshake (cert subject/issuer as the "banner")
./jynx-pi -mode=check -checkhost=scanme.nmap.org -checkport=443 -templates=vuln_templates.yaml -secure=trueTemplates are YAML with name, description, and a list of matches (substring patterns). See vuln_templates.yaml for an example.
sudo ./jynx-pi -mode=discover -cidr="192.168.1.0/24"Requires root (raw ICMP sockets). For a /16 or larger, this currently spawns one goroutine per host without a worker pool — works fine for /24 lab subnets, will exhaust file descriptors on bigger ranges.
./jynx-pi -mode=repeater -url="http://example.com/api" -socks="127.0.0.1:9050" -count=3 -delay=3sRoutes outbound traffic through a SOCKS5 endpoint (e.g. a local Tor instance).
- No worker pool on scanner / discover — large port or CIDR ranges will hit FD limits.
- UDP scanner is generic — false negatives on protocol-specific services.
- HTTP proxy is forward-only — no TLS MITM, no request history, no replay.
- Vuln check uses
strings.Contains— no version-range or regex matching; false positives are possible ("Apache/2.4.29"matches"Apache/2.4.290"). - Banner grab reads one
\n-terminated line — fine for SSH-style services, not for HTTP without sending a request first. - Uses deprecated
ioutiland an archivedgo-ping/pingdependency. Modernization is a future cleanup.
The companion document for what a hardened version would look like: pick one mode and build it out properly (the vuln-check mode is the most interesting candidate — Nuclei-lite).
MIT. Educational / authorized-testing use only.