ຕາຕະລາງ 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 ນີ້. ການດຶງທີ່ຢູ່ ແລະພອດບໍ່ໄດ້ພິສູດວ່າປາຍທາງນັ້ນສະເໜີບໍລິການພຣັອກຊີທີ່ໃຊ້ໄດ້ໃນຕອນນີ້.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ