Как разрешить TCP соединения только с локального хоста

Я хочу иметь возможность получать запрос на определенный порт только с локального хоста (оба из 127.0.0.1 а также my_local_ip);

Я попробовал следующее:

int localhost = (127 << 24) + 1; // 127.0.0.1
sock_address.sin_addr.s_addr = htonl(localhost);

Это позволяет мне подключаться только с 127.0.0.1 но не из фактического местного ip.
Я также попробовал:

char hostName[128] = "";
struct hostent     *pHost        = 0;
gethostname(hostName, sizeof(hostName));
pHost = gethostbyname(hostName);
memcpy(&sock_address.sin_addr, pHost->h_addr_list[0], pHost->h_length);

К этому я не смог связаться с 127.0.0.1Я смог подключиться с локальным ip, но на удаленные запросы тоже отвечали

Что я делаю неправильно? Есть ли другой путь?

Спасибо!

0

Решение

Из вашего приложения вы можете только установить, к каким интерфейсам будет привязан порт. В первом случае вы привязали его к интерфейсу обратной связи (lo, Айпи адрес 127.0.0.1) и это означает, что только вы можете подключиться к нему, потому что только ваш собственный хост достигает этого интерфейса. Если вы связываете порт с внешним интерфейсом, eth0 с IP-адресом 10.1.2.3 Например, внешние хосты могут подключаться к этому порту, если ни один брандмауэр не блокирует запрос на подключение.

Единственный способ сделать то, что вы хотите, это настроить фильтр пакетов (межсетевой экран) вашего локального компьютера, чтобы отклонять / отбрасывать запросы на соединение (пакеты SYN) на этот конкретный порт, поступающий с IP-адресов, которые не распознаются как ваши собственные. В этом случае удаленный хост будет думать, что ваш TCP-порт закрыт или заблокирован, в зависимости от того, как вы установите фильтр.

Ну … вы также можете принять любое соединение с любого интерфейса и немедленно закрыть его, если удаленный хост не является одним из ваших собственных IP-адресов, но по какой-то причине, я думаю, это то, что вы действительно хотите.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]