Кирүү JSON'дон прокси IP жана hex портторун бөлүп алуу
Прокси тизмелеринин скрипт чакырууларынан белгилүү JSON жүктөрүн декоддоп, hex портту түпкү формат аны билдиргенде гана чечмелеңиз.
Бош HTML таблица жоопто прокси жазуулары жок дегенди билдирбейт. Айрым тизмелер JSON объектилерин JavaScript чакырууларынын ичине коюп, саптарды кийинчерээк толтурат.
Мурун алынган булак gp.insertPrx атайын каптоочун жана андан кийин 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 — булактын тексттик мазмуну, браузердин объектиси эмес. Регулярдык туюнтма белгилүү каптоочту табат; JSONDecoder JSON маанисинин кайда бүтөөрүн аныктайт. Ошентип ичтелген JSON'ду регулярдык туюнтма менен эле талдоо аракетинен качабыз.
Мисалдагы порт талаасы ачык hex: C38 ондук 3128 дегенди билдирет. Экөө тең порт деп аталат деп, башка провайдердин ондук талаасына 16 негизин колдонбоңуз.
Бул көрсөтүлгөн формат үчүн анализатор, JavaScript интерпретатору эмес. Жалгыз тырмакчадагы объект литералдары, эсептелген маанилер жана башка JavaScript туюнтмалары башка документтелген дайындар интерфейсин талап кылат. Endpoint тизмесин алуу үчүн барактын эркин кодун аткарбаңыз.
Булактын келишимин текшериңиз жана протокол талааларын өзүнчө сактаңыз. Эгер булакта анын ордуна толтурулган HTML саптары болсо, бул JavaScript каптооч анализаторунун ордуна сап боюнча endpoint бөлүп алууну колдонуңуз. Дарек менен портту бөлүп алуу endpoint азыр жарактуу прокси кызматын сунуштайт дегенди далилдебейт.