# основная функция, которая парсит файлы
# если имя начинается на websites, то это вебархив, из пути берётся archive_timestamp и code
# если имя начинается на webc, то это кэш гуглопоиска, и параметры берутся из шапки страницы
def parse_release(fn):
with open(fn, "r") as f:
pg = f.read()
assert pg != ""
tree = htmlparse(pg)
if fn.startswith("websites/"):
archive_source = "webarchive"
archive_timestamp = int(fn.split("/")[2])
code = fn.split("/")[4]
else:
archive_source = "googlewebcache"
archive_timestamp = -1
m = re.search("снимок страницы по состоянию на (.+?)\.</span>", pg)
if m:
archive_timestamp = timestr2timestamp(m.group(1))
code = tree.find("base").get("href").split("/")[4]
# находим __NUXT__ на странице
nuxt_js = None
for s in tree.find_all("script"):
s_text = s.get_text()
if s_text.find("__NUXT__") > -1:
nuxt_js = s_text
break
# если не нашли - ёк!
if not nuxt_js:
print (f"ERROR! No nuxt data in {fn}!")
assert nuxt_js
# выполняем js-код
nuxt_raw = js2py.eval_js(nuxt_js)
... ip route add IP_ВНЕШНЕГО_СЕРВЕРА via IP_ДОМАШНЕГО_РОУТЕРАip route del default via IP_ДОМАШНЕГО_РОУТЕРА
ip route add default dev ИНТЕРФЕЙС_VPN
# или так:
#ip route add default via IP_ВНЕШНЕГО_СЕРВЕРА_ВНУТРИ_VPN# снаружи прилетает пакет - заменяем ему получателя на домашний сервер
iptables -t nat -A PREROUTING -p tcp --dport 12345 -d ВНЕШНИЙ_IP_СЕРВЕРА -j DNAT --to IP_ДОМАШНЕГО_ВНУТРИ_VPN:12345
# от домашнего сервера прилетает пакет - в конце маршрутизации меняем ему IP источника,
# чтобы казалось, что его отправил внешний сервер
iptables -t nat -A POSTROUTING -s IP_ДОМАШНЕГО_ВНУТРИ_VPN -o ВНЕШНИЙ_ИНТЕРФЕЙС_СЕРВЕРА -j SNAT --to ВНЕШНИЙ_IP_СЕРВЕРА