ಖಾಲಿ 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 ರ್ಯಾಪರ್ ಪಾರ್ಸರ್ ಬದಲು ಸಾಲಿನ ಪ್ರಕಾರ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಹೊರತೆಗೆಯುವಿಕೆ ಬಳಸಿ. ವಿಳಾಸ ಮತ್ತು ಪೋರ್ಟ್ ಹೊರತೆಗೆಯುವುದು ಎಂಡ್‌ಪಾಯಿಂಟ್ ಈಗ ಬಳಸಬಹುದಾದ ಪ್ರಾಕ್ಸಿ ಸೇವೆಯನ್ನು ನೀಡುತ್ತದೆ ಎಂದು ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು