Proxy-IP's en hex-poarten út ynbêde JSON helje
Dekodearje bekende JSON-ladingen út skriptoproppen fan proxylisten en ynterpretearje in hex-poarte allinnich as dat boarneformaat it oanjout.
In lege HTML-tabel betsjut net altyd dat it antwurd gjin proxy-registers befettet. Guon listen pleatse JSON-objekten yn JavaScript-oproppen en folje de rigen letter.
Foar in al krigen boarne dy't de spesifike wrapper gp.insertPrx folge troch in JSON-objekt brûkt:
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 is de boarnetekst, net in browserobjekt. De reguliere útdrukking fynt in bekende wrapper; JSONDecoder bepaalt wêr't de JSON-wearde einiget. Sa wurdt foarkommen dat ynbêde JSON allinnich mei in reguliere útdrukking parsearre wurdt.
It poartefjild fan it foarbyld is eksplisyt hexadesimaal: C38 betsjut desimaal 3128. Pas basis 16 net ta op it desimale fjild fan in oare oanbieder, allinnich omdat beide poarte hjitte.
Dit is in parser foar it neamde formaat, gjin JavaScript-ynterpretearder. Objektliteralen mei ienige oanhellingstekens, berekkene wearden en oare JavaScript-útdrukkingen hawwe in oare dokumintearre data-ynterface nedich. Fier gjin willekeurige sidekoade út om in list fan einpunten te krijen.
Falidearje it boarnekontrakt en hâld protokolfjilden apart. Hat de boarne ynstee folle HTML-rigen, brûk dan einpunten ekstrahearje per rige ynstee fan dizze JavaScript-wrappparser. In adres en poarte ekstrahearje bewiist net dat it einpunt op dit stuit in brûkbere proxysjinst oanbiedt.