4

ローカルホスト経由の接続のみを受け入れる ipv4 サーバーがあります (を使用INADDR_LOOPBACK)。このサーバーをデュアルスタック ipv6/ipv4 に変換したいと考えています。ただし、 を使用すると、 へのin6addr_loopback接続のみが受け入れられ::1ます。

を使用してipv4およびipv6接続を同時に受け入れることができることがわかりましたin6addr_anyが、これによりどこからでも接続が許可されるため、特定のケースでは役に立ちません。

::1ipv6 localhost ( ) と ipv4 localhost ( 127.0.0.1) に同時にバインドできますか?

4

2 に答える 2

4

私の知る限り、それは不可能です。

行う必要があるのは、2 つのソケットを作成することです。1 つは INADDR_LOOPBACK にバインドされ、もう 1 つは in6addr_loopback にバインドされます。次に、選択したマルチプレクサ (poll、select、epoll など) を使用して、両方を同時に待機できます。

アップデート

検討したい回​​避策がいくつかあります。これらの回避策の両方で、にバインドしin6addr_anyます。

  1. 接続が確立されたら、リモート アドレスを確認し、127.0.0.1 または ::1 でない場合は閉じます。IP アドレスでの接続の動作は理想的ではありませんが (接続は拒否されるのではなく、確立され、すぐに閉じられます)、これが純粋にアプリケーション内で実行できることは素晴らしいことです。
  2. OS の IP スタックの設定を調整して、非ループバック IP からのポートへの接続を拒否します。これは、Linux でiptablesを使用して確実に実行できます。この動作はより理想的ですが、アプリケーションの外部で構成する必要があります。
于 2010-02-17T00:43:58.227 に答える
-4

サーバーがデュアル スタックであるという理由だけで、ローカルホストのみのアプリは本当に必要なのでしょうか? 1つだけ選んで一緒に行くことはできますか?

于 2010-02-17T00:46:48.737 に答える