-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpia_port_requests.py
54 lines (41 loc) · 1.41 KB
/
pia_port_requests.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
''' PIA port request module using the requests python module '''
import random
import socket
import string
import requests
PIA_SERVER = 'www.privateinternetaccess.com'
def get_active_local_ip():
''' Get active local IP '''
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
tcp_socket.connect((PIA_SERVER, 0))
return tcp_socket.getsockname()[0]
finally:
tcp_socket.close()
def generate_client_id():
''' Generate client ID '''
return ''.join(random.choice(string.hexdigits) for char in xrange(32)).lower()
def acquire_port(user_name, password, client_id, local_ip, log):
''' Send http request to retrieve listening port '''
# Set up parameters
values = {'user': user_name,
'pass': password,
'client_id': client_id,
'local_ip': local_ip}
# Send request
try:
response = requests.post(
'https://' + PIA_SERVER + '/vpninfo/port_forward_assignment', params=values)
except requests.exceptions.RequestException as request_exception:
log(request_exception.message)
return
# Process response
status_code_ok = 200
if response.status_code != status_code_ok:
log('{}: '.format(response.status_code) + response.reason)
return
data = response.json()
if 'port' not in data:
log(data['error'])
return
return data['port']