mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 17:12:13 -06:00
106 lines
2.2 KiB
Python
106 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import json
|
|
import threading
|
|
import http.client
|
|
|
|
|
|
class Conn(object):
|
|
def __init__(self, ip, port):
|
|
self.s = http.client.HTTPConnection(ip, port, timeout=260)
|
|
self.st = []
|
|
|
|
def get(self, vpath):
|
|
self.st = [time.time()]
|
|
|
|
self.s.request("GET", vpath)
|
|
self.st.append(time.time())
|
|
|
|
ret = self.s.getresponse()
|
|
self.st.append(time.time())
|
|
|
|
if ret.status < 200 or ret.status >= 400:
|
|
raise Exception(ret.status)
|
|
|
|
ret = ret.read()
|
|
self.st.append(time.time())
|
|
|
|
return ret
|
|
|
|
def get_json(self, vpath):
|
|
ret = self.get(vpath)
|
|
return json.loads(ret)
|
|
|
|
|
|
class CState(threading.Thread):
|
|
def __init__(self, cs):
|
|
threading.Thread.__init__(self)
|
|
self.daemon = True
|
|
self.cs = cs
|
|
self.start()
|
|
|
|
def run(self):
|
|
colors = [5, 1, 3, 2, 7]
|
|
remotes = []
|
|
remotes_ok = False
|
|
while True:
|
|
time.sleep(0.001)
|
|
if not remotes_ok:
|
|
remotes = []
|
|
remotes_ok = True
|
|
for conn in self.cs:
|
|
try:
|
|
remotes.append(conn.s.sock.getsockname()[1])
|
|
except:
|
|
remotes.append("?")
|
|
remotes_ok = False
|
|
|
|
m = []
|
|
for conn, remote in zip(self.cs, remotes):
|
|
stage = len(conn.st)
|
|
m.append(f"\033[3{colors[stage]}m{remote}")
|
|
|
|
m = " ".join(m)
|
|
print(f"{m}\033[0m\n\033[A", end="")
|
|
|
|
|
|
def allget(cs, urls):
|
|
thrs = []
|
|
for c, url in zip(cs, urls):
|
|
t = threading.Thread(target=c.get, args=(url,))
|
|
t.start()
|
|
thrs.append(t)
|
|
|
|
for t in thrs:
|
|
t.join()
|
|
|
|
|
|
def main():
|
|
os.system("")
|
|
|
|
ip, port = sys.argv[1].split(":")
|
|
port = int(port)
|
|
|
|
cs = []
|
|
for _ in range(64):
|
|
cs.append(Conn(ip, 3923))
|
|
|
|
CState(cs)
|
|
|
|
urlbase = "/doujin/c95"
|
|
j = cs[0].get_json(f"{urlbase}?ls")
|
|
urls = []
|
|
for d in j["dirs"]:
|
|
urls.append(f"{urlbase}/{d['href']}?th=w")
|
|
|
|
for n in range(100):
|
|
print(n)
|
|
allget(cs, urls)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|