1

C/C++ を使用して Linux でサーバー ソフトウェアを開発しています。このソフトウェアは、インターネットからの要求のダウンロード速度を制限しますが、ローカル マシン (イントラネット) からの要求には制限を設定しません。

問題は、IPアドレスがローカルかどうかを判断する方法です.ネットワーク番号の設定を(おそらくルーターから)読み取ることで、c/c++を介してそれを行うことは可能ですか?

更新
ローカルIPと言うとき、それは社内からのものであることを意味します。たとえば、会社に 3 つのサブネットがあり (この会社にはインターネットへの DSL リンクしかない)、それらが 10.123.1.xxx、172.16.1.xxx、および 192.168.1.xxx であるとすると、これら 3 つのサブネットからのすべての IP アドレスローカルアドレスと見なす必要があります。

4

2 に答える 2

1

プライベート アドレスの範囲は次のとおりです。

10.0.0.0 - 10.255.255.255 (10/8 prefix)

172.16.0.0 - 172.31.255.255 (172.16/12 prefix)

192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

リンクローカル アドレス (169.254/16) を除外することもできます。

次に、コード内のIPアドレスを解析し(avahiまたは同様のものを使用してすべてのアドレスをファイルに保存し、各アドレスを個別に解析できるアドレスを取得するために)、これらのアドレスと一致することを確認できます. そうでない場合は、接続を制限します

編集

ローカルアドレスをリストするgetifaddrs関数の使用を検討することもできます

于 2013-11-14T13:39:10.347 に答える
0

接続を要求しているマシンの IP アドレスでを実行するtracerouteと、ルートが「会社外のゲートウェイ」(通常は ISP) を経由するかどうかを確認できるはずです。私の家の簡単な例は、私の内部ルーターが接続する Time Warner ゲートウェイです。クライアントへのルートが ISP を経由しない場合 (前述のように、DSL リンクがあるため、DSL エンドポイントの IP アドレスがわかっている必要があります)、それは内部要求です。これには、社内の IP アドレスの完全なマップを知る必要はありません。ルーターが把握していると想定できます。

この情報を取得するには、プログラム内からシステム コマンドを実行し、応答を解析します。

まず、(既知の「内部」および「外部」IP アドレスを使用して) コマンド ラインから実行し、違いを確認します。その後さらにサポートが必要な場合は、収集した情報で質問を更新してください。

于 2013-11-14T17:08:35.057 に答える