{"id":27962202,"url":"https://github.com/mubix/scoreproxy","last_synced_at":"2026-03-08T06:31:21.960Z","repository":{"id":287122528,"uuid":"963648303","full_name":"mubix/scoreproxy","owner":"mubix","description":"CCDC Scorebot SOCKS5 checks proxy","archived":false,"fork":false,"pushed_at":"2026-03-07T01:47:18.000Z","size":52,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-07T09:11:33.540Z","etag":null,"topics":["blackteam","ccdc","ccdc-open-source","ccdc-scripts","socks5"],"latest_commit_sha":null,"homepage":"https://malicious.link/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mubix.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":"2025-04-10T02:14:33.000Z","updated_at":"2026-03-07T01:46:54.000Z","dependencies_parsed_at":"2025-04-10T04:31:14.809Z","dependency_job_id":"9898dbd8-d959-4df2-9db9-e53027e2f839","html_url":"https://github.com/mubix/scoreproxy","commit_stats":null,"previous_names":["mubix/scoreproxy"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mubix/scoreproxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mubix%2Fscoreproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mubix%2Fscoreproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mubix%2Fscoreproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mubix%2Fscoreproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mubix","download_url":"https://codeload.github.com/mubix/scoreproxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mubix%2Fscoreproxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30247319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T05:41:50.788Z","status":"ssl_error","status_checked_at":"2026-03-08T05:41:39.075Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["blackteam","ccdc","ccdc-open-source","ccdc-scripts","socks5"],"created_at":"2025-05-07T19:14:50.686Z","updated_at":"2026-03-08T06:31:21.942Z","avatar_url":"https://github.com/mubix.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CCDC Scorebot SOCKS5 checks proxy\n\nScoring checks are a difficult thing to manage at CCDC as a Black Team.\nYou need to make sure that teams aren't just allowing the scoring engine IP address\nand blocking everything else. This project is an attempt to randomize the IP address\nthat the scoring checks come from.\n\nThis setup uses the `AnyIP` setup for Linux to bind to any IP address with the `IP_FREEBIND`\noptions to use a un-assigned, un-aliased IP address as a source IP while still being able\nto perform TCP or UDP connections.\n\n## Host Setup\n\nRouting and switching needs to be setup. This doesn't magically make that happen,\nbut if you assign a very large range (for example 10.1.0.0 - 10.100.255.255) to a\nswitch / route, this SOCKS5 setup can randomize every connection that comes out of it.\n\n1. First you need to to break down the range into CIDR ranges. This can be done with `netmask`\n\n```\n# netmask 10.1.0.0:10.100.255.255\n       10.1.0.0/16\n       10.2.0.0/15\n       10.4.0.0/14\n       10.8.0.0/13\n      10.16.0.0/12\n      10.32.0.0/11\n      10.64.0.0/11\n      10.96.0.0/14\n     10.100.0.0/16\n```\n\n2. Next you set [AnyIP](https://blog.widodh.nl/2016/04/anyip-bind-a-whole-subnet-to-your-linux-machine/) ranges into your routing table:\n\n```\nip -4 route add local 10.1.0.0/16 dev lo\nip -4 route add local 10.1.0.0/16 dev lo\nip -4 route add local 10.2.0.0/15 dev lo\nip -4 route add local 10.4.0.0/14 dev lo\nip -4 route add local 10.8.0.0/13 dev lo\nip -4 route add local 10.16.0.0/12 dev lo\nip -4 route add local 10.32.0.0/11 dev lo\nip -4 route add local 10.64.0.0/11 dev lo\nip -4 route add local 10.96.0.0/14 dev lo\nip -4 route add local 10.100.0.0/16 dev lo\n```\n\nIn order to delete the ranges if you mess them up or just want to stand the proxy down you can see them all with this command:\n- `ip route show table all`\n\nThen just `ip route del` + the full line you want to remove\n\n## Building the Proxy\n\n1. `git clone https://github.com/mubix/scoreproxy`\n2. `cd scoreproxy`\n3. `go build`\n\nI haven't tested different versions of Golang, but https://github.com/armon/go-socks5 hasn't been updated in 9 years,\nso it should support most versions that you would want to use.\n\n## Run the Proxy\n\nHelp text:\n```\nUsage of ./scoreproxy:\n  -end string\n        End IP of the range (e.g., 10.100.255.255)\n  -file string\n        File containing a list of IP addresses (one per line)\n  -port int\n        Port on which the SOCKS5 proxy will listen (default 1080)\n  -start string\n        Start IP of the range (e.g., 10.1.0.0)\n\n```\n\nRunning: \n```\n./scoreproxy -start 10.1.0.1 -end 10.100.255.254\n2025/04/09 23:26:16 Using IP range from 10.1.0.1 (167837697) to 10.100.255.254 (174391294)\n2025/04/09 23:26:16 Starting SOCKS5 server on 0.0.0.0:1080\n```\n\nor via an IP list:\n```\n./scoreproxy -file iplist\n```\n\n## Let the Proxying Begin\n\n`proxychains4 curl http://10.200.10.10` comes from 10.1.5.33\nand then right after comes from 10.4.2.5.\n\n\n# The Problem\n\nThe big problem with this example is that you might hit IP addresses that the routes above deem as unusable but the SOCKS5 proxy might use them, so it's best to try to stay with valid IP ranges. So for the example above, instead of using a bunch of ranges, just using 10.0.0.0/9 which includes 10.0.0.0-10.127.255.255 will and using the 10.0.0.1 start and 10.127.255.254 end in the scoreproxy arguments is the best option.\n\n## Further Research\n\nIt looks like `tun2socks` could be a great option to enhance this setup by not having to rely on proxychains to proxy checks or connections:\n- https://github.com/ambrop72/badvpn/tree/master/tun2socks\n- https://github.com/xjasonlyu/tun2socks\n\n## Source references:\n- AnyIP - https://blog.widodh.nl/2016/04/anyip-bind-a-whole-subnet-to-your-linux-machine/\n- IP_FREEBIND - https://oswalt.dev/2022/02/non-local-address-binds-in-linux/\n- Go SOCKS5 - https://github.com/armon/go-socks5\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmubix%2Fscoreproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmubix%2Fscoreproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmubix%2Fscoreproxy/lists"}