-
Notifications
You must be signed in to change notification settings - Fork 0
/
autologin_bot.py
88 lines (67 loc) · 2.55 KB
/
autologin_bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from mechanize import Browser
from http.cookiejar import CookieJar
from subprocess import call
from time import sleep
from sys import argv
from random import choice
from random import random
# functions defined here
# ping uses the shell command "ping" to ping the given hostname
def ping(hostname,params):
command = ['ping'] + params + [hostname]
return call(command) == 0
# extract_credentials extracts the credentials in the given password_file into a dictionary containing the url,login, and password
def extract_credentials(password_file):
with open(password_file) as file:
text = file.readlines()
credentials = {}
for line in text:
words = line.split()
if words[0] == 'url:':
credentials['url'] = words[1]
elif words[0] == 'login:':
credentials['login'] = words[1]
elif words[0] == 'password:':
credentials['password'] = words[1]
return credentials
# login takes the credentials dictionary built by extract_credentials and performs the login
def login(credentials,random_delay):
try:
cj = CookieJar()
br = Browser()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.set_handle_redirect(True)
br.open(credentials['url'])
# entering login
br.select_form(nr=0)
br.form['login'] = credentials['login']
br.form['password'] = credentials['password']
br.submit()
# confirming again if there is a redirect
br.open(br.response().geturl())
br.select_form(nr=0)
br.submit()
print('logged in')
except:
# print('failed login, retrying after delay period of about: ' + str(int(random_delay)) + ' seconds')
pass
# starting the process
# giving the login file via command line "python autologin_bot.py credential_file.txt"
credential_file = argv[1]
# if the desired delay is given in the command line (must be after the credential_file.txt), this reads it in, otherwise the pause between internet pings is 5 min
if len(argv) < 3:
delay = 300
else:
delay = int(argv[2])
credentials = extract_credentials(credential_file)
# the actual process loop
while True:
random_delay = random()*delay
domains = ['4.2.2.2','4.2.2.1','8.8.8.8','google.com','gmail.com']
if ping(choice(domains),['-c','1']):
print('sleeping between internet pings for about: ' + str(int(random_delay)) + ' seconds')
sleep(random_delay)
else:
login(credentials,random_delay)
# sleep(random_delay)