Extreu IP de servidor intermediari i ports hexadecimals del JSON incrustat
Descodifiqueu càrregues JSON conegudes de les crides d'script de les llistes de servidors intermediaris i interpreteu un port hexadecimal només quan el format d'origen ho declara.
Una taula HTML buida no sempre vol dir que la resposta no contingui registres de servidor intermediari. Algunes llistes posen objectes JSON dins de crides JavaScript i omplen les files més tard.
Per a un origen ja obtingut que utilitza l'embolcall específic gp.insertPrx seguit d'un objecte JSON:
import ipaddress
import json
import re
decoder = json.JSONDecoder()
endpoints = set()
for marker in re.finditer(r"gp[.]insertPrx\(\s*", html):
try:
row, end = decoder.raw_decode(html, marker.end())
if not isinstance(row, dict):
continue
address = ipaddress.ip_address(row["PROXY_IP"])
port = int(row["PROXY_PORT"], 16)
except (ValueError, KeyError, TypeError):
continue
if 1 <= port <= 65535 and html[end:].lstrip().startswith(");"):
endpoints.add((str(address), port))
html és el text de l'origen, no un objecte del navegador. L'expressió regular troba un embolcall conegut; JSONDecoder determina on acaba el seu valor JSON. Així s'evita intentar analitzar JSON imbricat només amb una expressió regular.
El camp de port de l'exemple és explícitament hexadecimal: C38 significa 3128 decimal. No apliqueu la base 16 al camp decimal d'un altre proveïdor només perquè tots dos es diuen port.
Això és un analitzador per al format indicat, no un intèrpret de JavaScript. Els literals d'objecte amb cometes simples, els valors calculats i altres expressions de JavaScript necessiten una altra interfície de dades documentada. No executeu codi arbitrari de la pàgina per obtenir una llista de punts finals.
Valideu el contracte de l'origen i conserveu els camps de protocol per separat. Si l'origen té files HTML omplertes, feu servir extracció de punts finals per fila en lloc d'aquest analitzador d'embolcalls JavaScript. Extreure una adreça i un port no demostra que el punt final ofereixi ara un servei de servidor intermediari utilitzable.