Package: cfscanner
CFScanner - PythonThe script is designed to scan Cloudflare's edge IPs and locate ones that are viable for use with v2ray/xray. It aims to identify edge IPs that are accessible and not blocked.CFSCanner runs on different operating systems including and not limited to:LinuxMacOSWindowsAndroid (termux, UserLAnd, etc.)DependenciesPython (>=3.6)LibrariesrequestspysocksrichInstalling (and upgrading)pipinstallcfscanner--upgradeCreating a custom config file (optional)If you want to use the default sudoer config, you can skip this stepcreate a config json file (e.g., myconfig.json) with the following content. replace the values with your own!{"id":"248ecb72-89cf-5be7-923f-b790fca681c5","host":"scherehtzhel01.sudoer.net","port":"443","path":"api01","serverName":"248ecb72-89cf-5be7-923f-b790fca681c5.sudoer.net"}Executing programHow to runIn the following, you can find examples of running the script with and without custom config and subnets file. For more details on the arguments, please seeArgumentsTo run with sudoer default config and only one thread on the default subnets list:cfscanner.pyalternatively, you could use the following command:python3-mcfscannerTo run with sudoer default config and 8 threads:cfscanner-t8To run on a list of subnets:cfscanner-t8-c./myconfig.json-s./mysubnets.selectionEach line of the file can be either a subnet (in CIDR notation) or a single IP (v4 or v6):1.0.0.0/24
108.162.218.0/24
108.162.236.0/22
162.158.8.0/21
162.158.60.0/24
162.158.82.12
2606:4700::/120
2606:4700:3032::6815:3819
...To run with a minimum acceptable download speed of 100 kilobytes per secondcfscanner-t8-c./myconfig.json-s./mysubnets.selection-DS100To run with a minimum acceptable download and upload speed (in KBps)cfscanner-t8-c./myconfig.json-s./mysubnets.selection-DS100-US25To run and try each IP multiple (in this case 3) times. An IP is marked ok if it passes all the tests.cfscanner--threads8--config./myconfig.json--subnets./mysubnets.selection--download-speed100--upload-speed25--tries3To run on a random sample of size 20 of the subnets and minimum acceptable download and upload speed of 10 KBps with the default configcfscanner-t8-DS10-US10-r20ArgumentsTo use this tool, you can specify various options as follows:HelpTo see the help message, use the--helpor-hoption.General Options--threads,-t: Number of threads to use for parallel scanning. Default value is 1.--tries,-n: Number of times to try each IP. An IP is marked as OK if all tries are successful. Default value is 1.--subnets,-s: The path to the custom subnets file. Each line should be either a single ip (v4 or v6) or a
subnet in cidr notation (v4 or v6). If not provided, the program will
read the list of cidrs fromhttps://github.com/MortezaBashsiz/CFScanner/blob/main/config/cf.local.iplist.Random Scan Options--sample,-r: Size of the random sample to take from each subnet. The sample size can either
be a float between 0 and 1 ($0 < s < 1$) or an integer ($ s \ge 1$). If it is a float, it will be
interpreted as a percentage of the subnet size. If it is an integer, it
will be interpreted as the number of ips to take from each subnet. If
not provided, the program will take all ips from each subnet--shuffle-subnets: If passed, the subnets will be shuffled before scanning.Xray Config Options--config,-c: The path to the config file. For config file example, seesudoer default config. If not provided, the program will read thedefault sudoer configfile.--template: Path to the proxy (v2ray/xray) client file template. By default vmess_ws_tls is used.--binpath,-b: Path to the v2ray/xray binary file. If not provided, will use the latest compatible version of xray.--novpn: If passed, xray/v2ray service will not be started and the program will not use vpn.--startprocess-timeout: Maximum time (in seconds) to wait for xray/v2ray process to start. Default value is 5.Fronting Speed Test Options--fronting-timeout,-FT: Maximum time to wait for fronting response. Default value is 1.Download Speed Test Options--download-speed,-DS: Minimum acceptable download speed in kilobytes per second. Default value is 50.--download-latency,-DL: Maximum allowed latency (seconds) for download. Default value is 2.--download-time,-DT: Maximum (effective, excluding http time) time to spend for each download. Default value is 2.Upload Speed Test Options--upload-test,-U: If passed, upload test will be conducted. If not passed, only download and fronting test will be conducted.--upload-speed,-US: Minimum acceptable upload speed in kilobytes per second. Default value is 50.--upload-latency,-UL: Maximum allowed latency (seconds) for upload. Default value is 2.--upload-time,-UT: Maximum (effective, excluding http time) time (in seconds) to spend for each upload. Default value is 2.RemarksIn the current version, an IP is marked "OK", only if it passes all tries of the experimentThe size of the file for download is determined based on the argumentsdownload-speedanddownload-time(similar for upload as well). Therefore, it is recommended to choose these parameters carefully based on your expectations, internet speed and the number of threads being usedResultsThe results will be stored in theresultsdirectory. Each line of the generatedcsvfile includes a Cloudflare edge ip together with the following values:avg_download_speed: Average download speed in mbpsavg_upload_speed: Average upload speed in mbpsavg_download_latency: Average download latency in msavg_upload_latency: Average upload latency in msavg_download_jitter: Average jitter during downloads in msavg_upload_jitter: Average jitter during uploads in msdownload_speed_1,...,n_tries: Values of download speeds in mbps for each downloadupload_speed_1,...,n_ties: Values of download speeds in mbps for each uploaddownload_latency_1,...,n_tries: Values of download latencies in msdownload_latency_1,..._n_tries: Values of upload latencies in msFor each time running the code, a result file is generated in the result folder with the datetime string to avoid overwriting (e.g,20230226_180502_result.csv)AuthorsContributors names and contact infoTempookianMorteza BashsizVersion History0.1Initial Releas1.0.0Automatic download of xray binaryUse xray by defaultArguments reorginazedChanged default behavior when a subnet list is not provided. The list is read from the repo and not asnlookup anymore1.0.1Fixed a bug in detect system (issue#385)1.0.2Fixed a bug in the min UL speed, especially formin_upload_speed = 01.0.3Fixed a bug in custom config template1.1.0Added random sampling1.2.0Added progress barImproved logging1.2.1Fixed the bug for keyboard interrupt in windowsimproved the keyboard interrupt handling in general1.2.2Improved error loggingErrors are logged into a file in case of an unexpected error1.3.0Added subnets shuffling option1.3.1Improved colors in logging1.3.9Several rounds with pypi1.3.10Improved the progress bar1.3.11fixed multiple printing bug1.3.12added setuptools to the dependencies1.3.13added removal of duplicate subnets (issue [#490])reduced the file size used for fronting test1.3.14Fixed a bug in reading ips from url. The regex now supports single ips as well1.3.15Fixed a bug in reading subnets from file with full address in windows1.3.16Added no-fronting option1.3.17Improved the fronting test method (jafar method)1.3.18changed fronting domain1.3.19fixed a bug in xray config saving in windows. ":" is not allowed in windows file names1.4.0Improved memory usageThe program now uses a generator to read ips from file/urlThe program usesreservoir samplingto select ips from the listSampling till time out aftersample-timeoutseconds (input argument, default 1). In this case there is no guarantee
that the probability of selecting the different ips are equalThe main progress bar is now based on the number of subnets (not the total ips)The program does not remove the duplicate subnets anymore due to the new logic and in favor of memory usageAdded info about the number of scanned ips and ok ips to the progress bar1.4.2Changed fronting domain1.4.3Changed fronting domain