Ichiga joylashtirilgan JSON dan proxy IP va hex portlarni ajratib olish
Proxy roʻyxatlari skript chaqiruvlaridagi maʼlum JSON yuklamalarini dekodlang va hex portni faqat manba formati buni bildirganda talqin qiling.
Boʻsh HTML jadval har doim ham javobda proxy yozuvlari yoʻqligini bildirmaydi. Baʼzi roʻyxatlar JSON obyektlarini JavaScript chaqiruvlari ichiga joylashtiradi va qatorlarni keyinroq toʻldiradi.
Avval olingan manba maxsus gp.insertPrx oʻramasi va undan keyin JSON obyektidan foydalansa:
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 — bu manba matni, brauzer obyekti emas. Muntazam ifoda maʼlum oʻramani topadi; JSONDecoder JSON qiymati qayerda tugashini aniqlaydi. Bu ichma-ich JSON ni faqat muntazam ifoda bilan tahlil qilishga urinishdan saqlaydi.
Misoldagi port maydoni aniq hex: C38 oʻnlik 3128 degani. Ikkalasi ham port deb atalgani uchun boshqa provayderning oʻnlik maydoniga 16 asosini qoʻllamang.
Bu koʻrsatilgan format uchun parser, JavaScript interpretatori emas. Bitta qoʻshtirnoqli obyekt literallari, hisoblangan qiymatlar va boshqa JavaScript ifodalari boshqa hujjatlashtirilgan maʼlumotlar interfeysini talab qiladi. Endpoint roʻyxatini olish uchun sahifaning ixtiyoriy kodini ishga tushirmang.
Manba shartnomasini tekshiring va protokol maydonlarini alohida saqlang. Agar manbada uning oʻrniga toʻldirilgan HTML qatorlari boʻlsa, bu JavaScript oʻrama parseri oʻrniga qator boʻyicha endpoint ajratib olish dan foydalaning. Manzil va portni ajratib olish endpoint hozir foydalanish mumkin boʻlgan proxy xizmatini taklif qilishini isbotlamaydi.