ባዶ የ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 መጠቅለያ ተንታኝ ይልቅ በረድፍ የተወሰነ የኤንድፖይንት ማውጣት ተጠቀም። አድራሻ እና ፖርት ማውጣት ኤንድፖይንቱ አሁን ጥቅም ላይ የሚውል የፕሮክሲ አገልግሎት ይሰጣል ማለት አይደለም።

ተዛማጅ ጽሑፎች