אַ ליידיקע 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 נאָר מיט אַ רעגולערן אויסדרוק.

דאָס פּאָרט־פֿעלד אין ביישפּיל איז בפֿירוש העקסאַדעצימאַל: C38 מיינט דעצימאַל 3128. טייטש נישט אָן באַזע 16 אויף אַ דעצימאַל־פֿעלד פֿון אַן אַנדער פּראָוויידער נאָר ווײַל ביידע הייסן פּאָרט.

דאָס איז אַ פּאַרסער פֿאַר דעם געזאָגטן פֿאָרמאַט, נישט קיין JavaScript־דאָלמעטשער. אָביעקט־ליטעראַלן מיט איין ציטאַט, גערעכנטע ווערטן און אַנדערע JavaScript־אויסדרוקן דאַרפֿן אַן אַנדער דאָקומענטירט דאַטן־צווישנשײַד. פֿיר נישט אויס סתּם־וואָס זײַטן־קאָד צו באַקומען אַ ליסטע פֿון ענדפּוינטס.

באַשטעטיק דעם מקור־קאָנטראַקט און האַלט פּראָטאָקאָל־פֿעלדער באַזונדער. אויב דער מקור האָט אַנשטאָט דעם אָנגעפֿילטע HTML־רייעס, ניץ ענדפּוינט־אַרויסציאונג לויט רייע אַנשטאָט דעם JavaScript־פֿאַרפּאַק־פּאַרסער. אַרויסציען אַן אַדרעס און אַ פּאָרט באַווײַזט נישט אַז דער ענדפּוינט שאַפֿט איצט אַ ניצלעכע פּראַקסי־דינסט.

פֿאַרבונדענע אַרטיקלען