ensure-port-fwd: selenium 4.10.0 compat, cleanup

Signed-off-by: Martin Matous <m@matous.dev>
This commit is contained in:
Martin Matous 2025-05-02 15:31:47 +02:00
parent 75d39f3233
commit 51d030b919
Signed by: mmatous
GPG key ID: 8BED4CD352953224

View file

@ -1,25 +1,27 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# 3rd-party dependencies: selenium # 3rd-party dependencies: selenium >=4.10.0, geckodriver
import os import os
import sys import sys
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys from selenium.webdriver.firefox.service import Service
username = os.environ['ROUTER_USERNAME'] username = os.environ['ROUTER_USERNAME']
password = os.environ['ROUTER_PASSWORD'] password = os.environ['ROUTER_PASSWORD']
target_ip = sys.argv[1] target_ip = sys.argv[1]
PORTS = {22, 25, 80, 443, 465, 993} PORTS = {22, 25, 80, 443, 465, 993, 51820}
options = webdriver.FirefoxOptions() options = webdriver.FirefoxOptions()
options.add_argument('-headless') options.add_argument('-headless')
browser = webdriver.Firefox(options) service = Service(executable_path='/usr/local/bin/geckodriver', service_log_path=os.devnull)
browser = webdriver.Firefox(options=options, service=service)
browser.delete_all_cookies()
browser.implicitly_wait(1) browser.implicitly_wait(1)
browser.get('http://192.168.0.1/') browser.get('http://192.168.0.1/login.asp')
username_text_box = browser.find_element(By.ID, 'loginUsername') username_text_box = browser.find_element(By.ID, 'loginUsername')
username_text_box.send_keys(username) username_text_box.send_keys(username)
@ -39,17 +41,17 @@ forwarded = { int(port.get_attribute('value').split('-')[0]) for port in forward
missing = PORTS - forwarded missing = PORTS - forwarded
n_missing = len(missing) n_missing = len(missing)
add_row = browser.find_element(By.XPATH, '/html/body/div/div[4]/div[1]/form/button[1]') add_row = browser.find_element(By.XPATH, '/html/body/div/div[4]/div[1]/form/button[1]')
for i in range(n_missing): for _ in range(n_missing):
add_row.click() add_row.click()
n_fwd = len(forwarded) n_fwd = len(forwarded)
for i, port in enumerate(missing): for i, port in enumerate(missing):
browser.find_element(By.NAME, f'ForwardingPortRange{i + n_fwd}').clear() browser.find_element(By.NAME, f'ForwardingPortRange{i + n_fwd}').clear()
browser.find_element(By.NAME, f'ForwardingPortRange{i + n_fwd}').send_keys(port) browser.find_element(By.NAME, f'ForwardingPortRange{i + n_fwd}').send_keys(str(port))
browser.find_element(By.NAME, f'ForwardingTargetIp{i + n_fwd}').clear() browser.find_element(By.NAME, f'ForwardingTargetIp{i + n_fwd}').clear()
browser.find_element(By.NAME, f'ForwardingTargetIp{i + n_fwd}').send_keys(target_ip) browser.find_element(By.NAME, f'ForwardingTargetIp{i + n_fwd}').send_keys(target_ip)
browser.find_element(By.NAME, f'ForwardingTargetPort{i + n_fwd}').clear() browser.find_element(By.NAME, f'ForwardingTargetPort{i + n_fwd}').clear()
browser.find_element(By.NAME, f'ForwardingTargetPort{i + n_fwd}').send_keys(port) browser.find_element(By.NAME, f'ForwardingTargetPort{i + n_fwd}').send_keys(str(port))
submit = browser.find_element(By.XPATH, '/html/body/div/div[4]/div[1]/form/button[2]') submit = browser.find_element(By.XPATH, '/html/body/div/div[4]/div[1]/form/button[2]')
submit.click() submit.click()