Слушатель проверяется возможными вредоносными пакетами.Как предотвратить доступ IP-адресов к моему порту? - PullRequest
0 голосов
/ 16 февраля 2019

Я разрабатываю службу сервер-клиент на уровне сокетов.Мой сервер получает спам со случайными пакетами.Мне нужен способ различения хороших и плохих IP-адресов, но я не знаю всех хороших IP-адресов, поэтому белый / черный список не работает.

Сервер управляет списком всех клиентов и информирует всех клиентов о текущей очереди клиентов.Когда первый клиент действовал, он отправляет положительный ответ на сервер, и сервер продвигает очередь.Фильтр, который сканирует данные входящего пакета, может работать, но я не уверен, если это возможно, чтобы перехватить все атаки именно с этим (обычные буквы, ',', '.' И цифры должны быть обойдены, так какэто может быть действительный клиент).

Сегодня я получил этот вывод на консоль (извините за форматирование и вырезание исключений, этот очень хороший веб-сайт думает, что следующее - это код, и хочет, чтобы я использовал некоторые произвольные отступы, которые яне могу решить, поэтому я просто удалил что-то, пока он больше не думал, что это код)

прослушивание: 4444

Адрес подключения ('198.108.67.48', 53556)

Я: \ r \ n

прослушивание: 4444

Адрес подключения :( '198.108.67.48', 62346)

Я: GET / HTTP/1.1\r\nHost

прослушивание 4444

activeDisps [['198.108.67.48', '\ r \ n'], ['198.108.67.48', 'GET / HTTP /1.1 \ r \ nHost ']]

ValueError: недопустимый литерал для int () с основанием 10:' z \ xc2 \ x00 \ x00 \ xc0 / \ xc00 \ xc0 + \ xc0 '

соединениеадрес ('198.108.67.48', 7204)

Я \ x16 \ x03 \ x01 \ x00 \ x89 \ x01 \ x00 \ x00 \ x85 \ x03 \ x03 \ xcf \ xef \ x1f \ xea \ xe5\ x11 \ x88 \ xba \ x86

прослушивание 4444

activeDisps [['198.108.67.48', '\ r \ n'], ['198.108.67.48', 'GET /HTTP / 1.1 \ r \ nHost '], [' 198.108.67.48 ',' \ x16 \ x03 \ x01 \ x00 \ x89 \ x01 \ x00 \ x00 \ x85 \ x03 \ x03 \ xcf \ xef \ x1f \ xea \ xe5\ x11 \ x88 \ Xba \ x86' ]]

1 Ответ

0 голосов
/ 16 февраля 2019

Я нашел для меня рабочее решение: поскольку все вредоносные пакеты, похоже, содержат не буквенно-цифровые символы, я могу запустить сопоставление с шаблоном для полученных данных, чтобы определить, является ли это действительный клиент или нет:

import re

pattern = re.compile("^([0-9]\*\w+[0-9]\*)+$")

while True:

        clientName=''

        conn, addr = myPorts[0].accept()

        try:

            data = conn.recv(BUFFER_SIZE)

            dataStr=str(data)

            nameStr=dataStr.split("'")[1]

            clientName=nameStr.split(",")[0] #This is my own protocoll, might be different for you

        except:

            print("Connection failed")

        if pattern.match(clientName):

            listeningThread = threading.Thread(target=myListener, args=(conn, [addr[0], clientName]))

            listeningThread.daemon = True

            listeningThread.start()

        else:

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