කාවැද්දූ JSON වලින් ප්රොක්සි IP සහ හෙක්ස් පෝට් උපුටා ගන්න
ප්රොක්සි ලැයිස්තුවල ස්ක්රිප්ට් ඇමතුම්වලින් දන්නා JSON පේලෝඩ් විකේතනය කර, මූලාශ්ර ආකෘතිය එය ප්රකාශ කරන විට පමණක් හෙක්ස් පෝට් අර්ථ නිරූපණය කරන්න.
හිස් 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 රැපර විග්රාහකය වෙනුවට පේළි අනුව අන්ත ලක්ෂ්ය උපුටා ගැනීම භාවිතා කරන්න. ලිපිනයක් සහ පෝට් එකක් උපුටා ගැනීම එම අන්ත ලක්ෂ්යය දැන් භාවිතයට ගත හැකි ප්රොක්සි සේවාවක් ලබා දෙන බව ඔප්පු නොකරයි.