{"id":18311784,"url":"https://github.com/firezone/natstat","last_synced_at":"2025-04-12T18:30:34.180Z","repository":{"id":188063970,"uuid":"677850594","full_name":"firezone/natstat","owner":"firezone","description":"A simple tool to measure how NATs behave","archived":false,"fork":false,"pushed_at":"2024-06-17T20:22:18.000Z","size":17,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-11T16:05:52.786Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/firezone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-08-12T21:10:25.000Z","updated_at":"2024-10-12T09:20:46.000Z","dependencies_parsed_at":"2023-08-13T15:43:47.359Z","dependency_job_id":null,"html_url":"https://github.com/firezone/natstat","commit_stats":null,"previous_names":["firezone/natstat"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firezone%2Fnatstat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firezone%2Fnatstat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firezone%2Fnatstat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firezone%2Fnatstat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firezone","download_url":"https://codeload.github.com/firezone/natstat/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248613105,"owners_count":21133440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-11-05T16:20:19.855Z","updated_at":"2025-04-12T18:30:34.141Z","avatar_url":"https://github.com/firezone.png","language":"Rust","funding_links":[],"categories":["others"],"sub_categories":[],"readme":"# natstat\n\nA simple tool to measure behavior of your friendly neighborhood NAT device\n\n## What is this\n\n`natstat` records how NAT behaves in a network. This is done by sending packets\nfrom a `client` with source port between `1-65535` through a NAT device, then\nrecording the observed reflexive source port as seen by a public `server`.\n\nThis is done multiple times per source port in order to surface any patterns\nthat may emerge.\n\n## Running server\n\nMake sure to run the server without any NAT so that source ports are directly\nobserved.\n\n```\ndocker compose build server\ndocker compose up server\n```\n\n## Running client\n\nRun the client to send NAT probes to the server. The client should be behind one\nor more NATs to observe the reflexive port allocated.\n\nEnsure you run the client with the same magic integer as you provided the\nserver.\n\n```\ndocker compose build server\ndocker compose up client\n```\n\n## Client example command\n\n`natstat client -s 10.0.0.72 -d 100.0.0.92:10080 -m 1234`\n\n## Server example command\n\n`natstat server -l 100.0.0.92:10080 -m 1234`\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirezone%2Fnatstat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirezone%2Fnatstat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirezone%2Fnatstat/lists"}