{"adoption": {"forks": 588, "observed_at": "2026-08-28T04:08:14.866989+00:00", "stars": 3695}, "canonical_url": "https://ross.abutalabs.com/products/fastnetmon", "card": {"archived": false, "artifact_type": "application", "description": "Very fast DDoS sensor with sFlow/Netflow/IPFIX/SPAN support", "domain": ["networking", "security", "monitoring", "self-hosted"], "enriched": true, "function": ["monitoring", "alerting", "networking", "analytics"], "health_score": 95, "homepage": null, "language": "C++", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["pavel-odintsov/fastnetmon"], "name": "pavel-odintsov/fastnetmon", "platform": ["bsd", "cpp", "cli"], "pushed_at": "2026-07-20T15:05:58+00:00", "repo": "pavel-odintsov/fastnetmon", "stars": 3695, "tags": ["ddos-detection", "netflow", "sflow", "ipfix", "bgp-mitigation", "traffic-analysis", "prometheus", "kafka", "linux", "macos"], "topics": ["fastnetmon", "ddos", "sflow", "netflow", "netmap", "ipfix", "pcap", "dos", "juniper", "cisco", "mikrotik", "analyzer", "ddos-mitigation", "ddos-sensor", "ddos-monitor", "ddos-reporter", "ddos-detector", "netflow-collector", "ddos-defender", "attack-detector"], "urls": [], "use_cases": ["detect ddos attacks on my network in real time", "collect and analyze netflow and sflow traffic data", "automatically block attacking ips via bgp announcements", "monitor traffic thresholds per subnet with alerts", "export flow data to kafka or prometheus", "set up a ddos sensor for an isp network"], "what_it_is": "FastNetMon Community Edition is a high-performance DDoS detection sensor that analyzes traffic from NetFlow, IPFIX, sFlow, AF_PACKET, and other capture engines. It detects hosts sending or receiving abnormal traffic volumes within seconds and can notify operators, run scripts, or announce blocked IPs via BGP.", "when_to_avoid": ["you need full-featured mitigation, GUI, and support - the Advanced commercial edition may fit better", "you only need simple bandwidth graphing rather than attack detection", "you cannot run a dedicated Linux sensor or collector"], "when_to_choose": ["you need fast (1-2 second) DDoS detection at terabit scale from flow data or port mirrors", "you want automated mitigation hooks like BGP blackholing via ExaBGP or custom scripts", "you run a multi-vendor network (Cisco, Juniper, MikroTik) exporting NetFlow/sFlow/IPFIX"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fastnetmon", "repo": "pavel-odintsov/fastnetmon", "role": "main", "score": 81}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.866989+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:05.687481+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "614bfdf1006aa3e9ea56d688db91eef7ad9a26cf62601dbd9f761f9c0d8a0a51", "fetched_at": "2026-08-28T04:08:14.866989+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pavel-odintsov/fastnetmon"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 54}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4702, "days_push": 44, "days_rel": 94, "gap_med": 531, "n_releases_24m": 2}, "score": 81, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}