Использование winsock Я хочу, чтобы мое серверное приложение принимало соединения только из определенной (скажем, 192.168.0.0/24
) подсети.Принимать соединения только из определенной подсети
Я имею в виду два варианта: адрес
Check клиента каждый раз, когда я
accept
соединение.while (true) { SOCKET clientSocket = accept(serverSocket, (SOCKADDR *)&clientAddress, &addressLenght); if (clientSocket == INVALID_SOCKET || clientAddress.sin_addr.S_un.S_un_b.s_b1 != 192 || clientAddress.sin_addr.S_un.S_un_b.s_b2 != 168 || clientAddress.sin_addr.S_un.S_un_b.s_b3 != 0) { closesocket(clientSocket); continue; } ... }
Узнайте локальный адрес для соответствующей сети и использовать его в качестве аргумента в
name
bind
SOCKADDR_IN serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(13666); serverAddress.sin_addr.S_un.S_addr = inet_addr("192.168.0.1"); result = bind(serverSocket, (SOCKADDR *)&serverAddress, sizeof(serverAddress));
Какие еще варианты у меня есть?
P.S .: Мне сказали, что есть лучшее решение. Но я не могу понять.
Я НАДЕЮСЬ, что адреса фактически загружены из файла конфигурации, в противном случае каждый раз, когда сеть нуждается в реструктуризации и, следовательно, перенумерована, сетевые менеджеры будут «любить» * вас! –
@EmilioGaravaglia да, конечно. Приведенный выше код является лишь примером. – Igonato
«Мне сказали, что есть лучшее решение», - но они не потрудились бы объяснить хотя бы немного? –