खाली HTML तालिकाको अर्थ सधैं प्रतिक्रियामा प्रोक्सी रेकर्ड छैन भन्ने हुँदैन। केही सूचीले JavaScript कलभित्र JSON वस्तु राख्छन् र पङ्क्तिहरू पछि भर्छन्।

पहिले नै प्राप्त स्रोतले विशेष र्यापर 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 र्यापर पार्सरको सट्टा पङ्क्ति-आधारित इन्डपोइन्ट निकासी प्रयोग गर्नुहोस्। ठेगाना र पोर्ट निकाल्नुले इन्डपोइन्टले अहिले प्रयोगयोग्य प्रोक्सी सेवा दिइरहेको प्रमाणित गर्दैन।

सम्बन्धित लेखहरू