forked from kunsi/dotfiles
add wifi autoreconnect script
This commit is contained in:
parent
7fc8739436
commit
635b6d9c9b
1 changed files with 101 additions and 0 deletions
101
.bin/wlan-autoreconnect.py
Normal file
101
.bin/wlan-autoreconnect.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import psutil
|
||||
import time
|
||||
import sys
|
||||
import logging
|
||||
import subprocess
|
||||
import requests
|
||||
import socket
|
||||
import netifaces
|
||||
from netaddr import IPNetwork, IPAddress
|
||||
|
||||
# Threshold in KB
|
||||
threshold = 100*1000
|
||||
|
||||
# Interface
|
||||
interface = 'wlp4s0'
|
||||
|
||||
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s",
|
||||
handlers=[
|
||||
logging.StreamHandler()
|
||||
])
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
last_traffic = 0
|
||||
|
||||
if interface not in netifaces.interfaces():
|
||||
log.error(interface + ' was not found')
|
||||
sys.exit(1)
|
||||
|
||||
while True:
|
||||
traffic = psutil.net_io_counters(pernic=True)[interface]
|
||||
|
||||
traffic_wifi = int((traffic.bytes_sent + traffic.bytes_recv)/1024)
|
||||
|
||||
log.info('Traffic on ' + interface + ': ' + str(traffic_wifi) + ' KB')
|
||||
|
||||
if (traffic_wifi - last_traffic) > threshold or traffic_wifi < last_traffic:
|
||||
log.warning('Traffic since last mac change above threshold (or traffic counter changed strangely), changing MAC')
|
||||
|
||||
last_traffic = traffic_wifi
|
||||
|
||||
subprocess.run(['ip', 'link', 'set', interface, 'down'])
|
||||
subprocess.run(['macchanger', '-r', interface])
|
||||
subprocess.run(['ip', 'link', 'set', interface, 'up'])
|
||||
|
||||
timeout = time.time()+20
|
||||
ip = "0.0.0.0"
|
||||
|
||||
while True:
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(('10.255.255.255', 1))
|
||||
|
||||
ip = s.getsockname()[0]
|
||||
|
||||
log.info('Got IPv4 ' + ip)
|
||||
|
||||
s.close()
|
||||
|
||||
break
|
||||
except:
|
||||
time.sleep(1)
|
||||
|
||||
if time.time() >= timeout:
|
||||
log.error('Timeout while waiting for IP address')
|
||||
break
|
||||
|
||||
if IPAddress(ip) in IPNetwork("172.18.0.0/16"):
|
||||
headers = {
|
||||
'Host': 'www.wifionice.de',
|
||||
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; irv:58.0) Gecko/20100101 Firefox/58.0',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
||||
'Accept-Language': 'en-US,en;q=0.5',
|
||||
'Referer': 'http://www.wifionice.de/',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Cookie': 'csrf=42',
|
||||
'Connection': 'keep-alive',
|
||||
'Upgrade-Insecure-Requests': '1'
|
||||
}
|
||||
try:
|
||||
log.info('Trying login to WIFIonICE in 5 seconds ...')
|
||||
|
||||
time.sleep(5)
|
||||
|
||||
r = requests.post('http://www.wifionice.de/de/', data={'login': 'true', 'CSRFToken': '42', 'connect': ''}, headers=headers, timeout=15)
|
||||
|
||||
if r.status_code == 200:
|
||||
log.info('Logged in to WIFIonICE')
|
||||
else:
|
||||
log.warning('Logging in failed, got status code ' + str(r,status_code))
|
||||
except requests.exceptions.ConnectTimeout:
|
||||
log.error('Timeout while trying to login, visit http://www.wifionice.de/ to check')
|
||||
except:
|
||||
log.error('Error while trying to log in')
|
||||
|
||||
time.sleep(10)
|
Loading…
Reference in a new issue