#!/usr/bin/env python3
import subprocess,re,concurrent.futures,json,sys
host=sys.argv[1];path=sys.argv[2];ips=[f'193.134.75.{i}' for i in range(1,255)]
def one(ip):
 cmd=['curl','--toadex-no-capture','-sk','--http1.1','--path-as-is','--connect-timeout','1','--max-time','3','--resolve',f'{host}:443:{ip}','-H','X-Bug-Bounty: dwbzn','-i',f'https://{host}{path}']
 try:r=subprocess.run(cmd,capture_output=True,timeout=4)
 except:return None
 raw=r.stdout;ms=list(re.finditer(br'HTTP/\S+\s+(\d+)[^\r\n]*\r?\n',raw))
 if not ms:return None
 m=ms[-1];sep=raw.find(b'\r\n\r\n',m.start());sl=4
 if sep<0:sep=raw.find(b'\n\n',m.start());sl=2
 hdr=raw[m.start():sep].decode('latin1','replace');body=raw[sep+sl:]
 loc=srv=''
 for l in hdr.splitlines():
  if l.lower().startswith('location:'):loc=l.split(':',1)[1].strip()
  if l.lower().startswith('server:'):srv=l.split(':',1)[1].strip()
 sig=','.join(dict.fromkeys(x.decode() for x in re.findall(br'(?i)Guidewire|PolicyCenter|BillingCenter|ClaimCenter|check-login|/auth/login|Authentication failed|restman|Bad request|Misdirected|Forbidden|maintenance',body)))
 return {'ip':ip,'status':m.group(1).decode(),'size':len(body),'server':srv,'location':loc,'sig':sig,'snippet':re.sub(r'\s+',' ',body[:100].decode('latin1','replace'))}
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as ex:rows=[x for x in ex.map(one,ips) if x]
for x in rows:print(json.dumps(x))
