Proxy-IPen an Hex-Porte aus agebettem JSON eraussichen
Dekodéiert bekannt JSON-Payloaden aus Skriptopruff vun Proxy-Lëschten an interpretéiert en Hex-Port nëmmen dann, wann de Quellformat dat ugëtt.
Eng eidel HTML-Tabell heescht net ëmmer, datt d'Äntwert keng Proxy-Andräg enthält. Verschidde Lëschten setzen JSON-Objeten an JavaScript-Opruff a fëllen d'Reien duerno.
Fir eng Quell, déi schonn erofgeluede gouf an de spezifeschen Wrapper gp.insertPrx benotzt, gefollegt vun engem JSON-Objet:
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 ass den Text vun der Quell, keen Browserobjekt. Den regulären Ausdrock fënnt e bekannte Wrapper; JSONDecoder bestëmmt, wou de JSON-Wäert ophält. Sou gëtt et vermeit, agebett JSON just mat engem regulären Ausdrock ze parsen.
D'Portfeld am Beispill ass ausdrécklech hexadecimal: C38 bedeit dezimal 3128. Benotzt d'Basis 16 net op engem anere Fournisseur säin Dezimalfeld, just well béid Port genannt ginn.
Dëst ass e Parser fir de genannte Format, keen JavaScript-Interpret. Objektliterale mat einfachen Anführungszeechen, berechtegt Wäerter an aner JavaScript-Ausdréck brauchen eng aner dokumentéiert Datenschnittstell. Féiert keen arbiträre Säitecode aus, fir eng Endpunktlëscht ze kréien.
Validdéiert de Quellkontrakt a haalt d'Protokollfelder getrennt. Wann d'Quell amplaz gefëllt HTML-Reien huet, benotzt Endpunkt-Extraktioun pro Reih anstatt dësen JavaScript-Wrapper-Parser. Eng Adress an e Port erauszesichen beweist net, datt den Endpunkt am Moment e brauchbare Proxy-Service ubitt.