Сокеты C# - Запрет IP-адресов
У меня есть вопрос по сокетам в C#. У меня есть сервер, который я хочу запретить подключаться к клиентам, на которых был заблокирован IP-адрес. Оба сделаны с.NET 4.0 .
Сервер работает через Интернет (No-ip hostname), а не только в локальной сети. Проблема в том, что IP-адрес клиентов меняется каждый день, поэтому я не знаю, как запретить таких клиентов постоянно. Я знаю, что могу забанить их, просто сравнив IP-адрес Клиента с любым забаненным адресом.
if ( banned_ip == clients_ip )
{
client.Disconnect();
}
Но как мне получить IP-адрес Клиента, который я могу запретить навсегда?
Если вам нужно больше информации, я опубликую их.
Джо
3 ответа
Постоянный запрет IP-адресов - плохая идея, поскольку многие провайдеры используют динамическую адресацию. Не существует простого способа достичь того, о чем вы просите, без побочного ущерба.
Я думаю, что единственный способ работать - это реализовать простой механизм аутентификации.
Очевидно, что нет никакого способа, пока вы не получите MAC-адреса своих клиентов (однако лучший способ - обработать его через аппаратный брандмауэр).
Посмотрите это, если вам нужно найти MAC-адреса: надежный метод для получения MAC-адреса машины в C#
Я согласен с Марком, что вы должны запретить на уровне брандмауэра.
Если вы хотите получить IP-адрес клиента, используйте свойство RemoteEndPoint сокета, а затем вы можете преобразовать эту конечную точку (родительский класс) в IPEndPoint и использовать свойство Address и ToString для получения хорошего формата IPv4 или IPv6.