ດຶງ IP ພຣັອກຊີ ແລະ ພອດເຮັກຊາຈາກ JSON ທີ່ຝັງຢູ່
ຖອດລະຫັດ payload JSON ທີ່ຮູ້ຈັກຈາກການເອີ້ນສະຄຣິບຂອງລາຍຊື່ພຣັອກຊີ ແລະ ຕີຄວາມພອດເຮັກຊາສະເພາະເມື່ອຮູບແບບຂອງແຫຼ່ງລະບຸໄວ້.
ຕາຕະລາງ 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 ນີ້. ການດຶງທີ່ຢູ່ ແລະພອດບໍ່ໄດ້ພິສູດວ່າປາຍທາງນັ້ນສະເໜີບໍລິການພຣັອກຊີທີ່ໃຊ້ໄດ້ໃນຕອນນີ້.