From 91c8547c46f79d2b12ca1089a63bfc24cf4b98c9 Mon Sep 17 00:00:00 2001 From: Jeroen Oudshoorn Date: Sat, 16 Sep 2023 01:44:02 +0200 Subject: [PATCH] v2.3.9 Signed-off-by: Jeroen Oudshoorn --- builder/pwnagotchi.yml | 15 ++++++++++++++- pwnagotchi/bettercap.py | 41 ++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/builder/pwnagotchi.yml b/builder/pwnagotchi.yml index c3a018e4..4ed9eac5 100644 --- a/builder/pwnagotchi.yml +++ b/builder/pwnagotchi.yml @@ -1,6 +1,7 @@ --- - hosts: - - all + - 127.0.0.1 + gather_facts: true become: true vars: pwnagotchi: @@ -137,8 +138,20 @@ - libpcap-dev - libusb-1.0-0-dev - libnetfilter-queue-dev + environment: + ARCHFLAGS: "-arch armv8" tasks: + - name: System details + debug: + msg="{{ item }}" + with_items: + - "{{ ansible_distribution }}" + - "{{ ansible_distribution_version }}" + - "{{ ansible_distribution_major_version }}" + - "{{ ansible_architecture }}" + - "{{ ansible_machine }}" + - name: change hostname lineinfile: dest: /etc/hostname diff --git a/pwnagotchi/bettercap.py b/pwnagotchi/bettercap.py index fb57f077..93e160b3 100644 --- a/pwnagotchi/bettercap.py +++ b/pwnagotchi/bettercap.py @@ -1,4 +1,3 @@ -import json import logging import requests import websockets @@ -8,12 +7,14 @@ import random from requests.auth import HTTPBasicAuth from time import sleep -requests.adapters.DEFAULT_RETRIES = 5 # increase retries number +requests.adapters.DEFAULT_RETRIES = 5 # increase retries number -ping_timeout = 90 -ping_interval = 60 +ping_timeout = 180 +ping_interval = 15 +max_queue = 10000 -max_sleep = 2.0 +min_sleep = 0.5 +max_sleep = 5.0 def decode(r, verbose_errors=True): @@ -59,7 +60,7 @@ class Client(object): # logging.debug("Error while parsing event (%s)", ex) # except websockets.exceptions.ConnectionClosedError: # sleep_time = max_sleep*random.random() - # logger.warning('Retrying websocket connection in {} sec'.format(sleep_time)) + # logging.warning('Retrying websocket connection in {} sec'.format(sleep_time)) # await asyncio.sleep(sleep_time) # continue @@ -67,7 +68,7 @@ class Client(object): while True: logging.info("creating new websocket...") try: - async with websockets.connect(s, ping_interval=ping_interval, ping_timeout=ping_timeout) as ws: + async with websockets.connect(s, ping_interval=ping_interval, ping_timeout=ping_timeout, max_queue=max_queue) as ws: # listener loop while True: try: @@ -75,35 +76,41 @@ class Client(object): try: await consumer(msg) except Exception as ex: - logging.debug("error while parsing event (%s)", ex) - except websockets.exceptions.ConnectionClosedError: + logging.debug("error while parsing event (%s)", ex) + except websockets.ConnectionClosedError: try: pong = await ws.ping() await asyncio.wait_for(pong, timeout=ping_timeout) logging.warning('ping OK, keeping connection alive...') continue except: - sleep_time = max_sleep*random.random() + sleep_time = min_sleep + max_sleep*random.random() logging.warning('ping error - retrying connection in {} sec'.format(sleep_time)) await asyncio.sleep(sleep_time) break except ConnectionRefusedError: - sleep_time = max_sleep*random.random() - logging.warning('nobody seems to listen to the bettercap endpoint...') + sleep_time = min_sleep + max_sleep*random.random() + logging.warning('nobody seems to be listening at the bettercap endpoint...') + logging.warning('retrying connection in {} sec'.format(sleep_time)) + await asyncio.sleep(sleep_time) + continue + except OSError: + sleep_time = min_sleep + max_sleep*random.random() + logging.warning('connection to the bettercap endpoint failed...') logging.warning('retrying connection in {} sec'.format(sleep_time)) await asyncio.sleep(sleep_time) continue def run(self, command, verbose_errors=True): - for _ in range(0, 2): + while True: try: r = requests.post("%s/session" % self.url, auth=self.auth, json={'cmd': command}) except requests.exceptions.ConnectionError as e: - sleep_time = max_sleep*random.random() - logging.exception("Request connection error (%s) while running command (%s)", e, command) - logging.warning('Retrying run in {} sec'.format(sleep_time)) + sleep_time = min_sleep + max_sleep*random.random() + logging.warning("can't run my request... connection to the bettercap endpoint failed...") + logging.warning('retrying run in {} sec'.format(sleep_time)) sleep(sleep_time) else: break - return decode(r, verbose_errors=verbose_errors) + return decode(r, verbose_errors=verbose_errors) \ No newline at end of file