mirror of
				https://github.com/9001/copyparty.git
				synced 2025-10-31 04:32:20 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import itertools
 | |
| import re
 | |
| import sys
 | |
| import time
 | |
| 
 | |
| from copyparty.authsrv import AuthSrv
 | |
| from copyparty.httpcli import HttpCli
 | |
| 
 | |
| from . import util as tu
 | |
| from .util import Cfg
 | |
| 
 | |
| atlas = ["%", "25", "2e", "2f", ".", "/"]
 | |
| 
 | |
| 
 | |
| def nolog(*a, **ka):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| def hdr(query):
 | |
|     h = "GET /{} HTTP/1.1\r\nCookie: cppwd=o\r\nConnection: close\r\n\r\n"
 | |
|     return h.format(query).encode("utf-8")
 | |
| 
 | |
| 
 | |
| def curl(args, asrv, url, binary=False):
 | |
|     conn = tu.VHttpConn(args, asrv, nolog, hdr(url))
 | |
|     HttpCli(conn).run()
 | |
|     if binary:
 | |
|         h, b = conn.s._reply.split(b"\r\n\r\n", 1)
 | |
|         return [h.decode("utf-8"), b]
 | |
| 
 | |
|     return conn.s._reply.decode("utf-8").split("\r\n\r\n", 1)
 | |
| 
 | |
| 
 | |
| def genlen(ubase, ntot, nth, wlen):
 | |
|     args = Cfg(v=["s2::r"], a=["o:o", "x:x"])
 | |
|     asrv = AuthSrv(args, print)
 | |
|     # h, ret = curl(args, asrv, "hey")
 | |
| 
 | |
|     n = 0
 | |
|     t0 = time.time()
 | |
|     print("genlen %s nth %s" % (wlen, nth))
 | |
|     ptn = re.compile(r"2.2.2.2|\.\.\.|///|%%%|\.2|/2./|%\.|/%/")
 | |
|     for path in itertools.product(atlas, repeat=wlen):
 | |
|         if "%" not in path:
 | |
|             continue
 | |
|         path = "".join(path)
 | |
|         if ptn.search(path):
 | |
|             continue
 | |
|         n += 1
 | |
|         if n % ntot != nth:
 | |
|             continue
 | |
|         url = ubase + path + "fa"
 | |
|         if n % 500 == nth:
 | |
|             spd = n / (time.time() - t0)
 | |
|             print(wlen, n, int(spd), url)
 | |
| 
 | |
|         hdr, r = curl(args, asrv, url)
 | |
|         if "fgsfds" in r:
 | |
|             with open("hit-%s.txt" % (time.time()), "w", encoding="utf-8") as f:
 | |
|                 f.write(url)
 | |
|             raise Exception("HIT! {}".format(url))
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     ubase = sys.argv[1]
 | |
|     ntot = int(sys.argv[2])
 | |
|     nth = int(sys.argv[3])
 | |
|     for wlen in range(20):
 | |
|         genlen(ubase, ntot, nth, wlen)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     try:
 | |
|         main()
 | |
|     except KeyboardInterrupt:
 | |
|         pass
 | |
| 
 | |
| 
 | |
| """
 | |
| nice pypy3 -m tests.ptrav "" 2 0
 | |
| nice pypy3 -m tests.ptrav "" 2 1
 | |
| nice pypy3 -m tests.ptrav .cpr 2 0
 | |
| nice pypy3 -m tests.ptrav .cpr 2 1
 | |
| (13x faster than /scripts/test/ptrav.py)
 | |
| """
 |