{"id":34996653,"url":"https://github.com/chill117/proxy-verifier","last_synced_at":"2025-12-27T02:17:05.833Z","repository":{"id":52095803,"uuid":"45315078","full_name":"chill117/proxy-verifier","owner":"chill117","description":"NodeJS module to check proxies: if functional, anonymity level, tunneling, supported protocols.","archived":false,"fork":false,"pushed_at":"2021-09-02T16:56:51.000Z","size":2715,"stargazers_count":77,"open_issues_count":12,"forks_count":16,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-09T05:27:47.527Z","etag":null,"topics":["checking-proxies","nodejs","proxies"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chill117.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":"https://degreesofzero.com/donate.html?project=proxy-verifier"}},"created_at":"2015-10-31T19:24:17.000Z","updated_at":"2025-07-26T05:49:58.000Z","dependencies_parsed_at":"2022-08-24T01:10:43.412Z","dependency_job_id":null,"html_url":"https://github.com/chill117/proxy-verifier","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/chill117/proxy-verifier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-verifier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-verifier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-verifier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-verifier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chill117","download_url":"https://codeload.github.com/chill117/proxy-verifier/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chill117%2Fproxy-verifier/sbom","scorecard":{"id":277641,"data":{"date":"2025-08-11","repo":{"name":"github.com/chill117/proxy-verifier","commit":"196fe36d38b68e18b221a5c5509870a041e0616b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/chill117/proxy-verifier/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/chill117/proxy-verifier/ci.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"41 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-rjf2-j2r6-q8gr","Warn: Project is vulnerable to: GHSA-6pw2-5hjv-9pf7","Warn: Project is vulnerable to: GHSA-4w2j-2rg4-5mjw","Warn: Project is vulnerable to: GHSA-mrgp-mrhc-5jrq","Warn: Project is vulnerable to: GHSA-7jxr-cg7f-gpgv","Warn: Project is vulnerable to: GHSA-xj72-wvfv-8985","Warn: Project is vulnerable to: GHSA-ch3r-j5x3-6q2m","Warn: Project is vulnerable to: GHSA-p5gc-c584-jj6v","Warn: Project is vulnerable to: GHSA-whpj-8f3w-67p5","Warn: Project is vulnerable to: GHSA-cchq-frgv-rjh5","Warn: Project is vulnerable to: GHSA-g644-9gfx-q4q4","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T14:56:21.886Z","repository_id":52095803,"created_at":"2025-08-17T14:56:21.886Z","updated_at":"2025-08-17T14:56:21.886Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28069282,"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","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"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":["checking-proxies","nodejs","proxies"],"created_at":"2025-12-27T02:16:43.471Z","updated_at":"2025-12-27T02:17:05.815Z","avatar_url":"https://github.com/chill117.png","language":"JavaScript","funding_links":["https://degreesofzero.com/donate.html?project=proxy-verifier"],"categories":[],"sub_categories":[],"readme":"# proxy-verifier\n\n![Build Status](https://github.com/chill117/proxy-verifier/actions/workflows/ci.yml/badge.svg)\n\nCheck that proxies are working, verify their anonymity level (transparent, anonymous, or elite), lookup their geographic location by IP address, check for other capabilities such as tunneling and available protocols (HTTP/S, SOCKS4/5).\n\n* [Installation](#installation)\n* [API](#api)\n\t* [testAll](#testall)\n\t* [testProtocol](#testprotocol)\n\t* [testProtocols](#testprotocols)\n\t* [testAnonymityLevel](#testanonymitylevel)\n\t* [test](#test)\n* [Contributing](#contributing)\n\t* [Configure Local Environment](#configure-local-environment)\n\t* [Tests](#tests)\n* [Changelog](#changelog)\n* [License](#license)\n* [Funding](#funding)\n\n\n## Installation\n\nAdd to your application via `npm`:\n```bash\nnpm install proxy-verifier --save\n```\nThis will install `proxy-verifier` and add it to your application's `package.json` file.\n\n\n## API\n\n* [testAll](#testall)\n* [testProtocol](#testprotocol)\n* [testProtocols](#testprotocols)\n* [testAnonymityLevel](#testanonymitylevel)\n* [testTunnel](#testtunnel)\n* [test](#test)\n\n\n### testAll\n\n`testAll(proxy[, options], cb)`\n\nRuns all test methods for the given proxy. The `options` argument is passed through to every test method.\n\nUsage:\n```js\nvar ProxyVerifier = require('proxy-verifier');\n\nvar proxy = {\n\tipAddress: '127.0.0.1',\n\tport: 8888,\n\tprotocol: 'http'\n};\n\nProxyVerifier.testAll(proxy, function(error, result) {\n\n\tif (error) {\n\t\t// Some unusual error occurred.\n\t} else {\n\t\t// The result object will contain success/error information.\n\t}\n});\n```\n\nSample `result`:\n```js\n{\n\tanonymityLevel: 'elite',\n\tprotocols: {\n\t\thttp: {\n\t\t\tok: true\n\t\t}\n\t},\n\ttunnel: {\n\t\tok: true\n\t}\n}\n```\n\n\n### testProtocol\n\n`testProtocol(proxy[, options], cb)`\n\nCheck that the proxy works with the specified protocol. The `options` argument is passed through to the `request()` method which uses [request](https://github.com/request/request).\n\nUsage:\n```js\nvar ProxyVerifier = require('proxy-verifier');\n\nvar proxy = {\n\tipAddress: '127.0.0.1',\n\tport: 8080,\n\tprotocol: 'http'\n};\n\nProxyVerifier.testProtocol(proxy, function(error, result) {\n\n\tif (error) {\n\t\t// Some unusual error occurred.\n\t} else {\n\t\t// The result object will contain success/error information.\n\t}\n});\n```\n\nSample `result` when the proxy is working:\n```js\n{\n\tok: true\n}\n```\n\nSample `result` when the proxy is not working:\n```js\n{\n\tok: false,\n\terror: {\n\t\tmessage: 'socket hang up',\n\t\tcode: 'ECONNRESET'\n\t}\n}\n```\n\n\n### testProtocols\n\n`testProtocols(proxy[, options], cb)`\n\nCheck that the proxy works with the specified protocols. The `options` argument is passed through to the `request()` method which uses [request](https://github.com/request/request).\n\nUsage:\n```js\nvar ProxyVerifier = require('proxy-verifier');\n\nvar proxy = {\n\tipAddress: '127.0.0.1',\n\tport: 8080,\n\tprotocols: ['http', 'https']\n};\n\nProxyVerifier.testProtocols(proxy, function(error, results) {\n\n\tif (error) {\n\t\t// Some unusual error occurred.\n\t} else {\n\t\t// The results object contains a result object for each protocol.\n\t}\n});\n```\n\nSample `results` when the proxy is working for all its protocols:\n```js\n{\n\thttp: {\n\t\tok: true\n\t},\n\thttps: {\n\t\tok: true\n\t}\n}\n```\n\nSample `results` when the proxy is not working for any of the protocols:\n```js\n{\n\thttp: {\n\t\tok: false,\n\t\terror: {\n\t\t\tmessage: 'socket hang up',\n\t\t\tcode: 'ECONNRESET'\n\t\t}\n\t},\n\thttps: {\n\t\tok: false,\n\t\terror: {\n\t\t\tmessage: 'socket hang up',\n\t\t\tcode: 'ECONNRESET'\n\t\t}\n\t}\n}\n```\n\n\n### testAnonymityLevel\n\n`testAnonymityLevel(proxy[, options], cb)`\n\nCheck the anonymity level of the proxy. The `options` argument is passed through to the `request()` method which uses [request](https://github.com/request/request).\n\nUsage:\n```js\nvar ProxyVerifier = require('proxy-verifier');\n\nvar proxy = {\n\tipAddress: '127.0.0.1',\n\tport: 8080,\n\tprotocol: 'http'\n};\n\nProxyVerifier.testAnonymityLevel(proxy, function(error, anonymityLevel) {\n\n\tif (error) {\n\t\t// Some unusual error occurred.\n\t} else {\n\t\t// anonymityLevel will be a string equal to \"transparent\", \"anonymous\", or \"elite\".\n\t}\n});\n```\n\nAnonymity levels explained:\n* __transparent__ - The proxy does not hide the requester's IP address.\n* __anonymous__ - The proxy hides the requester's IP address, but adds headers to the forwarded request that make it clear that the request was made using a proxy.\n* __elite__ - The proxy hides the requester's IP address and does not add any proxy-related headers to the request.\n\n\n### testTunnel\n\n`testTunnel(proxy[, options], cb)`\n\nCheck to see if the proxy supports [HTTP tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel). The `options` argument is passed through to the `request()` method which uses [request](https://github.com/request/request).\n\nUsage:\n```js\nvar ProxyVerifier = require('proxy-verifier');\n\nvar proxy = {\n\tipAddress: '127.0.0.1',\n\tport: 8888,\n\tprotocol: 'http'\n};\n\nProxyVerifier.testTunnel(proxy, function(error, result) {\n\n\tif (error) {\n\t\t// Some unusual error occurred.\n\t} else {\n\t\t// The result object will contain success/error information.\n\t}\n});\n```\n\nSample `result` when the proxy supports tunneling:\n```js\n{\n\tok: true\n}\n```\n\nSample `result` when the proxy does not support tunneling:\n```js\n{\n\tok: false,\n\terror: {\n\t\tmessage: 'socket hang up',\n\t\tcode: 'ECONNRESET'\n\t}\n}\n```\n\n\n### test\n\nUse this method to create your custom tests. Example usage:\n```js\nProxyVerifier.test(proxy, {\n    testUrl: 'https://www.google.com/?q=test',\n    testFn: function(data, status, headers) {\n\n        // Check the response data, status, and headers.\n\n        // Throw an error if the test failed.\n        throw new Error('Test failed!');\n\n        // Do nothing if the test passed.\n    }\n}, function(error, results) {\n    // Do something with error or results.\n});\n```\n\n\n## Contributing\n\nThere are a number of ways you can contribute:\n\n* **Improve or correct the documentation** - All the documentation is in this `readme.md` file. If you see a mistake, or think something should be clarified or expanded upon, please [submit a pull request](https://github.com/chill117/proxy-verifier/pulls/new)\n* **Report a bug** - Please review [existing issues](https://github.com/chill117/proxy-verifier/issues) before submitting a new one; to avoid duplicates. If you can't find an issue that relates to the bug you've found, please [create a new one](https://github.com/chill117/proxy-verifier/issues).\n* **Request a feature** - Again, please review the [existing issues](https://github.com/chill117/proxy-verifier/issues) before posting a feature request. If you can't find an existing one that covers your feature idea, please [create a new one](https://github.com/chill117/proxy-verifier/issues).\n* **Fix a bug** - Have a look at the [existing issues](https://github.com/chill117/proxy-verifier/issues) for the project. If there's a bug in there that you'd like to tackle, please feel free to do so. I would ask that when fixing a bug, that you first create a failing test that proves the bug. Then to fix the bug, make the test pass. This should hopefully ensure that the bug never creeps into the project again. After you've done all that, you can [submit a pull request](https://github.com/chill117/proxy-verifier/pulls/new) with your changes.\n\nBefore you contribute code, please read through at least some of the source code for the project. I would appreciate it if any pull requests for source code changes follow the coding style of the rest of the project.\n\nNow if you're still interested, you'll need to get your local environment configured.\n\n### Configure Local Environment\n\n#### Step 1: Get the Code\n\nFirst, you'll need to pull down the code from GitHub:\n```\ngit clone https://github.com/chill117/proxy-verifier.git\n```\n\n#### Step 2: Install Dependencies\n\nSecond, you'll need to install the project dependencies as well as the dev dependencies. To do this, simply run the following from the directory you created in step 1:\n```bash\nnpm install\n```\n\n\n### Tests\n\nThis project includes an automated regression test suite. To run the tests:\n```bash\nnpm test\n```\n\n\n## Changelog\n\nSee [changelog.md](https://github.com/chill117/proxy-verifier/blob/master/changelog.md)\n\n\n## License\n\nThis software is [MIT licensed](https://tldrlegal.com/license/mit-license):\n\u003e A short, permissive software license. Basically, you can do whatever you want as long as you include the original copyright and license notice in any copy of the software/source.  There are many variations of this license in use.\n\n\n## Funding\n\nThis project is free and open-source. If you would like to show your appreciation by helping to fund the project's continued development and maintenance, you can find available options [here](https://degreesofzero.com/donate.html?project=proxy-verifier).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchill117%2Fproxy-verifier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchill117%2Fproxy-verifier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchill117%2Fproxy-verifier/lists"}