You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

290 lines
10 KiB

""" Import profiles from accsmarket """
from os import chdir
from getpass import getpass
from os.path import abspath, dirname
from random import randint
from time import sleep
import base64
import json
import requests
# Gör fb-scraper till arbetsmapp
chdir(dirname(dirname(abspath(__file__))))
from arangodb import arango_connect
import config
from helpers import now, nowstamp
def mullvad_servers_to_db(db):
""" Läser fil med servarar och exporterar till db. Används bara om servarna skulle uppdateras hos Mullvad. """
with open("data/servers.txt") as f:
for line in f.readlines():
if "@" in line:
line = line.strip()
city = line[: line.find("@")].strip()
if ("WireGuard" in line): # "au", "ca" #För senare när det behövs
line = line.strip()
country_short = line[:2]
server_id = line[: line.find("-")]
# Kolla så att servern inte redan används av profil i databasen
# eller finns i listan som skapas nu.
city_short = city[city.find("(") + 1 : city.find(")")]
server_name = [country_short, city_short, server_id + "-wireguard"]
server = {
'_key': server_id,
'country': country_short,
"city": city,
"id": server_id,
"server": server_id + "-wg.socks5.mullvad.net:1080",
"server_connect": server_name,}
db.insert_document('servers', server)
sleep(0.1)
def servers_to_db(db, server_collection, socks='socks5'):
""" Läser fil med servarar och exporterar till db. """
with open("socks5free.csv") as f:
for line in f.readlines():
server = line.split(';')[1]
db.insert_document(server_collection, {'_key':server, 'proxies': {"https": f"{socks}://{server}",
"http": f"{socks}://{server}"}, 'country': False})
sleep(0.1)
def used_emails(db, collection):
cursor = db.aql.execute(
"""
FOR doc IN @@col
RETURN doc.email
""",
bind_vars={'@col': collection})
return [email for email in cursor]
def get_server(db, country, test=False, servers='servers', profiles='profiles'):
""" Hämtar en server åt profilen """
if country == 'any':
cursor = db.aql.execute(
"""
FOR doc IN @@col
FILTER doc.country not in ['us', 'se']
RETURN {proxies: doc.proxies, country: doc.country, id: doc.id, _key:doc._key, city:doc.city, server:doc.server, server_connect:doc.server_connect}
""", bind_vars={'@col': servers})
else:
cursor = db.aql.execute(
"""
FOR doc IN @@servers
FILTER doc.country == @country
RETURN {proxies: doc.proxies, country: doc.country, id: doc.id, _key:doc._key, city:doc.city, server:doc.server, server_connect:doc.server_connect}
""",
bind_vars={'country': country, '@servers': servers}
)
servers = []
used = used_servers(test, profiles)
for server in cursor:
if server['_key'] not in used:
servers.append(server)
if servers != []:
server = servers[randint(0, len(servers)-1)]
return server
def to_accs(db, vendors, accs, profiles):
"""
Ta profiles från köpt fil och lägg i accs
"""
file = input('Lägg filen här ').strip("'").strip()
vendor = str(file[file.rfind('-')+1:file.rfind('.')])
sep = vendors[vendor]['sep']
info = vendors[vendor]['info'].split(':')
used_accs = used_emails(db, accs)
used_profiles = used_emails(db, profiles)
with open(file) as f:
for line in f:
line = line.replace("https:", "https;")
l = line.split(sep)
# c = 0
# for i in l:
# c += 1
# print(c)
# print(i)
# print()
doc = {}
doc["vendor"] = vendor
doc["created"] = now()
if 'email' in info:
doc['email'] = l[info.index('email')]
elif 'login' in info:
doc['email'] = l[info.index('login')]
if doc['email'] in used_accs or doc['email'] in used_profiles:
continue
doc['name'] = doc['email']
if 'pwd' in info:
doc["pwd"] = l[info.index('pwd')]
else:
doc["pwd"] = ''
if 'url' in info:
doc['id'] = l[info.index('url')].replace("https;", "https:")
if "useragent" in info:
doc["useragent"] = l[info.index('useragent')].strip()
else:
doc["useragent"] = config.user_agent
if 'cookie' in info:
cookies = l[info.index('cookie')]
if 'c_user=' in cookies:
cookie = {}
for c in cookies.split(';'):
cookie[c[:c.find('=')].strip()] = c[c.find('=') + 1:].strip()
else:
cookies_base64 = cookies.strip()#.strip('=')
# print()
# print(cookies_base64)
# print()
cookies64_bytes = cookies_base64.encode("ascii")
cookies_bytes = base64.b64decode(cookies64_bytes)
#exit()
cookies_str = (
cookies_bytes.decode("ascii")
.replace("'", '"')
.replace("False", "false")
.replace("True", "true")
)
cookies = json.loads(cookies_str)
cookie = {}
if vendor == '159':
for c in cookies['cookies']:
cookie[c['name']] = c['value']
else:
for c in cookies:
name = c["name"]
del c["name"]
cookie[name] = c["value"]
doc['cookie'] = cookie
else:
cookie = {}
if 'birthday' in info:
doc["birthday"] = l[info.index('birthday')]
if 'token' in info:
doc['token'] = l[info.index('token')].strip()
db.insert_document(accs, doc)
sleep(0.1)
def to_profiles(db, test, accs='accs', profiles='profiles', country='us', servers='servers'):
""" Tar en prifil från accs och en server från servers och lägger in i profiles """
count = 0
for profile in [i for i in db.collection(accs).all()]:
count +=1
if profile['email'] in used_emails(db, profiles):
continue
id_acc = profile['_id']
del profile['_id']
del profile['_rev']
server = get_server(db, country, test, servers, profiles)
if server == None:
print(f'Inlagda profiler: {count}\nInga fler lediga servrar.')
break
profile["server"] = server["server"]
profile["server_connect"] = server["server_connect"]
profile["_key"] = server["_key"]#.replace(':', '')
profile["in_use"] = nowstamp()
profile['proxies'] = server['proxies']
if test:
profile["in_use"] = nowstamp() - 1200
db.insert_document(profiles, profile)
sleep(0.1)
db.delete_document(id_acc)
print('Inlagda profiler:', count, end='\r')
def used_servers(test=False, profiles='profiles'):
cursor = db.aql.execute(
"""
FOR doc IN @@col
RETURN doc._key
""",
bind_vars={'@col': profiles}
)
servers = [doc for doc in cursor]
return servers
def webshare_proxies():
"""Get list of webshare-proxies."""
proxielist = requests.get('https://proxy.webshare.io/proxy/list/download/sompzungcbajbeqmxoopddsthzarqlewjgraicog/-/http/port/direct/')
proxies = {}
count = 0
for line in proxielist.text.split('\n'):
count += 1
proxie = line.replace('\r', '').split(':')
if proxie != ['']:
server = proxie[0]
port = proxie[1]
proxies[count] = {'server': server, 'port': port}
for _, proxie in proxies.items():
proxies={'https':'socks5://xigpxrzr:ezgjcwr8lonj@{server}:{port}'.format(server=proxie['server'], port=proxie['port']),
'http':'socks5://xigpxrzr:ezgjcwr8lonj@{server}:{port}'.format(server=proxie['server'], port=proxie['port'])
}
try:
db.insert_document('servers_webshare', {'_key':proxie['server'], 'proxies': proxies, 'country': 'us'})
except:
pass
if __name__ == "__main__":
vendors = {
'1152': {'info': 'login:password:cookie:token', 'sep': '|'},
'1091': {'info': 'login:password:birthday:url:cookie', 'sep': ':'},
'1113': {'info': 'login:password:mail:password:birthday:country:useragent:token:cookie', 'sep': '|'},
'926': {'info': 'login:password:email:email password:birthday:token:cookie', 'sep': '|'} ,
#'1113': {'info': 'login:mail:password:emailpassword:birthday:useragent:token:cookie', 'sep': '|'},
'159': {'info': 'login:password:birthday:id:cookie', 'sep':':'}
}
# Det här ska köras lokalt så löseordet finns i fil
try:
with open("password_arango.txt") as f:
pwd = f.readline()
except:
pwd = getpass('Lösenord för Accs: ').strip()
db = arango_connect(pwd, username='Accs')
§
###############################
### Variabler att ställa in ###
country='us'
test = False
profiles = 'profiles_webshare' # ex profiles_free
servers = 'servers_webshare'
###############################
accs = 'accs'
if test:
profiles='profiles_test'
accs='accs_test'
#to_accs(db, vendors, accs=accs, profiles=profiles) ## Den här för att lägga in nyköpta profiler
#webshare_proxies() ## Den här för att uppdatera servers hos webshare
# Kombinera köpt profil med server och lägg i profiles
to_profiles(db, test, accs=accs, profiles=profiles, country=country, servers=servers)