Updated mirrors and LICENSE

This commit is contained in:
Dionysus 2024-01-20 20:35:25 -05:00
parent d8596dd59f
commit 9b80d6a73b
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
3 changed files with 39 additions and 20 deletions

View File

@ -1,6 +1,6 @@
ISC License ISC License
Copyright (c) 2023, acidvegas <acid.vegas@acid.vegas> Copyright (c) 2024, acidvegas <acid.vegas@acid.vegas>
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above purpose with or without fee is hereby granted, provided that the above

View File

@ -16,7 +16,19 @@ The bot is designed to be very minimal, secure, & trustless by nature. This mean
It is highly recommended that you use a [random spoofing ident protocol daemon](https://github.com/internet-relay-chat/archive/blob/master/identd.py) It is highly recommended that you use a [random spoofing ident protocol daemon](https://github.com/internet-relay-chat/archive/blob/master/identd.py)
## Commands ## Requirements
- [Python](https://python.org/)
- [aiosocks](https:///pypi.org/aiosocks) *(`pip install aiosocks`)*
## Usage
###### CLI Options
| Argument | Description |
| ----------------- | ---------------------------------------- |
| `-p`, `--proxies` | set input file containing proxies to use |
| `-v`, `--vhosts` | set input file containin vhosts to use |
| `-c`, `--clones` | set the concurrency limit per-server |
###### Commands
| Command | Description | | Command | Description |
| ---------------------- | ---------------------------------------------------------------------------------------------------------- | | ---------------------- | ---------------------------------------------------------------------------------------------------------- |
| `5000 <chan>` | Emulates SuperNETs #5000 channel *(Join #5000 on irc.supernets.org for help using this command)* | | `5000 <chan>` | Emulates SuperNETs #5000 channel *(Join #5000 on irc.supernets.org for help using this command)* |
@ -75,5 +87,4 @@ This is an accurate map of the [EFNet](http://efnet.org) IRC network as of *05/1
___ ___
###### Mirrors ###### Mirrors for this repository: [acid.vegas](https://git.acid.vegas/jupiter) • [SuperNETs](https://git.supernets.org/acidvegas/jupiter) • [GitHub](https://github.com/acidvegas/jupiter) • [GitLab](https://gitlab.com/acidvegas/jupiter) • [Codeberg](https://codeberg.org/acidvegas/jupiter)
[acid.vegas](https://git.acid.vegas/jupiter) • [GitHub](https://github.com/acidvegas/jupiter) • [GitLab](https://gitlab.com/acidvegas/jupiter) • [SuperNETs](https://git.supernets.org/acidvegas/jupiter)

View File

@ -11,7 +11,6 @@ import random
import re import re
import socket import socket
import ssl import ssl
import sys
import time import time
try: try:
@ -25,7 +24,7 @@ servers = (
{'server':'efnet.port80.se', 'ssl':6697, 'ipv6': True}, {'server':'efnet.port80.se', 'ssl':6697, 'ipv6': True},
#{'server':'efnet.portlane.se', 'ssl':6697, 'ipv6': True}, # Removed (efnet.portlane.se is an alias for irc.efnet.org) #{'server':'efnet.portlane.se', 'ssl':6697, 'ipv6': True}, # Removed (efnet.portlane.se is an alias for irc.efnet.org)
{'server':'irc.choopa.net', 'ssl':9000, 'ipv6': True}, {'server':'irc.choopa.net', 'ssl':9000, 'ipv6': True},
{'server':'irc.colosolutions.net', 'ssl':None, 'ipv6':False}, # error: SSL handshake failed: unsafe legacy renegotiation disabled # {'server':'irc.colosolutions.net', 'ssl':None, 'ipv6':False}, # error: SSL handshake failed: unsafe legacy renegotiation disabled
#{'server':'irc.deft.com', 'ssl':None, 'ipv6':False}, # Removed (irc.deft.com points to irc.servercentral.net) #{'server':'irc.deft.com', 'ssl':None, 'ipv6':False}, # Removed (irc.deft.com points to irc.servercentral.net)
{'server':'irc.du.se', 'ssl':None, 'ipv6':False}, # error: handshake failed: dh key too small {'server':'irc.du.se', 'ssl':None, 'ipv6':False}, # error: handshake failed: dh key too small
#{'server':'irc.efnet.fr', 'ssl':6697, 'ipv6': True}, # Removed (irc.efnet.fr is an alias for irc.efnet.nl) #{'server':'irc.efnet.fr', 'ssl':6697, 'ipv6': True}, # Removed (irc.efnet.fr is an alias for irc.efnet.nl)
@ -33,19 +32,19 @@ servers = (
{'server':'irc.homelien.no', 'ssl':6697, 'ipv6': True}, {'server':'irc.homelien.no', 'ssl':6697, 'ipv6': True},
{'server':'irc.mzima.net', 'ssl':6697, 'ipv6': True}, {'server':'irc.mzima.net', 'ssl':6697, 'ipv6': True},
#{'server':'irc.nordunet.se', 'ssl':6697, 'ipv6': True}, # Removed (irc.nordunet.se is an alias for irc.swepipe.se) #{'server':'irc.nordunet.se', 'ssl':6697, 'ipv6': True}, # Removed (irc.nordunet.se is an alias for irc.swepipe.se)
{'server':'irc.prison.net', 'ssl':None, 'ipv6':False}, # {'server':'irc.prison.net', 'ssl':None, 'ipv6':False},
{'server':'irc.swepipe.se', 'ssl':6697, 'ipv6': True}, {'server':'irc.swepipe.se', 'ssl':6697, 'ipv6': True},
{'server':'irc.underworld.no', 'ssl':6697, 'ipv6': True}, {'server':'irc.underworld.no', 'ssl':6697, 'ipv6': True},
{'server':'irc.servercentral.net', 'ssl':9999, 'ipv6':False} {'server':'irc.servercentral.net', 'ssl':9999, 'ipv6':False}
) )
ipv6 = True # Set to False if your system does not have an IPv6 address ipv6 = False #True # Set to False if your system does not have an IPv6 address
channel = '#jupiter' channel = '#jupiter2'
backup = '#jupiter-' + str(random.randint(1000,9999)) # Use /list -re #jupiter-* on weechat to find your bots backup = '#jupiter2-' + str(random.randint(1000,9999)) # Use /list -re #jupiter-* on weechat to find your bots
key = 'xChangeMex' key = 'xChangeMex'
# Settings # Settings
admin = 'nick!user@host' # Can use wildcards (Must be in nick!user@host format) admin = 'acidvegas!*@*' #'nick!user@host' # Can use wildcards (Must be in nick!user@host format)
connect_delay = True # Random delay between 5-15 minutes before connecting a clone to a server connect_delay = False #True # Random delay between 5-15 minutes before connecting a clone to a server
id = 'TEST' # Unique ID so you can tell which bots belong what server id = 'TEST' # Unique ID so you can tell which bots belong what server
# Formatting Control Characters / Color Codes # Formatting Control Characters / Color Codes
@ -135,8 +134,9 @@ class clone():
while True: while True:
try: try:
if connect_delay: if connect_delay:
await asyncio.sleep(random.randint(300,900)) await asyncio.sleep(random.randint(30,120))
if self.proxy: if self.proxy:
self.ssl_status = False
auth = self.proxy.split('@')[0].split(':') if '@' in self.proxy else None auth = self.proxy.split('@')[0].split(':') if '@' in self.proxy else None
proxy_ip, proxy_port = self.proxy.split('@')[1].split(':') if '@' in self.proxy else self.proxy.split(':') proxy_ip, proxy_port = self.proxy.split('@')[1].split(':') if '@' in self.proxy else self.proxy.split(':')
options = { options = {
@ -147,7 +147,7 @@ class clone():
'ssl' : ssl_ctx() if self.server['ssl'] and self.ssl_status else None, 'ssl' : ssl_ctx() if self.server['ssl'] and self.ssl_status else None,
'family' : 2 'family' : 2
} }
self.reader, self.writer = await asyncio.wait_for(aiosocks.open_connection(**options), 15) self.reader, self.writer = await asyncio.wait_for(aiosocks.open_connection(**options), 30)
else: else:
options = { options = {
'host' : self.server['server'], 'host' : self.server['server'],
@ -157,13 +157,14 @@ class clone():
'family' : socket.AF_INET6 if self.use_ipv6 else socket.AF_INET, 'family' : socket.AF_INET6 if self.use_ipv6 else socket.AF_INET,
'local_addr' : (self.vhost, random.randint(5000,60000)) if self.vhost else None 'local_addr' : (self.vhost, random.randint(5000,60000)) if self.vhost else None
} }
self.reader, self.writer = await asyncio.wait_for(asyncio.open_connection(**options), 15) self.reader, self.writer = await asyncio.wait_for(asyncio.open_connection(**options), 30)
await self.raw(f'USER {rndnick()} 0 * :{rndnick()}') await self.raw(f'USER {rndnick()} 0 * :{rndnick()}')
await self.raw('NICK ' + self.nickname) await self.raw('NICK ' + self.nickname)
except Exception as ex: except Exception as ex:
v6 = 'using IPv6 ' if self.use_ipv6 else '' v6 = 'using IPv6 ' if self.use_ipv6 else ''
if self.ssl_status and self.server['ssl']: if self.ssl_status and self.server['ssl']:
self.ssl_status = False self.ssl_status = False
print(options)
error('Failed to connect to \'{0}\' IRC server {1}on port {2} using SSL/TLS'.format(self.server['server'], v6, str(self.server['ssl'])), ex) error('Failed to connect to \'{0}\' IRC server {1}on port {2} using SSL/TLS'.format(self.server['server'], v6, str(self.server['ssl'])), ex)
else: else:
if not self.ssl_status and self.server['ssl']: if not self.ssl_status and self.server['ssl']:
@ -172,7 +173,7 @@ class clone():
else: else:
await self.listen() await self.listen()
finally: finally:
await asyncio.sleep(86400+random.randint(1800,3600)) await asyncio.sleep(10) #await asyncio.sleep(86400+random.randint(1800,3600))
async def event_message(self, ident, nick, target, msg): async def event_message(self, ident, nick, target, msg):
if target == self.relay: if target == self.relay:
@ -281,6 +282,7 @@ class clone():
line = data.decode('utf-8').strip() line = data.decode('utf-8').strip()
args = line.split() args = line.split()
if line.startswith('ERROR :Closing Link:'): if line.startswith('ERROR :Closing Link:'):
print(line)
raise Exception('Banned') raise Exception('Banned')
elif line.startswith('ERROR :Reconnecting too fast'): elif line.startswith('ERROR :Reconnecting too fast'):
raise Exception('Throttled') raise Exception('Throttled')
@ -424,6 +426,7 @@ async def main(input_data=None):
jobs.append(asyncio.ensure_future(clone(server, vhost=item, use_ipv6=True).connect())) jobs.append(asyncio.ensure_future(clone(server, vhost=item, use_ipv6=True).connect()))
else: else:
jobs.append(asyncio.ensure_future(clone(server, vhost=item).connect())) jobs.append(asyncio.ensure_future(clone(server, vhost=item).connect()))
else: else:
jobs.append(asyncio.ensure_future(clone(server).connect())) jobs.append(asyncio.ensure_future(clone(server).connect()))
if ipv6 and server['ipv6']: if ipv6 and server['ipv6']:
@ -444,11 +447,16 @@ if __name__ == '__main__':
parser.add_argument('-v', '--vhosts', type=str, help="Path to file containing vhosts.") parser.add_argument('-v', '--vhosts', type=str, help="Path to file containing vhosts.")
parser.add_argument('-c', '--clones', type=int, default=3, help="Number to define the concurrency to use. Default is 3.") parser.add_argument('-c', '--clones', type=int, default=3, help="Number to define the concurrency to use. Default is 3.")
args = parser.parse_args() args = parser.parse_args()
if (input_file := args.proxies if args.proxies else args.vhosts if args.vhosts else None): if args.proxies and args.vhosts:
raise SystemExit('Cannot use both proxies & vhosts at the same time!')
elif (input_file := args.proxies if args.proxies else args.vhosts if args.vhosts else None):
if os.path.exists(input_file): if os.path.exists(input_file):
data = open(input_file, 'r').read().split('\n') data = set([item.rstrip() for item in open(input_file, 'r').read().splitlines() if item])
if data:
print('Loaded {0:,} items from {1}'.format(len(data), input_file)) print('Loaded {0:,} items from {1}'.format(len(data), input_file))
asyncio.run(main(data)) asyncio.run(main(data))
else:
raise SystemExit(f'Error: {input_file} is empty!')
else: else:
raise SystemExit(f'Error: {input_file} does not exist!') raise SystemExit(f'Error: {input_file} does not exist!')
else: else: