{"id":23802355,"url":"https://github.com/technosf/connect-o-matic","last_synced_at":"2026-06-23T13:02:22.044Z","repository":{"id":75890637,"uuid":"279988633","full_name":"technosf/Connect-O-Matic","owner":"technosf","description":"Java CLI to test TCP connectability from local interfaces to a set of hosts over a range of ports. For firewall rule testing.","archived":false,"fork":false,"pushed_at":"2025-10-13T18:04:45.000Z","size":111,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-11T13:31:48.679Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/technosf.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,"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":"2020-07-15T21:56:47.000Z","updated_at":"2025-05-01T17:40:09.000Z","dependencies_parsed_at":"2023-07-11T23:45:41.165Z","dependency_job_id":"7618f4a9-a461-430b-b9eb-9d2f18aac0e7","html_url":"https://github.com/technosf/Connect-O-Matic","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/technosf/Connect-O-Matic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technosf%2FConnect-O-Matic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technosf%2FConnect-O-Matic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technosf%2FConnect-O-Matic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technosf%2FConnect-O-Matic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/technosf","download_url":"https://codeload.github.com/technosf/Connect-O-Matic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technosf%2FConnect-O-Matic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34690771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"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":"2025-01-01T22:21:03.608Z","updated_at":"2026-06-23T13:02:22.022Z","avatar_url":"https://github.com/technosf.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Connect-O-Matic\nJava CLI to test TCP reachability from local interfaces to a set of hosts over a range of ports in an automatic and time efficient manner. For firewall rule testing etc.\n\n\n## Overview\nRun on a given host, this Java executable  _.jar_  identifies the local host name, and each of its the available network interfaces. Provided with a list of hosts to connect to, and a set or range of ports, it will attempt to connect with **TCP** from each local interface to each combination of external host and port in parallel a number of times.\nIt collates, agregates and reports on connection:\n\n* success  \n* timeout  \n* refused  \n* unreachable \n\nand timings for each.\nIn this way each potential route from a local interface to a set of external hosts, say through a firewall, can be confirmed or diagnosed in as short a time as possible.\n\nOutput is formated for a spreadsheet as CSV by default, but can be JSON and also POSTed to an object DB such as ElasticSearch.\n\n\n## Package and Help\n_Connect-O-Matic_  is coded to be packaged as an executable  _.jar_  and run from the CLI. It's written for Java 8 and with  _Maven_  packaging (because I find  _Maven_  to be easier than _gradle_). Download the source and, to build and get help:\n\n```console\ntechnosf@github:connectomatic~$ mvn package\ntechnosf@github:connectomatic~$ java -jar target/connectomatic-1.2.0.jar -?\t\n\nConnect-O-Matic\t\tVersion: 1.2.0\n\nCopyright 2023  technosf  [http://github.com/technosf]\n\nHelp:\n\t-i\tIPv - 4 and/or 6, defaults to 4 and 6 if absent\n\t-p\tPort numbers, at least one required, can be a hyphenated range\n\t-h\tHosts as hostnames, IPv4 or IPv6 addresses, at least one required\n\t-a\tAttempts to connect, defaults to 5, but can be 1-255\n\t-l\tLocal addresses in the host set should be tested and not ignored\n\t-j\tProduce JSON output instead of CSV\n\t-u\tURI, POST JSON results to the provided URI\n\t-q\tQuiet mode, outputs result only, without preamble or summary\n\t-d\tDry-run, run through resolving the targets without attempting any connects\n\t-?\tProduces this message\n\nExamples:\n\tjava -jar connectomatic-*.*.*.jar -p 22 80 -h github.com www.github.com\n\tjava -jar connectomatic-*.*.*.jar -p 80-90 -h github.com www.github.com localhost -l\n\tjava -jar connectomatic-*.*.*.jar -i 4,6 -p 22,80-90 -h github.com,www.github.com\n\tjava -jar connectomatic-*.*.*.jar -j -i 4,6 -p 22,80-90 -h github.com,www.github.com\n\tjava -jar connectomatic-*.*.*.jar -a 1 -u http://myobjectdb/index -i 6 -p 22,80-90 -h github.com,www.github.com\n\nOutput by default is .csv with header - JSON via a switch.\nFields are:\n\t• IPv\n\t• Local Interface\n\t• Remote Address\n\t• Remote Hostname\n\t• Remote Port\n\t• Connections\n\t• Connection μs Avg\n\t• Connection μs Min\n\t• Connection μs Max\n\t• Timeouts\n\t• Timeout μs Avg\n\t• Refused connection count\n\t• Unreachable network count\n```\n\t\n\n## Local Interfaces\nTo identify local interfaces, invoke with no arguments:\t\n\n```console\ntechnosf@github:connectomatic~$ java -jar target/connectomatic-1.2.0.jar\n\nConnect-O-Matic\t\tVersion: 1.2.0\n\nLocal Interfaces: 2020-08-07T14:26:38.114617\n\nInterfaces:\n\t\tlo                              \t\n\t\twlp1s1                          \tDE:AD:BE:ED:01:23A\n\nLoopback Addresses:\n\tIPv4\n\t\tlocalhost                       \t127.0.0.1\n\tIPv6\n\t\tip6-localhost                   \t0:0:0:0:0:0:0:1%lo\n\nLinkLocal Addresses IPv6:\n\t\tfe80:0:0:::1a921%wlp1s1\t\t\tfe80:0:0:::1a921%wlp1s1\n\nIPv4 Addresses:\n\t\t192.168.0.99                    \t192.168.0.99\n```\n\n\n## Connection Test\nTo test an example connection:\n\n```console\ntechnosf@github:connectomatic~$ java -jar connectomatic-1.2.0.jar -h github.com -p 22 80 -i 4\n\nConnect-O-Matic\t\tVersion: 1.2.0\n\n\tSummary \tConnects: 10 \tTimeouts: 0 \tRefused: 0 \tUnreachable: 0\n\n\n\"IPv\",\"Interface\",\"Remote Address\",\"Remote Hostname\",\"Remote Port\",\"Connections\",\"Connection μs Avg\",\"Connection μs Min\",\"Connection μs Max\",\"Timeouts\",\"Timeout μs Avg\",\"Refused\",\"Unreachable\"\n4,192.168.13.48,140.82.114.4,github.com,22,5,320.65453338623047,65.01171112060547,1101.0047607421875,0,0.0,0,0\n4,192.168.13.48,140.82.114.4,github.com,80,5,86.8220932006836,63.963134765625,173.01504516601562,0,0.0,0,0\n\n```\nOutput is in **CSV** format, replete with column header: It can be copied and  _paste/special_  directly into [LibreOffice Calc](https://www.libreoffice.org/) as  _csv_  or saved as a  _.csv_  and opened with a spreadsheet.\n\n\n## Design Descisions\nCoded as Java 8 rather than 14+ to maximise build/use options. Hence no Java Record types which would be the main benefit in the code.\n\n\n## History\n### 1.2.0\nAdded switches to:\n\n* test connections to/from local interfaces if they are included in the hosts parameter. Otherwise they are now ignored, allowing the same host set to be used accross hosts without redundant results in the output.\n* set the number of connection attemps - defaults to 5.\n* output results as JSON instead of CSV.\n* POST results to an URI as a JSON payload, i.e. to get the results into an object DB.\n* quiet version and summary output.\n* dry-run, resolving endpoints but not testing/connecting to them.\n\n### 1.1.1\nSupport for port ranges in the input parameters. If a consecutive range of ports is to be tested, rather than having to list every port individually, they can be specified with a range: startport-endport.\n\n### 1.1.0\n* Added summary of connection tries to the result header.\n* Added min and max connection times to .CSV\n* Corrected an error in the connection time math.\n\n### 1.0.1\n_Finessed Initial Release_\\\nBasic discovery of local interfaces and connection testing from a given local interface to remote host and port, providing connection results and average connection timings in .csv format.\n### 1.0.0\n_Initial Release_\\\nBasic discovery of local interfaces and connection testing from a given local interface to remote host and port, providing connection results and average connection timings.\n\n\n## License\n\nConnect-O-Matic - IP network connection tester\n\nCopyright 2023  technosf  [http://github.com/technosf]\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\nhttps://www.gnu.org/licenses/gpl-3.0.en.html\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n![glp3 logo](https://www.gnu.org/graphics/gplv3-127x51.png)\n\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnosf%2Fconnect-o-matic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechnosf%2Fconnect-o-matic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnosf%2Fconnect-o-matic/lists"}