initial commit
This commit is contained in:
23
config.ini
Normal file
23
config.ini
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[global]
|
||||||
|
tor_host = 127.0.0.1:9050
|
||||||
|
i2p_host = 127.0.0.1:4444
|
||||||
|
common_proxy_ports = 80, 1080, 3124, 3128, 4145, 4444, 8080, 8081, 8118, 8888, 9999
|
||||||
|
proxylist_reload_every = 180
|
||||||
|
database = proxylist.sqlite
|
||||||
|
proxy_max_fail = 5
|
||||||
|
|
||||||
|
[watcherd]
|
||||||
|
enabled = true
|
||||||
|
proxy_file = false
|
||||||
|
checktime = 1800
|
||||||
|
threads = 10
|
||||||
|
timeout = 15
|
||||||
|
read_timeout = 20
|
||||||
|
max_fail = 5
|
||||||
|
|
||||||
|
[proxyfind]
|
||||||
|
enabled = true
|
||||||
|
search = true
|
||||||
|
maxfail = 10
|
||||||
|
timeout = 30
|
||||||
|
threads = 3
|
||||||
562
import.txt
Normal file
562
import.txt
Normal file
@@ -0,0 +1,562 @@
|
|||||||
|
http://spys.one/en/socks-proxy-list/
|
||||||
|
https://www.my-proxy.com/free-socks-5-proxy.html
|
||||||
|
http://www.proxyserverlist24.top/feeds/posts/default
|
||||||
|
http://spys.me/proxy.txt
|
||||||
|
https://raw.githubusercontent.com/opsxcq/proxy-list/master/list.txt
|
||||||
|
https://raw.githubusercontent.com/a2u/free-proxy-list/master/free-proxy-list.txt
|
||||||
|
https://raw.githubusercontent.com/flyinwind/proxylist/master/proxies.txt
|
||||||
|
https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list.txt
|
||||||
|
http://multiproxy.org/txt_all/proxy.txt
|
||||||
|
https://github.com/clarketm/proxy-list/blob/master/proxy-list.txt
|
||||||
|
http://www.megaproxylist.net/
|
||||||
|
https://raw.githubusercontent.com/JamesJGoodwin/wreckuests/master/files/proxy.txt
|
||||||
|
https://www.binary-zone.com/files/MyProxyList.txt
|
||||||
|
http://captchasniper.com/new/FreeProxies.txt
|
||||||
|
http://oupfps7we.bkt.clouddn.com/proxy_list.txt
|
||||||
|
http://white55.narod.ru/downloads/proxyold.txt
|
||||||
|
http://www.white55.narod.ru/downloads/proxylist.txt
|
||||||
|
http://xls.su/br/1.txt
|
||||||
|
https://proxyscrape.com/proxies/HTTP_Working_Proxies.txt
|
||||||
|
https://rootjazz.com/proxies/proxies.txt
|
||||||
|
http://www.zarb.org/~saispo/proxylist.txt
|
||||||
|
http://promicom.by/tools/proxy/proxy.txt
|
||||||
|
http://pouuet.free.fr/proxy.txt
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=1
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=2
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=3
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=4
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=5
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=6
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=7
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=8
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=9
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=10
|
||||||
|
http://proxy-ip-list.com/download/free-usa-proxy-ip.txt
|
||||||
|
http://proxy-ip-list.com/download/free-uk-proxy-list.txt
|
||||||
|
http://www.freeproxy.ru/download/lists/goodproxy.txt
|
||||||
|
http://www.proxylists.net/socks4.txt
|
||||||
|
http://multiproxy.org/txt_all/proxy.txt
|
||||||
|
https://raw.githubusercontent.com/Zenaker/IpLogger-Flood/master/proxy.txt
|
||||||
|
https://raw.githubusercontent.com/SEODEMON/EXTREME-PROXY-HARVESTER-AND-CHECKER/master/leeched/leeched_proxies.txt
|
||||||
|
https://proxy.mimvp.com/free.php?proxy=in_hp
|
||||||
|
http://www.coobobo.com/free-http-proxy
|
||||||
|
http://ip.zdaye.com/
|
||||||
|
http://www.mayidaili.com/free/anonymous/%E9%AB%98%E5%8C%BF
|
||||||
|
http://http.taiyangruanjian.com/
|
||||||
|
http://http.zhimaruanjian.com/
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=3&anonlvl=4&availability=90
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=3&anonlvl=4&availability=90&offset=50
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=3&anonlvl=4&availability=90&offset=100
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=3&anonlvl=4&availability=90&offset=150
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=3&anonlvl=4&availability=90&offset=200
|
||||||
|
http://samair.ru/proxy/list-IP-port/proxy-1.htm
|
||||||
|
http://samair.ru/proxy/list-IP-port/proxy-2.htm
|
||||||
|
http://samair.ru/proxy/list-IP-port/proxy-3.htm
|
||||||
|
http://samair.ru/proxy/list-IP-port/proxy-4.htm
|
||||||
|
http://samair.ru/proxy/list-IP-port/proxy-5.htm
|
||||||
|
http://proxylist.hidemyass.com/search-1304300#listable
|
||||||
|
https://free-proxy-list.net/
|
||||||
|
https://proxy-list.org/english/search.php?search=anonymous-and-elite.ssl-no&country=any&type=anonymous-and-elite&port=any&ssl=no
|
||||||
|
https://proxy-list.org/english/search.php?search=anonymous-and-elite.ssl-no&country=any&type=anonymous-and-elite&port=any&ssl=no&p=2
|
||||||
|
https://hidemy.name/en/proxy-list/?type=h&anon=4#list
|
||||||
|
https://hidemy.name/en/proxy-list/?type=h&anon=4&start=64#list
|
||||||
|
https://hidemy.name/en/proxy-list/?type=h&anon=4&start=128#list
|
||||||
|
https://hidemy.name/en/proxy-list/?type=h&anon=4&start=192#list
|
||||||
|
https://checkerproxy.net/archive/2017-04-01
|
||||||
|
http://aliveproxy.com/fastest-proxies/
|
||||||
|
http://multiproxy.org/anon_proxy.htm
|
||||||
|
http://www.ultraproxies.com/high-anonymous.html
|
||||||
|
http://www.ip-adress.com/proxy_list/
|
||||||
|
http://samair.ru/anonymity-test/
|
||||||
|
http://txt.proxyspy.net/proxy.txt
|
||||||
|
http://nntime.com/
|
||||||
|
http://www.gatherproxy.com/
|
||||||
|
http://proxysearcher.sourceforge.net/Proxy%20List.php?type=http&filtered=true
|
||||||
|
http://proxyserverlist-24.blogspot.com/2016/11/01-11-16-fast-proxy-server-list.html
|
||||||
|
https://cracking.org/threads/190x-anonymous-proxy-list.125920/
|
||||||
|
http://samair.ru/proxy/list-IP-port/ip-address-12.htm
|
||||||
|
http://www.businessadviceforum.com/threads/fastest-securest-proxies-on-the-web-new-proxy-lists-everyday.75326/page-10
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10&offset=50
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10&offset=100
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10&offset=100
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10&offset=150
|
||||||
|
http://proxydb.net/?protocol=http&anonlvl=2&anonlvl=4&availability=90&response_time=10&offset=200
|
||||||
|
http://www.nntime.com/proxy/
|
||||||
|
http://www.textproxylists.com/proxy.php?codeen
|
||||||
|
http://www.textproxylists.com/proxy.php?anonymous
|
||||||
|
http://www.textproxylists.com/proxy.php?highanonymity
|
||||||
|
http://www.textproxylists.com/proxy.php?transparent
|
||||||
|
http://www.textproxylists.com/proxy.php?nontransparent
|
||||||
|
http://www.textproxylists.com/proxy.php?allproxy
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s1.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s3.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-1.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-3.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-4.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-5.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-6.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-7.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-8.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-9.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-10.html
|
||||||
|
http://www.proxy-list.net/anonymous-proxy-lists.shtml
|
||||||
|
http://www.proxy-list.net/transparent-proxy-lists.shtml
|
||||||
|
http://www.digitalcybersoft.com/ProxyList/fresh-proxy-list.shtml?
|
||||||
|
http://proxies.my-proxy.com/
|
||||||
|
http://proxies.my-proxy.com/proxy-list-2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-3.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-4.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-5.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-6.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-7.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-8.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-9.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-10.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s1.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s3.html
|
||||||
|
http://www.cooleasy.com/
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=2
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=3
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=4
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=5
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=6
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=7
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=8
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=9
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=10
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=11
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=12
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=13
|
||||||
|
http://www.cooleasy.com/?act=list&port=&type=&country=&page=14
|
||||||
|
http://www.x-proxy.info/highanon.php
|
||||||
|
http://www.fresh-proxy-list.net/fresh%20proxy%20list.htm
|
||||||
|
http://atomintersoft.com/free_proxy_list
|
||||||
|
http://publicproxylist.org/
|
||||||
|
http://httpproxylist.org/
|
||||||
|
http://www.proxz.com/proxy_list_anonymous_us_0.html
|
||||||
|
http://spys.me/proxy.txt
|
||||||
|
https://raw.githubusercontent.com/a2u/free-proxy-list/master/free-proxy-list.txt
|
||||||
|
https://free-proxy-list.net/anonymous-proxy.html
|
||||||
|
https://www.aliveproxy.com/proxy-list/proxies.aspx/Russian_Federation-ru
|
||||||
|
http://www.aliveproxy.com/de-proxy-list/
|
||||||
|
http://proxy-ip-list.com/free-usa-proxy-ip.html
|
||||||
|
http://proxy-ip-list.com/8081/transparent-Spain-8081.html
|
||||||
|
https://www.my-proxy.com/blog/tag/proxy-setting
|
||||||
|
http://aliveproxy.com/proxy-list/proxies.aspx/South_Korea-KR
|
||||||
|
https://www.my-proxy.com/free-proxy-list-3.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-2.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-4.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-10.html
|
||||||
|
https://free-proxy-list.net/?ref=binfind.com/web
|
||||||
|
http://www.aliveproxy.com/proxy-list/proxies.aspx/Syria-sy
|
||||||
|
https://www.my-proxy.com/free-proxy-list-9.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-8.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-5.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list-6.html
|
||||||
|
https://github.com/a2u/free-proxy-list/blob/master/free-proxy-list.txt
|
||||||
|
https://github.com/fate0/proxylist/blob/master/proxy.list
|
||||||
|
http://proxy-ip-list.com/8080/fresh-servers-list-8080-Indonesia.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html
|
||||||
|
https://www.my-proxy.com/free-elite-proxy.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=10
|
||||||
|
http://proxy-ip-list.com/high-anonymous/high-anonymous-80-servers-list.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=1
|
||||||
|
https://www.my-proxy.com/free-transparent-proxy.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=3
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=5
|
||||||
|
https://www.my-proxy.com/free-proxy-list-1.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=s2
|
||||||
|
https://www.my-proxy.com/free-anonymous-proxy.html
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=9
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=2
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=s3
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=7
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=4
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=6
|
||||||
|
https://www.my-proxy.com/free-proxy-list.html?list=8
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s1.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-s3.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-1.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-2.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-3.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-4.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-5.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-6.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-7.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-8.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-9.html
|
||||||
|
http://proxies.my-proxy.com/proxy-list-10.html
|
||||||
|
http://proxies.my-proxy.com/
|
||||||
|
http://www.proxz.com/proxy_list_anonymous_us_0.html
|
||||||
|
https://www.my-proxy.com/free-socks-5-proxy.html
|
||||||
|
http://www.httptunnel.ge/ProxyListForFree.aspx
|
||||||
|
https://www.my-proxy.com/free-socks-4-proxy.html
|
||||||
|
http://proxysearcher.sourceforge.net/Proxy%20List.php?type=socks&filtered=true
|
||||||
|
http://proxysearcher.sourceforge.net/Proxy%20List.php
|
||||||
|
http://www.proxz.com/
|
||||||
|
http://www.proxz.com/proxy_list_port_std_2.html
|
||||||
|
http://www.proxz.com/proxy_list_uk_0_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_11_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_0.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_28.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_43.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_61.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_54.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_38.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_17.html
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Germany
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php?type=socks&filtered=true
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php%3Ftype%3Dsocks%26filtered%3Dtrue
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php%3Ftype%3Dsocks%26filtered%3Dtrue%26limit%3D1000
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_84_ext.html
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Austria
|
||||||
|
https://www.proxydocker.com/de/socks-list/
|
||||||
|
https://free-proxy-list.com/
|
||||||
|
http://proxysearcher.sourceforge.net/Proxy%20List.php?type=socks
|
||||||
|
http://www.proxz.com/proxy_list_transparent_17.html
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php?type=http
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php?type=socks
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php?type=http&filtered=true
|
||||||
|
http://proxysearcher.sourceforge.net/ProxyList.php%3Ftype%3Dsocks
|
||||||
|
http://www.proxz.com/proxy_list_port_std_11_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_18_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_5_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_36.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_20_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_15_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_72_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_31.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_8.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_56_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_30_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_58.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_87.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_86.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_151.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_8_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_42_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_4.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_4.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_51_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_2.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_117.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_62.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_9_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_43.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_5_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_11.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_41_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_0.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_3_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_52_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_72.html
|
||||||
|
http://www.proxz.com/proxy_list_fr_1.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_47_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_27_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_jp_0.html
|
||||||
|
http://www.proxz.com/proxy_list_ca_1.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_127_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_166_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_5_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_24_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_4_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_97.html
|
||||||
|
http://www.proxz.com/proxy_list_anonymous_us_2.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_9.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_91.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_0.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_24.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_53_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_38_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_31_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_12_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_9_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_15_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_59_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_46_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_12_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_17_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_40_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_137_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_132_ext.html
|
||||||
|
https://www.proxydocker.com/?_locale=es
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Mumbai
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Dhaka
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Lebanon
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Indonesia
|
||||||
|
http://www.proxydocker.com/de/proxylist/port/8118
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_14_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_23.html
|
||||||
|
https://www.proxz.com/proxy_list_fr_0.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_36.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_15_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_66_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_68.html
|
||||||
|
https://www.proxydocker.com/
|
||||||
|
https://www.proxydocker.com/fr/
|
||||||
|
https://www.proxydocker.com/es/
|
||||||
|
https://www.proxydocker.com/en/
|
||||||
|
https://www.proxydocker.com/ms/
|
||||||
|
https://www.proxydocker.com/pt/
|
||||||
|
https://www.proxydocker.com/de/
|
||||||
|
https://www.proxydocker.com/tr/
|
||||||
|
https://www.proxydocker.com/it/
|
||||||
|
http://www.proxz.com/proxy_list_transparent_1_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_38_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_33.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_1_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_40_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_10_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_14_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_64_ext.html
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Hungary
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Netherlands
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Jalalpur
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Istanbul
|
||||||
|
http://www.proxydocker.com/
|
||||||
|
https://www.proxydocker.com/?_locale=de
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Singapore
|
||||||
|
https://www.proxydocker.com/en/proxylist/state/Virginia
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Kiev
|
||||||
|
https://www.proxydocker.com/en/proxylist/state/Florida
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Moldova
|
||||||
|
https://www.proxydocker.com/en/proxylist/port/53281
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Indonesia
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Peru
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Thailand
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_77_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_56.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_85_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_24_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_7.html
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/United%20States
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Russia
|
||||||
|
https://www.proxydocker.com/en/proxylist/
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Italy
|
||||||
|
https://www.proxydocker.com/de/proxylist/port/8080,3128
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/United%20Kingdom
|
||||||
|
https://www.proxydocker.com/en/socks4-list/
|
||||||
|
https://www.proxydocker.com/?_locale=hi
|
||||||
|
https://www.proxydocker.com/?_locale=ms
|
||||||
|
https://www.proxydocker.com/?id=7PeaMYqp7Fk
|
||||||
|
https://www.proxydocker.com/?_locale=fr
|
||||||
|
https://www.proxydocker.com/?_locale=it
|
||||||
|
https://www.proxydocker.com/?_locale=en
|
||||||
|
https://www.proxydocker.com/?_locale=ru
|
||||||
|
https://www.proxydocker.com/en/socks-list/
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_88_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_46_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_55.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_29_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_10.html
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Belgium
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Cambodia
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Philippines
|
||||||
|
https://www.proxydocker.com/de/freeproxylist/South%20Africa
|
||||||
|
https://www.proxydocker.com/de/proxylist/city/Paris
|
||||||
|
https://www.proxydocker.com/en/proxylist/type/HTTP
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Poland
|
||||||
|
http://www.proxydocker.com/de
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/France
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Vietnam
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Singapore
|
||||||
|
http://www.proxz.com/proxy_list_transparent_4_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_104_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_45_ext.html
|
||||||
|
https://www.proxydocker.com/de/proxylist/city/Singapore
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Australia
|
||||||
|
https://www.proxydocker.com/de/socks5-list/
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/France
|
||||||
|
https://www.proxydocker.com/en/proxylist/state/Texas
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Moscow
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Iran
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_1_ext.html
|
||||||
|
http://www.httptunnel.ge/ProxyListForFree.aspx/Media/httptunnelbanner.swf
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/Media/Media/httptunnelbanner.swf
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/media/Media/ProxyChecker.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/Media/Media/ProxyListForFree.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/Media/Media/Default.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/Media/Media/dpg.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/media/Media/Media/Default.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/media/Media/Media/dpg.aspx
|
||||||
|
https://www.proxydocker.com/en/socks5-list/
|
||||||
|
https://www.proxydocker.com/?_locale=pt
|
||||||
|
http://www.httptunnel.ge/ProxyListForFree.aspx/ProxyChecker.aspx
|
||||||
|
http://www.httptunnel.ge/ProxyListForFree.aspx/FAQ.aspx
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/media/Download.aspx
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_23_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_129_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_57_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_16_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_54_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_3.html
|
||||||
|
https://proxypedia.org/
|
||||||
|
http://proxysearcher.sourceforge.net/Proxy%20List.php?type=http
|
||||||
|
https://www.proxydocker.com/en/proxylist/state/California
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/South%20korea
|
||||||
|
https://www.proxydocker.com/en/proxylist/port/80
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/New%20York
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/United%20Kingdom
|
||||||
|
https://www.proxydocker.com/ja/proxylist/country/Japan
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Brazil
|
||||||
|
https://www.proxydocker.com/en/proxylist/port/8080
|
||||||
|
https://www.proxydocker.com/ja/
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Germany
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Egypt
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Kazakhstan
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Paraguay
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Malaysia
|
||||||
|
https://www.proxydocker.com/de/proxylist/port/8080,3128,80
|
||||||
|
https://www.proxydocker.com/de/proxylist/
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/Egypt
|
||||||
|
https://www.proxydocker.com/de/proxylist/city/Bangkok
|
||||||
|
http://www.proxz.com/proxy_list_transparent_164_ext.html
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Lima
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/India
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_130_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_59_ext.html
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Yekaterinburg
|
||||||
|
http://www.proxz.com/proxy_list_port_std_156_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_155_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_18_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_65_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_99_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_42_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_132.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_85_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_87_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_128.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_75_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_103_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_transparent_76_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_11_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_90_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_93_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_146_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_124_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_fr_4.html
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/China
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Albania
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?country=DE/
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?country=HN/
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list.php?country=HK/
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=-braziljikarkarkA
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list.php?country=FM
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list.php?country=KR/
|
||||||
|
http://premiumproxy.net/
|
||||||
|
http://premiumproxy.net/contact-us
|
||||||
|
http://premiumproxy.net/web-proxy-list
|
||||||
|
http://premiumproxy.net/full-proxy-list
|
||||||
|
http://premiumproxy.net/elite-proxy-list
|
||||||
|
http://premiumproxy.net/check-headers-status
|
||||||
|
http://premiumproxy.net/distorting-proxy-list
|
||||||
|
http://premiumproxy.net/http-proxy-list
|
||||||
|
http://premiumproxy.net/transparent-proxy-list.php
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=-bolivia_AND_AARK
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=FR-France_A_or&page=0
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=CA-A&page=3
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=JP-JapanRK
|
||||||
|
http://www.proxz.com/proxy_list_port_nonstd_7_ext.html
|
||||||
|
http://www.proxydocker.com/en/proxylist/country/China
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_104_ext.html
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=BG-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=RU-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=GR-
|
||||||
|
http://premiumproxy.net/http-proxy-list.php?page=2
|
||||||
|
http://premiumproxy.net/full-proxy-list.php?page=2
|
||||||
|
http://premiumproxy.net/socks-proxy-list.php?page=1
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=EG
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=BR
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=A-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=PK/
|
||||||
|
https://www.proxydocker.com/de/proxylist/country/United%20States
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list.php?country=CN&page=1
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=LT-Lithuania&page=3
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=CH-&page=1
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=BR-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=SE-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=UK
|
||||||
|
http://www.proxz.com/proxy_list_port_std_67_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_port_std_49_ext.html
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=BO-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=SELECT-
|
||||||
|
https://www.proxydocker.com/en/proxylist/country/Japan
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-vietnam_and__and_skrkskrk
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-singapore
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=IT-Italy
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=AF
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-tanzaniaa
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=SG
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=PA-Panama
|
||||||
|
http://premiumproxy.net/check-headers-status.php?url=nekopoi.lol
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=VN-Vietnam_AND__AND_zOUNzOUNRK
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=MX-Mexico_AND__AND_sUjBsUjBRK
|
||||||
|
https://www.proxydocker.com/de/proxylist/port/8888,3128
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/media/dpg.aspx
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=FR-
|
||||||
|
https://www.proxydocker.com/en/proxylist/city/Surabaya
|
||||||
|
http://www.httptunnel.ge/proxylistforfree.aspx/
|
||||||
|
https://www.proxydocker.com/de/proxylist/city/London
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=%20R-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-dominicanrk
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-guatemala
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-southwp
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=BR-Brazil
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=NL
|
||||||
|
http://premiumproxy.net/https-ssl-proxy-list.php?page=1
|
||||||
|
https://proxypedia.org/czechia/free-proxy-178-77-206-21-58004
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=COA-
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=MX-
|
||||||
|
http://premiumproxy.net/transparent-proxy-list.php?page=1
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=ML
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-namibia
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=IN
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=TH
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=JP-JapanRK
|
||||||
|
http://www.proxydocker.com/en/proxylist/country/Italy
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_97_ext.html
|
||||||
|
http://www.proxz.com/proxy_list_cn_ssl_82_ext.html
|
||||||
|
http://www.proxz.com/terms.php
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_117_ext.html
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=UZ
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=NA-Namibia
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?country=FM
|
||||||
|
http://www.premiumproxy.net/check-ip-proxy-port?ip-proxy=Anonytun.com&port=443
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=-thailand&page=5
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=-braziljikarkaRKRK&page=5
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?country=UK/&page=1
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=-singapore&page=2
|
||||||
|
http://www.proxz.com/proxy_list_port_std_8.html
|
||||||
|
http://premiumproxy.net/http-proxy-list.php?page=1
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=NL-Netherlands_ARKRK_
|
||||||
|
http://premiumproxy.net/anonymous-proxy-list.php
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-bolivia_AND_AARK
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-curacao
|
||||||
|
http://www.proxz.com/proxy_list_high_anonymous_108.html
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-bolivia_AND_A
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=MQ
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-myanmar
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=CN-China_
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=TW
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-malta
|
||||||
|
http://premiumproxy.net/full-proxy-list.php?page=1
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=JP-Japan
|
||||||
|
http://www.premiumproxy.net/top-country-proxy-list?cntr=KR-Southwp
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=VN
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=MX
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-turkey
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=PH-Pilippines
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=%20-_and_rkrs_ajlrnbcdatwcautelegvxdaso
|
||||||
|
http://premiumproxy.net/transparent-proxy-list
|
||||||
|
http://premiumproxy.net/squid-proxy-list
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-bolivia_and_aark
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=KR-Southwp
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-south_koreaaaaa
|
||||||
|
http://premiumproxy.net/top-country-proxy-list.php?country=CL/
|
||||||
|
http://premiumproxy.net/top-country-proxy-list?cntr=-braziljikarkark
|
||||||
87
includes/misc.py
Normal file
87
includes/misc.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import time, random, sys, os, string
|
||||||
|
#import sockschain as socks
|
||||||
|
sys.path.append('./includes')
|
||||||
|
import rocksock
|
||||||
|
|
||||||
|
""" return formatted timestamp """
|
||||||
|
def timestamp():
|
||||||
|
return time.strftime('%H:%M:%S', time.gmtime())
|
||||||
|
|
||||||
|
""" return some random string """
|
||||||
|
def random_string(strlen=20):
|
||||||
|
return ''.join([random.choice(string.letters) for x in xrange(strlen)])
|
||||||
|
|
||||||
|
def _log(strng, level='info'):
|
||||||
|
print '%s/%s\t%s' % (timestamp(), level, strng)
|
||||||
|
|
||||||
|
def option_matches_options(strng, items):
|
||||||
|
try: return [item for item in items if re.match(strng, item)]
|
||||||
|
except: return False
|
||||||
|
|
||||||
|
def prepare_socksocket(self, destination, path, path_item):
|
||||||
|
if path_item in self.paths and self.paths[path_item]['path'] == path:
|
||||||
|
self.paths[path_item]['path'] = False
|
||||||
|
|
||||||
|
#socks.setdefaultproxy()
|
||||||
|
# relay to i2p http proxy if *.i2p domain
|
||||||
|
if destination.endswith('i2p'):
|
||||||
|
proxy = random.choice(self.i2p_host).split(':')
|
||||||
|
path = False
|
||||||
|
# or go with tor
|
||||||
|
else:
|
||||||
|
proxies = [ rocksock.RocksockProxyFromURL('socks5://%s' % random.choice(self.tor_host)) ]
|
||||||
|
#socks.adddefaultproxy(*socks.parseproxy('tor://%s' % random.choice(self.tor_host)))
|
||||||
|
# add 'clearnet' proxies to the chain ?
|
||||||
|
if self.proxify and (not destination.endswith('onion') and not destination.endswith('.exit')):
|
||||||
|
|
||||||
|
# get a proxy path
|
||||||
|
path = build_path(self, path_item, path)
|
||||||
|
|
||||||
|
# if path isn't long enough, break
|
||||||
|
if not len(path): return False, False, False
|
||||||
|
|
||||||
|
# add chain...
|
||||||
|
#for inc in xrange(len(path) - 1): socks.adddefaultproxy(*socks.parseproxy('http://%s' % path[inc]))
|
||||||
|
#for inc in xrange(len(path) - 1): socks.adddefaultproxy(*socks.parseproxy('%s://%s' % (path[inc][1], path[inc][0])))
|
||||||
|
for inc in xrange(len(path)): proxies.append( rocksock.RocksockProxyFromURL('%s://%s' % (path[inc][1], path[inc][0])))
|
||||||
|
|
||||||
|
#return True, socks.socksocket, path
|
||||||
|
return True, proxies, path
|
||||||
|
|
||||||
|
def build_path(self, path_item, path):
|
||||||
|
|
||||||
|
chainlen = random.randint( self.path_len, (self.path_len + self.path_randomlen))
|
||||||
|
# if not enough proxies
|
||||||
|
# FIXME: try to get a proxylist from database
|
||||||
|
if len(self.proxylist) < chainlen: return []
|
||||||
|
|
||||||
|
# valid path already available
|
||||||
|
elif (path_item in self.paths and
|
||||||
|
self.paths[path_item]['path'] and
|
||||||
|
(time.time() - self.paths[path_item]['ticks']) < self.path_duration):
|
||||||
|
|
||||||
|
# take available path if any
|
||||||
|
if path != self.paths[path_item]['path']: path = self.paths[path_item]['path']
|
||||||
|
|
||||||
|
# or nope, none available
|
||||||
|
# build a new one from scratch
|
||||||
|
else:
|
||||||
|
path = []
|
||||||
|
avail = []
|
||||||
|
|
||||||
|
# dec chainlen if we have to select the exit proxy
|
||||||
|
if self.exitcountry is not None: chainlen -= 1
|
||||||
|
#avail = [item[0] for item in self.proxylist if not item[0] in avail and item[1] != str(self.exitcountry).upper()]
|
||||||
|
avail = [[item[0],item[2]] for item in self.proxylist if not item[0] in avail and item[1] != str(self.exitcountry).upper()]
|
||||||
|
path = random.sample(avail, chainlen)
|
||||||
|
|
||||||
|
# choose the exit proxy
|
||||||
|
if self.exitcountry is not None:
|
||||||
|
#avail = [item[0] for item in self.proxylist if not item[0] in path and item[1] == str(self.exitcountry).upper()]
|
||||||
|
avail = [[item[0],item[2]] for item in self.proxylist if not item[0] in path and item[1] == str(self.exitcountry).upper()]
|
||||||
|
if not len(avail): return []
|
||||||
|
path.append(random.choice(avail))
|
||||||
|
|
||||||
|
return path
|
||||||
33
includes/mysqlite.py
Normal file
33
includes/mysqlite.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import time, random, sys
|
||||||
|
import sqlite3 as lite
|
||||||
|
|
||||||
|
class mysqlite:
|
||||||
|
|
||||||
|
def execute(self, query, args = None, rmin = 1.5, rmax = 7.0):
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try: return self.cursor.execute(query,args) if args else self.cursor.execute(query)
|
||||||
|
except:
|
||||||
|
print '%s\nquery: %s\nargs: %s' % (str(sys.exc_info()), str(query), str(args))
|
||||||
|
time.sleep(random.uniform(rmin, rmax))
|
||||||
|
|
||||||
|
def executemany(self, query, args, rmin = 1.5, rmax = 7.0):
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try: return self.cursor.executemany(query,args)
|
||||||
|
except:
|
||||||
|
print '%s\nquery: %s\nargs: %s' % (str(sys.exc_info()), str(query), str(args))
|
||||||
|
time.sleep(random.uniform(rmin, rmax))
|
||||||
|
|
||||||
|
def commit(self, rmin = 1.5, rmax = 7.0):
|
||||||
|
while True:
|
||||||
|
try: return self.handle.commit()
|
||||||
|
except: time.sleep(random.uniform(rmin, rmax))
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self.handle.close()
|
||||||
|
|
||||||
|
def __init__(self, database, factory = None):
|
||||||
|
self.handle = lite.connect(database)
|
||||||
|
if factory: self.handle.text_factory = factory
|
||||||
|
self.cursor = self.handle.cursor()
|
||||||
165
includes/proxywatchd.py
Normal file
165
includes/proxywatchd.py
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from threading import Thread
|
||||||
|
import threading, commands
|
||||||
|
import socket, time, random, sys, string, re
|
||||||
|
#import sockschain as socks
|
||||||
|
import requests
|
||||||
|
#from geoip import geolite2
|
||||||
|
|
||||||
|
from ConfigParser import SafeConfigParser
|
||||||
|
|
||||||
|
sys.path.append('./includes')
|
||||||
|
import mysqlite
|
||||||
|
from misc import _log
|
||||||
|
import rocksock
|
||||||
|
|
||||||
|
class Proxywatchd(Thread):
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
_log('Requesting proxywatchd to halt (%d thread(s))' % len([item for item in self.threads if item.isAlive()]))
|
||||||
|
self.running = 0
|
||||||
|
|
||||||
|
def __init__(self, config_file):
|
||||||
|
Thread.__init__(self)
|
||||||
|
|
||||||
|
self.threads = []
|
||||||
|
self.running = 1
|
||||||
|
self.parser = SafeConfigParser()
|
||||||
|
self.parser.read(config_file)
|
||||||
|
|
||||||
|
self.maxfail = self.parser.getint('global', 'proxy_max_fail')
|
||||||
|
self.maxthreads = self.parser.getint('watcherd', 'threads')
|
||||||
|
self.checktime = self.parser.getint('watcherd', 'checktime')
|
||||||
|
self.timeout = self.parser.getint('watcherd', 'timeout')
|
||||||
|
self.database = self.parser.get('global', 'database')
|
||||||
|
self.torhosts = [ str(i).strip() for i in self.parser.get('global', 'tor_host').split(',') ]
|
||||||
|
self.read_timeout = self.parser.getint('watcherd', 'read_timeout')
|
||||||
|
|
||||||
|
# create table if needed
|
||||||
|
self.mysqlite = mysqlite.mysqlite(self.database, str)
|
||||||
|
self.mysqlite.execute('CREATE TABLE IF NOT EXISTS proxylist (proxy BLOB, country BLOB, added INT, failed INT, tested INT, source BLOB, dronebl INT, proto TEXT, duration INT)')
|
||||||
|
self.mysqlite.commit()
|
||||||
|
self.echoise = time.time() - 3600;
|
||||||
|
self.ticks = time.time() - 3600;
|
||||||
|
|
||||||
|
with open('servers.txt', 'r') as handle: self.servers = handle.read().split('\n')
|
||||||
|
|
||||||
|
self.start()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
_log('Starting proxywatchd..', 'notice')
|
||||||
|
|
||||||
|
threads = []
|
||||||
|
self.mysqlite = mysqlite.mysqlite(self.database, str)
|
||||||
|
|
||||||
|
while self.running:
|
||||||
|
|
||||||
|
if len(threads) < self.maxthreads:
|
||||||
|
t = threading.Thread(target=self.daemon, args=(self.servers,))
|
||||||
|
t.start()
|
||||||
|
threads.append(t)
|
||||||
|
time.sleep( random.choice( xrange(1,3)))
|
||||||
|
|
||||||
|
else: time.sleep(1)
|
||||||
|
|
||||||
|
if (time.time() - self.echoise) >= 180:
|
||||||
|
_log('Proxywatchd threads: %d/%d' % (len(threads), self.maxthreads))
|
||||||
|
self.echoise = time.time()
|
||||||
|
|
||||||
|
self.mysqlite.close()
|
||||||
|
|
||||||
|
def is_drone_bl(self, proxy):
|
||||||
|
p = proxy.split(':')[0]
|
||||||
|
proxies = {'http':'socks4://%s:%s@%s' % (p,p,random.choice(self.torhosts))}
|
||||||
|
resp = requests.get('http://dronebl.org/lookup?ip=%s' % p, proxies=proxies)
|
||||||
|
if 'No incidents regarding' in resp.text: return 0
|
||||||
|
else: return 1
|
||||||
|
|
||||||
|
def connect_socket(self, proxy, servers, proto = None):
|
||||||
|
proto = ['http', 'socks5', 'socks4']
|
||||||
|
|
||||||
|
for p in proto:
|
||||||
|
torhost = random.choice(self.torhosts)
|
||||||
|
duration = time.time()
|
||||||
|
proxies = [ rocksock.RocksockProxyFromURL('socks4://%s' % torhost),
|
||||||
|
rocksock.RocksockProxyFromURL('%s://%s' % (p, proxy[0])),
|
||||||
|
]
|
||||||
|
|
||||||
|
tst = random.choice(servers).strip()
|
||||||
|
try:
|
||||||
|
sock = rocksock.Rocksock(host=tst, port=6667, ssl=False, proxies=proxies, timeout=self.timeout)
|
||||||
|
sock.connect()
|
||||||
|
sock.send('%s\n' % random.choice(['NICK', 'USER', 'JOIN', 'MODE', 'PART', 'INVITE', 'KNOCK', 'WHOIS', 'WHO', 'NOTICE', 'PRIVMSG', 'PING', 'QUIT']))
|
||||||
|
return sock, p, duration, torhost, tst
|
||||||
|
|
||||||
|
except:
|
||||||
|
#print('socket error, disconnecting')
|
||||||
|
sock.disconnect()
|
||||||
|
|
||||||
|
return False, False, False, False, False
|
||||||
|
|
||||||
|
def daemon(self, servers):
|
||||||
|
sqlite = mysqlite.mysqlite(self.database, str)
|
||||||
|
threadid = ''.join( [ random.choice(string.letters) for x in range(5) ] )
|
||||||
|
|
||||||
|
q = 'SELECT proxy,failed,country,proto FROM proxylist WHERE failed<? and tested<? ORDER BY RANDOM() LIMIT ?'
|
||||||
|
|
||||||
|
while self.running:
|
||||||
|
|
||||||
|
time.sleep(0.1)
|
||||||
|
sqlite_requests = []
|
||||||
|
rows = sqlite.execute(q, (self.maxfail, time.time(), random.randint(10,20))).fetchall()
|
||||||
|
|
||||||
|
if not len(rows):
|
||||||
|
time.sleep(random.randint(10,20))
|
||||||
|
continue
|
||||||
|
|
||||||
|
abc = ' OR proxy='.join( [ '?' for x in xrange(0, len(rows)) ] )
|
||||||
|
args = [ (time.time() + 180) ]
|
||||||
|
e = [ args.append(i[0]) for i in rows ]
|
||||||
|
sqlite.executemany('UPDATE proxylist SET tested=? WHERE proxy=%s' % abc, (args,))
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
for proxy in rows:
|
||||||
|
time.sleep(0.1)
|
||||||
|
nextcheck = (time.time() + 1800 + ((1+int(proxy[1])) * 3600))
|
||||||
|
|
||||||
|
sock, proto, duration, tor, tst = self.connect_socket(proxy, servers, proto=proxy[3])
|
||||||
|
if not sock:
|
||||||
|
sqlite_requests.append(((proxy[1]+1), nextcheck, 1, 'unknown', 'http', 0, proxy[0],))
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
recv = sock.recv(6)
|
||||||
|
|
||||||
|
# good data
|
||||||
|
if re.match('^(:|ERROR|PING|PONG|NOTICE|\*\*\*)', recv, re.IGNORECASE):
|
||||||
|
duration = (time.time() - duration)
|
||||||
|
nextcheck = (time.time() + 1800)
|
||||||
|
|
||||||
|
#match = geolite2.lookup(proxy[0].split(':')[0])
|
||||||
|
match = None
|
||||||
|
if match is not None: match = match.country
|
||||||
|
else: match = 'unknown'
|
||||||
|
|
||||||
|
#dronebl = self.is_drone_bl(proxy[0])
|
||||||
|
sqlite_requests.append( (0, time.time(), 1, match, proto, duration, proxy[0],))
|
||||||
|
_log('%s://%s; c: %s; d: %d sec(s); tor: %s; irc: %s; recv: %s' % (proto, proxy[0], match, duration, tor, tst, recv), threadid)
|
||||||
|
|
||||||
|
# bad data
|
||||||
|
else:
|
||||||
|
sqlite_requests.append(( (proxy[1]+1), nextcheck, 1, 'unknown', 'http', 0, proxy[0],))
|
||||||
|
|
||||||
|
# also bad
|
||||||
|
except:
|
||||||
|
sqlite_requests.append(( (proxy[1]+1), nextcheck, 1, 'unknown', 'http', 0, proxy[0],))
|
||||||
|
|
||||||
|
finally:
|
||||||
|
sock.disconnect()
|
||||||
|
|
||||||
|
for r in sqlite_requests:
|
||||||
|
sqlite.execute('UPDATE proxylist SET failed=?,tested=?,dronebl=?,country=?,proto=?,duration=? WHERE proxy=?', r)
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
sqlite.close()
|
||||||
437
includes/rocksock.py
Normal file
437
includes/rocksock.py
Normal file
@@ -0,0 +1,437 @@
|
|||||||
|
import socket, ssl, select
|
||||||
|
|
||||||
|
# rs_proxyType
|
||||||
|
RS_PT_NONE = 0
|
||||||
|
RS_PT_SOCKS4 = 1
|
||||||
|
RS_PT_SOCKS5 = 2
|
||||||
|
RS_PT_HTTP = 3
|
||||||
|
|
||||||
|
# rs_errorType
|
||||||
|
RS_ET_OWN = 0 # rocksock-specific error
|
||||||
|
RS_ET_SYS = 1 # system error with errno
|
||||||
|
RS_ET_GAI = 2 # dns resolution subsystem error
|
||||||
|
RS_ET_SSL = 3 # ssl subsystem error
|
||||||
|
|
||||||
|
# rs_error
|
||||||
|
RS_E_NO_ERROR = 0
|
||||||
|
RS_E_NULL = 1
|
||||||
|
RS_E_EXCEED_PROXY_LIMIT = 2
|
||||||
|
RS_E_NO_SSL = 3
|
||||||
|
RS_E_NO_SOCKET = 4
|
||||||
|
RS_E_HIT_TIMEOUT = 5
|
||||||
|
RS_E_OUT_OF_BUFFER = 6
|
||||||
|
RS_E_SSL_GENERIC = 7
|
||||||
|
RS_E_SOCKS4_NOAUTH = 8
|
||||||
|
RS_E_SOCKS5_AUTH_EXCEEDSIZE = 9
|
||||||
|
RS_E_SOCKS4_NO_IP6 = 10
|
||||||
|
RS_E_PROXY_UNEXPECTED_RESPONSE = 11
|
||||||
|
RS_E_TARGETPROXY_CONNECT_FAILED = 12
|
||||||
|
RS_E_PROXY_AUTH_FAILED = 13
|
||||||
|
RS_E_HIT_READTIMEOUT = 14
|
||||||
|
RS_E_HIT_WRITETIMEOUT = 15
|
||||||
|
RS_E_HIT_CONNECTTIMEOUT = 16
|
||||||
|
RS_E_PROXY_GENERAL_FAILURE = 17
|
||||||
|
RS_E_TARGETPROXY_NET_UNREACHABLE = 18
|
||||||
|
RS_E_TARGETPROXY_HOST_UNREACHABLE = 19
|
||||||
|
RS_E_TARGETPROXY_CONN_REFUSED = 20
|
||||||
|
RS_E_TARGETPROXY_TTL_EXPIRED = 21
|
||||||
|
RS_E_PROXY_COMMAND_NOT_SUPPORTED = 22
|
||||||
|
RS_E_PROXY_ADDRESSTYPE_NOT_SUPPORTED = 23
|
||||||
|
RS_E_REMOTE_DISCONNECTED = 24
|
||||||
|
RS_E_NO_PROXYSTORAGE = 25
|
||||||
|
RS_E_HOSTNAME_TOO_LONG = 26
|
||||||
|
RS_E_INVALID_PROXY_URL = 27
|
||||||
|
|
||||||
|
|
||||||
|
class RocksockException(Exception):
|
||||||
|
def __init__(self, error, failedproxy=None, errortype=RS_ET_OWN, *args, **kwargs):
|
||||||
|
Exception.__init__(self,*args,**kwargs)
|
||||||
|
self.error = error
|
||||||
|
self.errortype = errortype
|
||||||
|
self.failedproxy = failedproxy
|
||||||
|
|
||||||
|
def get_failedproxy(self):
|
||||||
|
return self.failedproxy
|
||||||
|
|
||||||
|
def get_error(self):
|
||||||
|
return self.error
|
||||||
|
|
||||||
|
def reraise(self):
|
||||||
|
import sys
|
||||||
|
ei = sys.exc_info()
|
||||||
|
raise ei[0], ei[1], ei[2]
|
||||||
|
# import traceback, sys
|
||||||
|
# traceback.print_exc(file=sys.stderr)
|
||||||
|
# raise self
|
||||||
|
|
||||||
|
def get_errormessage(self):
|
||||||
|
errordict = {
|
||||||
|
RS_E_NO_ERROR : "no error",
|
||||||
|
RS_E_NULL: "NULL pointer passed",
|
||||||
|
RS_E_EXCEED_PROXY_LIMIT: "exceeding maximum number of proxies",
|
||||||
|
RS_E_NO_SSL: "can not establish SSL connection, since library was not compiled with USE_SSL define",
|
||||||
|
RS_E_NO_SOCKET: "socket is not set up, maybe you should call connect first",
|
||||||
|
RS_E_HIT_TIMEOUT: "timeout reached on operation",
|
||||||
|
RS_E_OUT_OF_BUFFER: "supplied buffer is too small",
|
||||||
|
RS_E_SSL_GENERIC: "generic SSL error", # the C version uses this error when the SSL library does not report any specific error, otherwise errortype SSL will be set and the SSL errorcode be used
|
||||||
|
RS_E_SOCKS4_NOAUTH:"SOCKS4 authentication not implemented",
|
||||||
|
RS_E_SOCKS5_AUTH_EXCEEDSIZE: "maximum length for SOCKS5 servername/password/username is 255",
|
||||||
|
RS_E_SOCKS4_NO_IP6: "SOCKS4 is not compatible with IPv6",
|
||||||
|
RS_E_PROXY_UNEXPECTED_RESPONSE: "the proxy sent an unexpected response",
|
||||||
|
RS_E_TARGETPROXY_CONNECT_FAILED: "could not connect to target proxy",
|
||||||
|
RS_E_PROXY_AUTH_FAILED: "proxy authentication failed or authd not enabled",
|
||||||
|
RS_E_HIT_READTIMEOUT : "timeout reached on read operation",
|
||||||
|
RS_E_HIT_WRITETIMEOUT : "timeout reached on write operation",
|
||||||
|
RS_E_HIT_CONNECTTIMEOUT : "timeout reached on connect operation",
|
||||||
|
RS_E_PROXY_GENERAL_FAILURE : "proxy general failure",
|
||||||
|
RS_E_TARGETPROXY_NET_UNREACHABLE : "proxy-target: net unreachable",
|
||||||
|
RS_E_TARGETPROXY_HOST_UNREACHABLE : "proxy-target: host unreachable",
|
||||||
|
RS_E_TARGETPROXY_CONN_REFUSED : "proxy-target: connection refused",
|
||||||
|
RS_E_TARGETPROXY_TTL_EXPIRED : "proxy-target: TTL expired",
|
||||||
|
RS_E_PROXY_COMMAND_NOT_SUPPORTED : "proxy: command not supported",
|
||||||
|
RS_E_PROXY_ADDRESSTYPE_NOT_SUPPORTED : "proxy: addresstype not supported",
|
||||||
|
RS_E_REMOTE_DISCONNECTED : "remote socket closed connection",
|
||||||
|
RS_E_NO_PROXYSTORAGE : "no proxy storage assigned",
|
||||||
|
RS_E_HOSTNAME_TOO_LONG : "hostname exceeds 255 chars",
|
||||||
|
RS_E_INVALID_PROXY_URL : "invalid proxy URL string"
|
||||||
|
}
|
||||||
|
if self.errortype == RS_ET_SYS:
|
||||||
|
import errno
|
||||||
|
if self.error in errno.errorcode:
|
||||||
|
msg = "ERRNO: " + errno.errorcode[self.error]
|
||||||
|
else:
|
||||||
|
msg = "ERRNO: invalid errno: " + str(self.error)
|
||||||
|
elif self.errortype == RS_ET_GAI:
|
||||||
|
msg = "GAI: " + self.failedproxy
|
||||||
|
elif self.errortype == RS_ET_SSL:
|
||||||
|
msg = errordict[self.error]
|
||||||
|
if self.error == RS_E_SSL_GENERIC and self.failedproxy != None:
|
||||||
|
msg += ': ' + self.failedproxy #failedproxy is repurposed for SSL exceptions
|
||||||
|
else: #RS_ET_OWN
|
||||||
|
msg = errordict[self.error]
|
||||||
|
return msg
|
||||||
|
|
||||||
|
|
||||||
|
class RocksockHostinfo():
|
||||||
|
def __init__(self, host, port):
|
||||||
|
self.host = host
|
||||||
|
self.port = port
|
||||||
|
|
||||||
|
class RocksockProxy():
|
||||||
|
def __init__(self, host, port, type, username = None, password=None, **kwargs):
|
||||||
|
typemap = { 'none' : RS_PT_NONE,
|
||||||
|
'socks4' : RS_PT_SOCKS4,
|
||||||
|
'socks5' : RS_PT_SOCKS5,
|
||||||
|
'http' : RS_PT_HTTP }
|
||||||
|
self.type = typemap[type] if type in typemap else type
|
||||||
|
self.username = username
|
||||||
|
self.password = password
|
||||||
|
self.hostinfo = RocksockHostinfo(host, port)
|
||||||
|
|
||||||
|
def RocksockProxyFromURL(url):
|
||||||
|
# valid URL: socks5://[user:pass@]hostname:port
|
||||||
|
x = url.find('://')
|
||||||
|
if x == -1: return None
|
||||||
|
t = url[:x]
|
||||||
|
url = url[x+len('://'):]
|
||||||
|
x = url.rfind(':')
|
||||||
|
if x == -1: return None # port is obligatory
|
||||||
|
port = int(url[x+len(':'):]) #TODO: catch exception when port is non-numeric
|
||||||
|
url = url[:x]
|
||||||
|
x = url.find('@')
|
||||||
|
if x != -1:
|
||||||
|
u, p = url[:x].split(':')
|
||||||
|
url = url[x+len('@'):]
|
||||||
|
else:
|
||||||
|
u, p = (None, None)
|
||||||
|
return RocksockProxy(host=url, port=port, type=t, username=u, password=p)
|
||||||
|
|
||||||
|
|
||||||
|
class Rocksock():
|
||||||
|
def __init__(self, host=None, port=0, verifycert=False, timeout=0, proxies=None, **kwargs):
|
||||||
|
if 'ssl' in kwargs and kwargs['ssl'] == True:
|
||||||
|
self.sslcontext = ssl.create_default_context()
|
||||||
|
self.sslcontext.check_hostname = False
|
||||||
|
if not verifycert: self.sslcontext.verify_mode = ssl.CERT_NONE
|
||||||
|
else:
|
||||||
|
self.sslcontext = None
|
||||||
|
self.proxychain = proxies if proxies else []
|
||||||
|
target = RocksockProxy(host, port, RS_PT_NONE)
|
||||||
|
self.proxychain.append(target)
|
||||||
|
self.sock = None
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
|
||||||
|
af, sa = self._resolve(self.proxychain[0].hostinfo, True)
|
||||||
|
try:
|
||||||
|
x = af+1
|
||||||
|
except TypeError:
|
||||||
|
raise RocksockException(-3, "unexpected problem resolving DNS, try again", errortype=RS_ET_GAI)
|
||||||
|
# print "GOT A WEIRD AF"
|
||||||
|
# print af
|
||||||
|
# raise RocksockException(-6666, af, errortype=RS_ET_GAI)
|
||||||
|
|
||||||
|
self.sock = socket.socket(af, socket.SOCK_STREAM)
|
||||||
|
self.sock.settimeout(None if self.timeout == 0 else self.timeout)
|
||||||
|
try:
|
||||||
|
self.sock.connect((sa[0], sa[1]))
|
||||||
|
except socket.timeout:
|
||||||
|
raise RocksockException(RS_E_HIT_TIMEOUT)
|
||||||
|
except socket.error as e:
|
||||||
|
raise RocksockException(e.errno, errortype=RS_ET_SYS)
|
||||||
|
|
||||||
|
for pnum in xrange(1, len(self.proxychain)):
|
||||||
|
curr = self.proxychain[pnum]
|
||||||
|
prev = self.proxychain[pnum-1]
|
||||||
|
self._connect_step(pnum)
|
||||||
|
|
||||||
|
if self.sslcontext:
|
||||||
|
try:
|
||||||
|
self.sock = self.sslcontext.wrap_socket(self.sock, server_hostname=self.proxychain[len(self.proxychain)-1].hostinfo.host)
|
||||||
|
except ssl.SSLError as e:
|
||||||
|
reason = self._get_ssl_exception_reason(e)
|
||||||
|
#if hasattr(e, 'library'): subsystem = e.library
|
||||||
|
raise RocksockException(RS_E_SSL_GENERIC, reason, errortype=RS_ET_SSL)
|
||||||
|
except socket.error as e:
|
||||||
|
raise RocksockException(e.errno, errortype=RS_ET_SYS)
|
||||||
|
except Exception as e:
|
||||||
|
raise e
|
||||||
|
"""
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
self.sock.do_handshake()
|
||||||
|
break
|
||||||
|
except ssl.SSLWantReadError:
|
||||||
|
select.select([self.sock], [], [])
|
||||||
|
except ssl.SSLWantWriteError:
|
||||||
|
select.select([], [self.sock], [])
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
if self.sock is None: return
|
||||||
|
try:
|
||||||
|
self.sock.shutdown(socket.SHUT_RDWR)
|
||||||
|
except socket.error:
|
||||||
|
pass
|
||||||
|
self.sock.close()
|
||||||
|
self.sock = None
|
||||||
|
|
||||||
|
def canread(self):
|
||||||
|
return select.select([self.sock], [], [], 0)[0]
|
||||||
|
|
||||||
|
def send(self, buf):
|
||||||
|
if self.sock is None:
|
||||||
|
raise RocksockException(RS_E_NO_SOCKET)
|
||||||
|
return self.sock.sendall(buf)
|
||||||
|
|
||||||
|
def _get_ssl_exception_reason(self, e):
|
||||||
|
s = ''
|
||||||
|
if hasattr(e, 'reason'): s = e.reason
|
||||||
|
elif hasattr(e, 'message'): s = e.message
|
||||||
|
elif hasattr(e, 'args'): s = e.args[0]
|
||||||
|
return s
|
||||||
|
|
||||||
|
def recv(self, count=-1):
|
||||||
|
data = ''
|
||||||
|
while count:
|
||||||
|
try:
|
||||||
|
n = count if count != -1 else 4096
|
||||||
|
if n >= 1024*1024: n = 1024*1024
|
||||||
|
chunk = self.sock.recv(n)
|
||||||
|
except socket.timeout:
|
||||||
|
raise RocksockException(RS_E_HIT_TIMEOUT)
|
||||||
|
except ssl.SSLError as e:
|
||||||
|
s = self._get_ssl_exception_reason(e)
|
||||||
|
if s == 'The read operation timed out':
|
||||||
|
raise RocksockException(RS_E_HIT_READTIMEOUT)
|
||||||
|
else:
|
||||||
|
raise RocksockException(RS_E_SSL_GENERIC, s, errortype=RS_ET_SSL)
|
||||||
|
if len(chunk) == 0:
|
||||||
|
raise RocksockException(RS_E_REMOTE_DISCONNECTED)
|
||||||
|
data += chunk
|
||||||
|
if count == -1: break
|
||||||
|
else: count -= len(chunk)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def recvline(self):
|
||||||
|
s = ''
|
||||||
|
c = '\0'
|
||||||
|
while c != '\n':
|
||||||
|
c = self.recv(1)
|
||||||
|
if c == '': return s
|
||||||
|
s += c
|
||||||
|
return s
|
||||||
|
|
||||||
|
def recvuntil(self, until):
|
||||||
|
s = self.recv(len(until))
|
||||||
|
endc = until[-1:]
|
||||||
|
while not (s[-1:] == endc and s.endswith(until)):
|
||||||
|
s += self.recv(1)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def _isnumericipv4(self, ip):
|
||||||
|
try:
|
||||||
|
a,b,c,d = ip.split('.')
|
||||||
|
if int(a) < 256 and int(b) < 256 and int(c) < 256 and int(d) < 256:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _resolve(self, hostinfo, want_v4=True):
|
||||||
|
if self._isnumericipv4(hostinfo.host):
|
||||||
|
return socket.AF_INET, (hostinfo.host, hostinfo.port)
|
||||||
|
try:
|
||||||
|
for res in socket.getaddrinfo(hostinfo.host, hostinfo.port, \
|
||||||
|
socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
|
||||||
|
af, socktype, proto, canonname, sa = res
|
||||||
|
if want_v4 and af != socket.AF_INET: continue
|
||||||
|
if af != socket.AF_INET and af != socket.AF_INET6: continue
|
||||||
|
else: return af, sa
|
||||||
|
|
||||||
|
except socket.gaierror as e:
|
||||||
|
eno, str = e.args
|
||||||
|
raise RocksockException(eno, str, errortype=RS_ET_GAI)
|
||||||
|
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
def _ip_to_int(self, ip):
|
||||||
|
a,b,c,d = ip.split('.')
|
||||||
|
h = "0x%.2X%.2X%.2X%.2X"%(int(a),int(b),int(c),int(d))
|
||||||
|
return int(h, 16)
|
||||||
|
|
||||||
|
def _ip_to_bytes(self, ip):
|
||||||
|
ip = self._ip_to_int(ip)
|
||||||
|
a = (ip & 0xff000000) >> 24
|
||||||
|
b = (ip & 0x00ff0000) >> 16
|
||||||
|
c = (ip & 0x0000ff00) >> 8
|
||||||
|
d = (ip & 0x000000ff) >> 0
|
||||||
|
return chr(a) + chr(b) + chr(c) + chr(d)
|
||||||
|
|
||||||
|
def _setup_socks4_header(self, v4a, dest):
|
||||||
|
buf = '\x04\x01'
|
||||||
|
buf += chr(dest.hostinfo.port / 256)
|
||||||
|
buf += chr(dest.hostinfo.port % 256)
|
||||||
|
if v4a:
|
||||||
|
buf += '\0\0\0\x01'
|
||||||
|
else:
|
||||||
|
af, sa = self._resolve(dest, True)
|
||||||
|
if af != socket.AF_INET: raise RocksockException(RS_E_SOCKS4_NO_IP6)
|
||||||
|
buf += self._ip_to_bytes(sa[0])
|
||||||
|
buf += '\0'
|
||||||
|
if v4a: buf += dest.hostinfo.host + '\0'
|
||||||
|
return buf
|
||||||
|
|
||||||
|
def _connect_socks4(self, header, pnum):
|
||||||
|
self.send(header)
|
||||||
|
res = self.recv(8)
|
||||||
|
if len(res) < 8 or ord(res[0]) != 0:
|
||||||
|
raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
ch = ord(res[1])
|
||||||
|
if ch == 0x5a:
|
||||||
|
pass
|
||||||
|
elif ch == 0x5b:
|
||||||
|
raise RocksockException(RS_E_TARGETPROXY_CONNECT_FAILED, pnum-1)
|
||||||
|
elif ch == 0x5c or ch == 0x5d:
|
||||||
|
return RocksockException(RS_E_PROXY_AUTH_FAILED, pnum-1)
|
||||||
|
else:
|
||||||
|
raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
|
||||||
|
def _setup_socks5_header(self, proxy):
|
||||||
|
buf = '\x05'
|
||||||
|
if proxy.username and proxy.password:
|
||||||
|
buf += '\x02\x00\x02'
|
||||||
|
else:
|
||||||
|
buf += '\x01\x00'
|
||||||
|
return buf
|
||||||
|
|
||||||
|
def _connect_socks5(self, header, pnum):
|
||||||
|
self.send(header)
|
||||||
|
res = self.recv(2)
|
||||||
|
if len(res) != 2 or res[0] != '\x05':
|
||||||
|
raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
if res[1] == '\xff':
|
||||||
|
raise RocksockException(RS_E_PROXY_AUTH_FAILED, pnum-1)
|
||||||
|
|
||||||
|
if ord(res[1]) == 2:
|
||||||
|
px = self.proxychain[pnum-1]
|
||||||
|
if px.username and px.password:
|
||||||
|
pkt = '\x01%c%s%c%s'%(len(px.username),px.username,len(px.password),px.password)
|
||||||
|
self.send(pkt)
|
||||||
|
res = self.recv(2)
|
||||||
|
if len(res) < 2 or res[1] != '\0':
|
||||||
|
raise RocksockException(RS_E_PROXY_AUTH_FAILED, pnum-1)
|
||||||
|
else: raise RocksockException(RS_E_PROXY_AUTH_FAILED, pnum-1)
|
||||||
|
dst = self.proxychain[pnum]
|
||||||
|
numeric = self._isnumericipv4(dst.hostinfo.host)
|
||||||
|
if numeric:
|
||||||
|
dstaddr = self._ip_to_bytes(dst.hostinfo.host)
|
||||||
|
else:
|
||||||
|
dstaddr = chr(len(dst.hostinfo.host)) + dst.hostinfo.host
|
||||||
|
|
||||||
|
pkt = '\x05\x01\x00%c%s%c%c'% (1 if numeric else 3, dstaddr, dst.hostinfo.port / 256, dst.hostinfo.port % 256)
|
||||||
|
self.send(pkt)
|
||||||
|
res = self.recv()
|
||||||
|
if len(res) < 2 or res[0] != '\x05':
|
||||||
|
raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
ch = ord(res[1])
|
||||||
|
if ch == 0: pass
|
||||||
|
elif ch == 1: raise RocksockException(RS_E_PROXY_GENERAL_FAILURE, pnum-1)
|
||||||
|
elif ch == 2: raise RocksockException(RS_E_PROXY_AUTH_FAILED, pnum-1)
|
||||||
|
elif ch == 3: raise RocksockException(RS_E_TARGETPROXY_NET_UNREACHABLE, pnum-1)
|
||||||
|
elif ch == 4: raise RocksockException(RS_E_TARGETPROXY_HOST_UNREACHABLE, pnum-1)
|
||||||
|
elif ch == 5: raise RocksockException(RS_E_TARGETPROXY_CONN_REFUSED, pnum-1)
|
||||||
|
elif ch == 6: raise RocksockException(RS_E_TARGETPROXY_TTL_EXPIRED, pnum-1)
|
||||||
|
elif ch == 7: raise RocksockException(RS_E_PROXY_COMMAND_NOT_SUPPORTED, pnum-1)
|
||||||
|
elif ch == 8: raise RocksockException(RS_E_PROXY_ADDRESSTYPE_NOT_SUPPORTED, pnum-1)
|
||||||
|
else: raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
|
||||||
|
|
||||||
|
def _connect_step(self, pnum):
|
||||||
|
prev = self.proxychain[pnum -1]
|
||||||
|
curr = self.proxychain[pnum]
|
||||||
|
if prev.type == RS_PT_SOCKS4:
|
||||||
|
s4a = self._setup_socks4_header(True, curr)
|
||||||
|
try:
|
||||||
|
self._connect_socks4(s4a, pnum)
|
||||||
|
except RocksockException as e:
|
||||||
|
if e.get_error() == RS_E_TARGETPROXY_CONNECT_FAILED:
|
||||||
|
s4 = self._setup_socks4_header(self, False, curr)
|
||||||
|
self._connect_socks4(s4a, pnum)
|
||||||
|
else: raise e
|
||||||
|
elif prev.type == RS_PT_SOCKS5:
|
||||||
|
s5 = self._setup_socks5_header(prev)
|
||||||
|
self._connect_socks5(s5, pnum)
|
||||||
|
elif prev.type == RS_PT_HTTP:
|
||||||
|
dest = self.proxychain[pnum]
|
||||||
|
self.send("CONNECT %s:%d HTTP/1.1\r\n\r\n"%(dest.hostinfo.host, dest.hostinfo.port))
|
||||||
|
resp = self.recv()
|
||||||
|
if len(resp) <12:
|
||||||
|
raise RocksockException(RS_E_PROXY_UNEXPECTED_RESPONSE, pnum-1)
|
||||||
|
if resp[9] != '2':
|
||||||
|
raise RocksockException(RS_E_TARGETPROXY_CONNECT_FAILED, pnum-1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
proxies = [
|
||||||
|
# RocksockProxyFromURL("socks5://foo:bar@localhost:1080"),
|
||||||
|
# RocksockProxyFromURL("socks5://10.0.0.3:1080"),
|
||||||
|
RocksockProxyFromURL("socks5://127.0.0.1:31339"),
|
||||||
|
]
|
||||||
|
proxies = None
|
||||||
|
#rs = Rocksock(host='googleff242342423f.com', port=443, ssl=True, proxies=proxies)
|
||||||
|
rs = Rocksock(host='google.com', port=80, ssl=False, proxies=proxies)
|
||||||
|
try:
|
||||||
|
rs.connect()
|
||||||
|
except RocksockException as e:
|
||||||
|
print e.get_errormessage()
|
||||||
|
e.reraise()
|
||||||
|
rs.send('GET / HTTP/1.0\r\n\r\n')
|
||||||
|
print rs.recvline()
|
||||||
|
rs.disconnect()
|
||||||
|
rs.connect()
|
||||||
|
rs.send('GET / HTTP/1.0\r\n\r\n')
|
||||||
|
print rs.recvline()
|
||||||
|
|
||||||
245
ppf.py
Executable file
245
ppf.py
Executable file
@@ -0,0 +1,245 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import socket
|
||||||
|
import requests
|
||||||
|
import socks
|
||||||
|
import random, time
|
||||||
|
import sqlite3
|
||||||
|
import re
|
||||||
|
import urllib
|
||||||
|
import threading
|
||||||
|
import hashlib
|
||||||
|
import ipcalc
|
||||||
|
from soup_parser import soupify
|
||||||
|
from ConfigParser import SafeConfigParser
|
||||||
|
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
||||||
|
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
||||||
|
from dns import resolver
|
||||||
|
#from selenium import webdriver
|
||||||
|
|
||||||
|
sys.path.append('./includes')
|
||||||
|
import mysqlite
|
||||||
|
from misc import _log
|
||||||
|
|
||||||
|
base_header = {
|
||||||
|
'Accept-Language':'en-US,en;q=0.8',
|
||||||
|
'Cache-Control':'max-age=0',
|
||||||
|
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
||||||
|
'DNT': '1',
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
database = 'proxies.sqlite'
|
||||||
|
|
||||||
|
searx_instances = ('https://searx.me', 'https://searx.xyz', 'https://searx.site', 'https://searx.win', 'https://searx.ru', 'https://stemy.me/searx', 'https://searx.at', 'https://listi.me', 'https://searx.dk', 'https://searx.laquadrature.net' )
|
||||||
|
|
||||||
|
retry_messages = ('Engines cannot retrieve results', 'Rate limit exceeded')
|
||||||
|
proxies={ 'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050', 'ftp': 'socks5://127.0.0.1:9050'}
|
||||||
|
|
||||||
|
|
||||||
|
# include own classes
|
||||||
|
sys.path.append('./includes')
|
||||||
|
import proxywatchd, mysqlite
|
||||||
|
from misc import _log
|
||||||
|
|
||||||
|
CONFIG = 'config.ini'
|
||||||
|
|
||||||
|
|
||||||
|
def cleanhtml(raw_html):
|
||||||
|
cleanr = re.compile('<.*?>')
|
||||||
|
cleantext = re.sub(cleanr, ':', raw_html)
|
||||||
|
cleantext = re.sub('::+',':', cleantext)
|
||||||
|
return cleantext
|
||||||
|
|
||||||
|
def import_from_file(fn, sqlite):
|
||||||
|
with open(fn, 'r') as f:
|
||||||
|
for u in f.read().split('\n'):
|
||||||
|
if not len(u): continue
|
||||||
|
exists = [ i[0] for i in sqlite.execute('SELECT url FROM uris WHERE url=?',(u,)).fetchall() ]
|
||||||
|
if exists: continue
|
||||||
|
print('adding "%s"' % u)
|
||||||
|
sqlite.execute('INSERT INTO uris (added,url,check_time,error) VALUES (?,?,?,?)', (time.time(),u,0,1))
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
def fetch_contents(uri, driver=None):
|
||||||
|
headers = base_header
|
||||||
|
## use requests (default)
|
||||||
|
if not driver:
|
||||||
|
try: resp = requests.get(uri, timeout=45, headers=headers, verify=False, proxies=proxies)
|
||||||
|
except: return ''
|
||||||
|
data = resp.text
|
||||||
|
|
||||||
|
## phantomjs
|
||||||
|
else:
|
||||||
|
for key, value in enumerate(base_header):
|
||||||
|
capability_key = 'phantomjs.page.customHeaders.{}'.format(key)
|
||||||
|
webdriver.DesiredCapabilities.PHANTOMJS[capability_key] = value
|
||||||
|
|
||||||
|
service_args = ['--proxy=127.0.0.1:9050', '--proxy-type=socks5']
|
||||||
|
driver = webdriver.PhantomJS()
|
||||||
|
try:
|
||||||
|
driver.implicitly_wait(45)
|
||||||
|
driver.set_page_load_timeout(45)
|
||||||
|
driver.get(uri)
|
||||||
|
data = driver.page_source
|
||||||
|
|
||||||
|
except: data = ''
|
||||||
|
finally:driver.quit()
|
||||||
|
|
||||||
|
for retry_message in retry_messages:
|
||||||
|
if retry_message in data: return ''
|
||||||
|
return data
|
||||||
|
|
||||||
|
def update_proxy_sources(sqlite, proxies, uri):
|
||||||
|
for proxy in proxies:
|
||||||
|
md5sum = hashlib.md5(proxy).hexdigest()
|
||||||
|
sqlite.execute('CREATE TABLE IF NOT EXISTS "%s" (uri TEXT)' % md5sum)
|
||||||
|
sqlite.commit()
|
||||||
|
#check = [ i for i in sqlite.execute('SELECT uri FROM "%s" WHERE uri=?' % md5sum, (uri,)).fetchall() ]
|
||||||
|
check = sqlite.execute('SELECT uri FROM "%s" WHERE uri=?' % md5sum, (uri,)).fetchall()
|
||||||
|
if not len(check):
|
||||||
|
sqlite.execute('INSERT INTO "%s" (uri) VALUES(?)' % md5sum, (uri,))
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
def insert_proxies(proxies, uri, sqlite):
|
||||||
|
time_now = time.time()
|
||||||
|
added = 0
|
||||||
|
|
||||||
|
## very wasteful
|
||||||
|
#update_proxy_sources(sqlite, proxies, uri)
|
||||||
|
|
||||||
|
query = [ 'proxy=?' for p in proxies ]
|
||||||
|
known = [ i[0] for i in sqlite.execute('SELECT proxy FROM proxylist WHERE %s' % ' OR '.join(query), proxies).fetchall() ]
|
||||||
|
new = [ (time_now,i,3,0) for i in proxies if not i in known ]
|
||||||
|
if len(new):
|
||||||
|
added = added + len(new)
|
||||||
|
sqlite.executemany('INSERT INTO proxylist (added,proxy,failed,tested) VALUES (?,?,?,?)', new)
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
if added > 0: _log('+%d item(s) from %s' % (added, uri), 'added')
|
||||||
|
|
||||||
|
def proxyfind(sqlite = None):
|
||||||
|
#print('entering proxyfind...')
|
||||||
|
|
||||||
|
if not sqlite: sqlite = mysqlite.mysqlite(database,str)
|
||||||
|
|
||||||
|
uris = [ i[0] for i in sqlite.execute('SELECT url FROM uris WHERE error=0 and url not like "%github%" ORDER BY RANDOM() LIMIT 10').fetchall() ]
|
||||||
|
|
||||||
|
if len(uris) > 0 and random.random() < random.random():
|
||||||
|
search = urllib.quote_plus('site:%s' % random.choice(uris).split('/')[2])
|
||||||
|
else:
|
||||||
|
search = urllib.quote_plus(random.choice(search_terms))
|
||||||
|
|
||||||
|
choice = random.choice(searx_instances)
|
||||||
|
urls = []
|
||||||
|
|
||||||
|
content = fetch_contents('%s/?q=%s&pageno=%d' % (choice, search, random.randint(0,10)))
|
||||||
|
|
||||||
|
if not content: return
|
||||||
|
soup = soupify(content)
|
||||||
|
|
||||||
|
for a in soup.body.find_all('a'):
|
||||||
|
if not 'rel' in a.attrs or not 'noreferrer' in a.attrs['rel'] or a.attrs['href'] in urls: continue
|
||||||
|
badurl = [ i for i in urignore if re.findall(i,a.attrs['href'], re.IGNORECASE) ]
|
||||||
|
if not len(badurl): urls.append(a.attrs['href'])
|
||||||
|
|
||||||
|
if len(urls):
|
||||||
|
query = [ 'url=?' for u in urls ]
|
||||||
|
known = [ i[0] for i in sqlite.execute('SELECT url FROM uris WHERE %s' % ' OR '.join(query),urls).fetchall() ]
|
||||||
|
time_now = time.time()
|
||||||
|
new = [ (time_now,i,0,5,0) for i in urls if not i in known ]
|
||||||
|
if len(new):
|
||||||
|
sqlite.executemany('INSERT INTO uris (added,url,check_time,error,driver) values(?,?,?,?,?)', new)
|
||||||
|
sqlite.commit()
|
||||||
|
_log('+%d item(s) from %s' % (len(new), search), 'added')
|
||||||
|
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
def proxyleech(sqlite, rows):
|
||||||
|
#print('entering proxyleech...')
|
||||||
|
|
||||||
|
for row in rows:
|
||||||
|
try: content = fetch_contents(row[0], None)
|
||||||
|
except: content = ''
|
||||||
|
|
||||||
|
uniques = []
|
||||||
|
for p in sorted(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', cleanhtml(content))):
|
||||||
|
if p in uniques: continue
|
||||||
|
try:
|
||||||
|
if str(ipcalc.Network(p.split(':')[0]).subnet) != 'PRIVATE': uniques.append(p)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
hash = hashlib.md5(''.join(uniques)).hexdigest()
|
||||||
|
#print('unique; hash: %s, len: %d' % (hash, len(uniques)))
|
||||||
|
|
||||||
|
## empty list of proxies: increment error by two
|
||||||
|
if not len(uniques): row[2] = (row[2] * 2)
|
||||||
|
## same proxy list: increment error by one
|
||||||
|
elif hash == row[1]: row[2] = (row[2] + 1)
|
||||||
|
## proxylist was updated: error is zero
|
||||||
|
else: row[2] = 0
|
||||||
|
|
||||||
|
check_time = (time.time() + 3600 + (3600 * row[2]))
|
||||||
|
sqlite.execute('UPDATE uris SET error=?,hash=?,check_time=? where url=?', (row[2],hash, check_time,row[0]))
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
if not row[1] or row[2] > 0: return
|
||||||
|
|
||||||
|
add = []
|
||||||
|
for i in uniques:
|
||||||
|
add.append(i)
|
||||||
|
if len(add) < 500: continue
|
||||||
|
insert_proxies(add, row[0], sqlite)
|
||||||
|
add = []
|
||||||
|
if len(add): insert_proxies(add, row[0], sqlite)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
## read the config files
|
||||||
|
parser = SafeConfigParser()
|
||||||
|
parser.read(CONFIG)
|
||||||
|
|
||||||
|
database = parser.get('global', 'database')
|
||||||
|
search = parser.getboolean('proxyfind', 'search')
|
||||||
|
|
||||||
|
sqlite = mysqlite.mysqlite(database, str)
|
||||||
|
|
||||||
|
## create dbs if required
|
||||||
|
sqlite.execute('CREATE TABLE IF NOT EXISTS uris (added INT, url TEXT, check_time INT, error INT, driver INT, hash TEXT)')
|
||||||
|
sqlite.execute('CREATE TABLE IF NOT EXISTS proxylist (proxy BLOB, country BLOB, added INT, failed INT, tested INT, dronebl INT, proto TEXT, duration INT)')
|
||||||
|
sqlite.commit()
|
||||||
|
|
||||||
|
import_from_file('import.txt', sqlite)
|
||||||
|
|
||||||
|
## load search terms
|
||||||
|
with open('search_terms.txt', 'r') as f:
|
||||||
|
search_terms = [ i.strip() for i in f.read().split('\n') if len(i.strip()) ]
|
||||||
|
|
||||||
|
## load bad terms
|
||||||
|
with open('urignore.txt', 'r') as f:
|
||||||
|
urignore = [ i.strip() for i in f.read().split('\n') if len(i.strip()) ]
|
||||||
|
## add searx instances as bad terms (avoid loops)
|
||||||
|
empty = [ urignore.append(i.split('/')[2]) for i in searx_instances ]
|
||||||
|
|
||||||
|
# start proxy watcher
|
||||||
|
watcherd = proxywatchd.Proxywatchd(CONFIG) if parser.getboolean('watcherd', 'enabled') else None
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
## any site that needs to be checked ?
|
||||||
|
rows = [ [i[0],i[1],i[2]] for i in sqlite.execute('SELECT url,hash,error FROM uris WHERE (check_time<? AND error<?) ORDER BY RANDOM() LIMIT 25', (time.time(), 10)).fetchall() ]
|
||||||
|
if len(rows): proxyleech(sqlite,rows)
|
||||||
|
## search for new website during free time
|
||||||
|
elif search: proxyfind(sqlite)
|
||||||
|
## sleep
|
||||||
|
else: time.sleep(10)
|
||||||
|
|
||||||
|
except KeyboardInterrupt: break
|
||||||
|
|
||||||
|
print '\r',
|
||||||
|
|
||||||
|
# stop things
|
||||||
|
if watcherd: watcherd.stop()
|
||||||
13
search_terms.txt
Normal file
13
search_terms.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
site:github.com :8081 :8888 :8080
|
||||||
|
site:github.com :4444 :1234 :3124
|
||||||
|
site:github.com proxylist
|
||||||
|
hourly http proxy
|
||||||
|
hourly socks proxy
|
||||||
|
daily http proxy
|
||||||
|
daily socks proxy
|
||||||
|
fresh http proxy list
|
||||||
|
fresh socks proxy list
|
||||||
|
updated http proxy list
|
||||||
|
updated socks proxy list
|
||||||
|
download http proxy
|
||||||
|
download socks proxy
|
||||||
131
servers.txt
Normal file
131
servers.txt
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
chat.freenode.net
|
||||||
|
irc.dal.net
|
||||||
|
irc.Undernet.Org
|
||||||
|
eu.ircnet.org
|
||||||
|
eu.undernet.org
|
||||||
|
irc.2600.net
|
||||||
|
irc.accessirc.net
|
||||||
|
irc.afterx.net
|
||||||
|
irc.asylo.com
|
||||||
|
irc.atheme.org
|
||||||
|
irc.atrum.org
|
||||||
|
irc.atw-inter.net
|
||||||
|
irc.au.dal.net
|
||||||
|
irc.austnet.org
|
||||||
|
irc.azzurra.org
|
||||||
|
irc.blitzed.org
|
||||||
|
irc.bongster.org
|
||||||
|
irc.chat4all.org
|
||||||
|
irc.chatcafe.net
|
||||||
|
irc.chatnet.org
|
||||||
|
irc.chatspike.net
|
||||||
|
irc.chattingaway.com
|
||||||
|
irc.choopa.net
|
||||||
|
irc.coldfront.net
|
||||||
|
irc.cyanide-x.net
|
||||||
|
irc.cyberarmy.net
|
||||||
|
irc.darkmyst.org
|
||||||
|
irc.data.lt
|
||||||
|
irc.deepirc.net
|
||||||
|
irc.deepspace.org
|
||||||
|
irc.drlnet.com
|
||||||
|
irc.d-t-net.de
|
||||||
|
irc.dynastynet.net
|
||||||
|
irc.ecnet.org
|
||||||
|
irc.efnet.org
|
||||||
|
irc.efnet.pl
|
||||||
|
irc.enterthegame.com
|
||||||
|
irc.esper.net
|
||||||
|
irc.eu.dal.net
|
||||||
|
irc.eu.gamesurge.net
|
||||||
|
irc.euirc.net
|
||||||
|
irc.europnet.org
|
||||||
|
irc.eversible.com
|
||||||
|
irc.fdfnet.net
|
||||||
|
irc.fef.net
|
||||||
|
irc.financialchat.com
|
||||||
|
irc.foonetic.net
|
||||||
|
irc.forestnet.org
|
||||||
|
irc.foreverchat.net
|
||||||
|
irc.freequest.net
|
||||||
|
irc.gamesurge.net
|
||||||
|
irc.geekshed.net
|
||||||
|
irc.german-freakz.net
|
||||||
|
irc.gigairc.net
|
||||||
|
irc.globalchat.org
|
||||||
|
irc.globalgamers.net
|
||||||
|
irc.greekirc.net
|
||||||
|
irc.icq.com
|
||||||
|
irc.immortal-anime.net
|
||||||
|
irc.imperium.ca
|
||||||
|
irc.inet.tele.dk
|
||||||
|
irc.irc2.hu
|
||||||
|
irc.irc4fun.net
|
||||||
|
irc.irchighway.net
|
||||||
|
irc.ircsource.net
|
||||||
|
irc.irctoo.net
|
||||||
|
irc.ircube.org
|
||||||
|
irc.ircworld.nl
|
||||||
|
irc.irdsi.net
|
||||||
|
irc.kampungchat.org
|
||||||
|
irc.kickchat.com
|
||||||
|
irc.knightirc.net
|
||||||
|
irc.krono.net
|
||||||
|
irc.landoleet.org
|
||||||
|
irc.langochat.net
|
||||||
|
irc.lichtsnel.nl
|
||||||
|
irc.maddshark.net
|
||||||
|
irc.matrix-network.org
|
||||||
|
irc.mmoirc.com
|
||||||
|
irc.mozilla.org
|
||||||
|
irc.mugglenet.com
|
||||||
|
irc.netgamers.org
|
||||||
|
irc.newnet.net
|
||||||
|
irc.nightstar.net
|
||||||
|
irc.oftc.net
|
||||||
|
irc.onlinegamesnet.net
|
||||||
|
irc.othernet.org
|
||||||
|
irc.otherworlders.org
|
||||||
|
irc.oz.org
|
||||||
|
irc.p2pchat.net
|
||||||
|
irc.phat-net.de
|
||||||
|
irc.ptnet.org
|
||||||
|
irc.rezosup.org
|
||||||
|
irc.rizon.net
|
||||||
|
irc.scarynet.org
|
||||||
|
irc.seersirc.net
|
||||||
|
irc.serenia.net
|
||||||
|
irc.serenity-irc.net
|
||||||
|
irc.servercentral.net
|
||||||
|
irc.shadowfire.org
|
||||||
|
irc.shadowworld.net
|
||||||
|
irc.simosnap.net
|
||||||
|
irc.slacked.org
|
||||||
|
irc.slashnet.org
|
||||||
|
irc.snt.utwente.nl
|
||||||
|
irc.solidirc.com
|
||||||
|
irc.sorcery.net
|
||||||
|
irc.spacetronix.net
|
||||||
|
irc.starchat.net
|
||||||
|
irc.starlink-irc.org
|
||||||
|
irc.starlink.org
|
||||||
|
irc.staynet.org
|
||||||
|
irc.st-city.net
|
||||||
|
irc.stratics.com
|
||||||
|
irc.swiftirc.net
|
||||||
|
irc.teksavvy.ca
|
||||||
|
irc.teranova.net
|
||||||
|
irc.umich.edu
|
||||||
|
irc.us.dal.net
|
||||||
|
irc.us.gamesurge.net
|
||||||
|
irc.utonet.org
|
||||||
|
irc.webchat.org
|
||||||
|
irc.whatnet.org
|
||||||
|
irc.wikkedwire.com
|
||||||
|
irc.wondernet.nu
|
||||||
|
irc.worldnet.net
|
||||||
|
irc.xevion.net
|
||||||
|
irc.xs4all.nl
|
||||||
|
irc.zerofuzion.net
|
||||||
|
uk.quakenet.org
|
||||||
|
us.quakenet.org
|
||||||
36
soup_parser.py
Normal file
36
soup_parser.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
from bs4 import BeautifulSoup, SoupStrainer, FeatureNotFound
|
||||||
|
import sys
|
||||||
|
#import gumbo
|
||||||
|
|
||||||
|
parser = 'lxml'
|
||||||
|
def soupify_bs4(html, nohtml=False):
|
||||||
|
global parser
|
||||||
|
parser = 'html.parser'
|
||||||
|
htm = html if nohtml else '<html><body>%s</body></html>'%(html)
|
||||||
|
try:
|
||||||
|
res = BeautifulSoup(htm, parser)
|
||||||
|
except FeatureNotFound as e:
|
||||||
|
parser = 'html.parser'
|
||||||
|
res = BeautifulSoup(htm, parser)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def soupify_gumbo(html, nohtml=False):
|
||||||
|
htm = html if nohtml else '<html><body>%s</body></html>'%(html)
|
||||||
|
try:
|
||||||
|
soup = gumbo.soup_parse(htm)
|
||||||
|
if not soup.body:
|
||||||
|
print "AAAA"
|
||||||
|
print html
|
||||||
|
print "BBBB"
|
||||||
|
print repr(soup)
|
||||||
|
return soup
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
sys.stdout.write(html)
|
||||||
|
raise
|
||||||
|
|
||||||
|
def soupify(html, nohtml=False):
|
||||||
|
# return soupify_gumbo(html, nohtml)
|
||||||
|
return soupify_bs4(html, nohtml)
|
||||||
|
|
||||||
|
|
||||||
41
striphtml.py
Normal file
41
striphtml.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from HTMLParser import HTMLParser
|
||||||
|
import requests
|
||||||
|
import re
|
||||||
|
from selenium.webdriver.common.proxy import *
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
phantomjs_path = '/home/mickael/bin/phantomjs'
|
||||||
|
def cleanhtml(raw_html):
|
||||||
|
cleanr = re.compile('<.*?>')
|
||||||
|
cleantext = re.sub(cleanr, ':', raw_html)
|
||||||
|
cleantext = re.sub('::+',':', cleantext)
|
||||||
|
return cleantext
|
||||||
|
|
||||||
|
class MLStripper(HTMLParser):
|
||||||
|
def __init__(self):
|
||||||
|
self.reset()
|
||||||
|
self.fed = []
|
||||||
|
def handle_data(self, d):
|
||||||
|
self.fed.append(d)
|
||||||
|
def get_data(self):
|
||||||
|
return ''.join(self.fed)
|
||||||
|
|
||||||
|
def strip_tags(html):
|
||||||
|
s = MLStripper()
|
||||||
|
s.feed(html)
|
||||||
|
return s.get_data()
|
||||||
|
|
||||||
|
service_args = ['--proxy=127.0.0.1:9050', '--proxy-type=socks5']
|
||||||
|
driver = webdriver.PhantomJS(phantomjs_path,service_args=service_args)
|
||||||
|
try: driver.get('http://www.proxz.com/proxy_list_fr_1_ext.html')
|
||||||
|
except: sys.exit(0)
|
||||||
|
html = driver.page_source
|
||||||
|
driver.quit()
|
||||||
|
|
||||||
|
text = cleanhtml(html)
|
||||||
|
proxies = sorted(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', text))
|
||||||
|
|
||||||
|
print(text)
|
||||||
|
print(proxies)
|
||||||
19
urignore.txt
Normal file
19
urignore.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
check-reverse-domain-ip-lookup
|
||||||
|
www.youtube.com
|
||||||
|
youtu.be
|
||||||
|
archive
|
||||||
|
.gov[$/]
|
||||||
|
/blog/
|
||||||
|
/questions/
|
||||||
|
/question/
|
||||||
|
wiki
|
||||||
|
answer
|
||||||
|
thread
|
||||||
|
/robots.txt
|
||||||
|
form
|
||||||
|
webproxy
|
||||||
|
check?i=
|
||||||
|
[0-9]+(?:\.[0-9]+){3}
|
||||||
|
README.md
|
||||||
|
support
|
||||||
|
aspx?p=
|
||||||
Reference in New Issue
Block a user