قۇرۇق HTML جەدۋەل ھەمىشە جاۋابتىن proxy خاتىرىسى يوق دېگەنلىك ئەمەس. بەزى تىزىملىكلەر 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 نى پەقەت تۇراقلىق ئىپادە بىلەن تەھلىل قىلىش ئۇرۇنۇشىدىن ساقلىنىدۇ.

مىسالنىڭ پورت مەيدانى ئېنىق ھەشتىلىك: C38 ئونلۇق 3128 دېگەنلىك. ئىككىسىنى پورت دەپ ئاتىغانلىقى ئۈچۈنلا باشقا تەمىنلىگۈچىنىڭ ئونلۇق مەيدانىغا 16 ئاساسىنى قوللانماڭ.

بۇ كۆرسىتىلگەن فورمات ئۈچۈن تەھلىللىگۈچ، JavaScript تەرجىمانى ئەمەس. بىر تىرناقلىق ئوبيېكت لىتېراللىرى، ھېسابلانغان قىممەتلەر ۋە باشقا JavaScript ئىپادىلىرى باشقا ھۆججەتلىك سانلىق مەلۇمات كۆرۈنمە يۈزىنى تەلەپ قىلىدۇ. ئاخىرقى نۇقتا تىزىملىكىنى ئېلىش ئۈچۈن خالىغان بەت كودىنى ئىجرا قىلماڭ.

مەنبە كېلىشىمىنى دەلىللەڭ ۋە پروتوكول مەيدانلىرىنى ئايرىم ساقلاڭ. ئەگەر مەنبەدە ئۇنىڭ ئورنىغا تولدۇرۇلغان HTML قۇرلىرى بولسا، بۇ JavaScript قاپ تەھلىللىگۈچىنىڭ ئورنىغا قۇر بويىچە ئاخىرقى نۇقتا چىقىرىش نى ئىشلىتىڭ. ئادرېس ۋە پورت چىقىرىش ئاخىرقى نۇقتىنىڭ ھازىر ئىشلىتىشكە بولىدىغان proxy مۇلازىمىتى تەمىنلەيدىغانلىقىنى ئىسپاتلىمايدۇ.

مۇناسىۋەتلىك ماقالىلەر