Skip to content

Instantly share code, notes, and snippets.

@LaBlazer
Last active October 1, 2018 10:59
Show Gist options
  • Save LaBlazer/06ae125f7ab943fadbfc7698b3e33638 to your computer and use it in GitHub Desktop.
Save LaBlazer/06ae125f7ab943fadbfc7698b3e33638 to your computer and use it in GitHub Desktop.
Vote bot for miniaplikace.blueboard.cz
import http.client, time, re, random, logging, sys, requests, threading, asyncio
from proxybroker import Broker
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
from random import randint
##Made by @LBLZR_
##Released under do What The Fuck you want to Public License
##http://www.wtfpl.net/txt/copying/
## Setup ##
URL = "http://miniaplikace.blueboard.cz"
ANKETA = "1011185"
MOZNOST = "22965948"
KODOVANIE = "windows-1250"
LOGLEVEL = logging.INFO
LOGFILE = "logger.log"
SUCCESSTIMEOUT = 4
PROXYCOUNT = 350
PROXYTIMEOUT = 10
PROXYRETRIES = 2
#############
TOKEN_REGEX = re.compile(r'hlasuj_' + ANKETA + r'\(' + MOZNOST + r', \\\'(.*?)\\\'\);return false;')
counter = 0
proxyList = []
##list of random user agents
userAgents = ["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A",
"Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1.1; SHIELD Tablet Build/LMY48C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Safari/537.36",
"Mozilla/5.0 (CrKey armv7l 1.5.16041) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36",
"Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16", "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
"Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
"Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
"Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",
"Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00",
"Opera/12.0 (Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00",
"Opera/12.0 (Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00",
"Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0",
"Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62",
"Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0",
"Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0"]
logging.basicConfig(format='[%(asctime)s]\t[%(levelname)s] %(message)s', datefmt='%d/%m/%Y %H:%M:%S', level=LOGLEVEL, filename=LOGFILE)
logging.getLogger().addHandler(logging.StreamHandler())
proxies = asyncio.Queue()
broker = Broker(proxies)
s = requests.Session()
retries = Retry(total=PROXYRETRIES,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.mount('https://', HTTPAdapter(max_retries=retries))
logging.info("Zapinam hlasovacieho bota...")
##temp
logging.getLogger("urllib3").setLevel(logging.ERROR)
def work(proxy, pollid, choiceid, header):
finished = False;
while not finished:
finished = True;
try:
payload = {"id": ANKETA, "charset": KODOVANIE, "thank": "undefined", "rand": str(random.random())}
r = s.get(URL + '/anketa_1.php', params=payload, proxies=proxy, headers=header, timeout=PROXYTIMEOUT)
logging.debug("Response: " + str(r.status_code))
if r.status_code == 200:
r.encoding = KODOVANIE
data = r.text
logging.debug("Response data: " + data[:300] + "....")
match = TOKEN_REGEX.search(data)
if match:
logging.debug("Regexp vysledok: " + str(match))
token = match.group(1)
logging.debug("Token: " + token + " Anketa: " + ANKETA + " Moznost: " + MOZNOST)
logging.info("Token najdeny, odosielam hlas..")
payload = {"id": ANKETA, "r1" : MOZNOST, "charset": KODOVANIE, "hash": token }
h = s.get(URL + '/anketa_1.php', params=payload, proxies=proxy, headers=header, timeout=PROXYTIMEOUT)
if h.status_code == 200:
global counter
counter += 1
logging.info("Hlas %d uspesne odoslany..", counter)
logging.debug("Return data: " + h.text[:100])
time.sleep(SUCCESSTIMEOUT)
else:
logging.warning("Token nenajdeny, prechadzam na ine proxy.. (Data: %s...)", data[:150])
elif "var update = setTimeout" in data: #sleep 6 seconds if
logging.warning("Token nenajdeny, cakam 6 sekund..")
finished = False;
time.sleep(6)
else:
r = re.compile(r'alert\(\\\'(.*?)\\\'\);')
match = r.search(data)
if match:
logging.warning("Token nenajdeny: " + match.group(1) + " ,prechadzam na ine proxy..")
else:
logging.warning("Token nenajdeny, prechadzam na ine proxy.. (Data: %s...)", data[:150])
else:
logging.error("Error response: " + str(r.status_code))
except requests.exceptions.RequestException as e:
logging.error("Chyba pri requeste, pravdepodobne zle proxy...")
logging.debug(e)
async def addProxy(proxies):
while True:
proxy = await proxies.get()
if proxy is None: break
global proxyList
proxyList.append(proxy)
print('Najdene proxy: %s' % proxy)
logging.info("Vyberam %d proxy", PROXYCOUNT)
tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS'], limit=PROXYCOUNT), addProxy(proxies))
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(tasks)
except Exception as e:
logging.error(e)
time.sleep(10)
proxies = asyncio.Queue()
broker = Broker(proxies)
logging.info("Uspesne, zahajujem rokfortske hlasovanie..")
time.sleep(5)
while(True):
#proxyList = []
for p in proxyList:
#convert types as HTTP to lowercase http
types = {k.lower():v for k,v in p.types.items()}
#use https as default
ptype = 'https' if 'https' in types else 'http'
if types[ptype] == "Transparent":
logging.info("Proxy je transparentne, vymazavam a preskakujem..")
proxyList.remove(p)
continue
logging.info("Pouzivam proxy: %s:%s, Typ: %s, Anonymita: %s, Krajna: %s", p.host, p.port, ptype.upper(), types[ptype], p._geo.code)
pr = {ptype: '%s://%s:%d' % (ptype, p.host, p.port)}
logging.debug("Vyberam header..")
header = {'User-Agent' : userAgents[randint(0,len(userAgents)-1)]}
logging.info("Hlasujem..")
work(pr, ANKETA, MOZNOST, header)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment