0

特定のポートで localhost からのみリクエストを取得できるようにしたい (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で接続できましたが、リモートリクエストにも応答しました

私は何を間違っていますか?他に方法はありますか?

ありがとう!

4

1 に答える 1

1

アプリケーションからは、ポートがバインドされるインターフェースのみを設定できます。lo最初のケースでは、それをループバック インターフェイス ( 、IP アドレス)にバインドしました127.0.0.1。これは、自分のホストだけがそのインターフェイスに到達するため、自分だけがそれに接続できることを意味します。eth0たとえばIP アドレスを使用してポートを外部インターフェイスにバインドすると10.1.2.3、接続要求をブロックするファイアウォールがなければ、外部ホストがそのポートに接続できる可能性があります。

必要なことを行う唯一の方法は、ローカル マシンのパケット フィルタ (ファイアウォール) を設定して、自分のものとして認識されていない IP アドレスから着信する特定のポートへの接続要求 (SYN パケット) を拒否/ドロップすることです。この場合、リモート ホストは、フィルタの設定方法に応じて、TCP ポートが閉じているかブロックされていると判断します。

ええと...リモートホストが自分のIPアドレスの1つではない場合、任意のインターフェースからの接続を受け入れて即座に閉じることもできますが、何らかの理由でそれが本当に必要なことだと思います.

于 2013-06-13T11:07:13.293 に答える