#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Author: yura_nn
# License: GNU/GPL v3
#
# Предварительно нужно установить пакет Python urllib3. В Gentoo:
# emerge dev-python/urllib3
# Путь к файлу privoxy user.action.
import requests
import time
user_action_path = "/etc/privoxy/user.action"
def get_public_ip():
return requests.get("https://wtfismyip.com/text").text.strip()
if __name__ == "__main__":
with open(user_action_path, "r") as fd:
user_action_lines = fd.readlines()
while True:
try:
address = get_public_ip()
except Exception as ex:
print("failed to get external address: {}".format(ex))
address = False
if address:
for idx, line in enumerate(user_action_lines):
# Поиск строки, определяющей заголовок.
first_find_symbol = line.find("{+add-header{X-Forwarded-For:")
# Когда искомая строка найдена.
if first_find_symbol != -1:
updated_line = "{+add-header{X-Forwarded-For: %s}}\n" % address
# Если новый IP-адрес (строка целиком) не совпадает со старым,
# то выполняется замена строки на новую.
if line != updated_line:
print("external address changed to {}, updating config".format(address))
del user_action_lines[idx]
user_action_lines.insert(idx, updated_line)
# Перезапись файла user.action.
try:
with open(user_action_path, "w") as fd:
fd.writelines(user_action_lines)
except IOError as ex:
print("failed to update config: {}".format(ex))
exit(1)
# Ожидание 10 минут перед следующей проверкой.
time.sleep(600)