4

リモート コンピュータには、 LANVPNの 2 つのアドレスがあります。

次のコードでLAN IPアドレスを取得しようとしました:

hostent *host = gethostbyname(hostname);
if (host) strcpy(ip, inet_ntoa(*((struct in_addr *)host->h_addr)));

そのため、 LANが返されることもありますが、 VPNが返されることもあります。h_addr_list フィールドに多くのアドレスがあることはわかっていますが、どのアドレスがローカルかを知るにはどうすればよいですか?

GetAdaptersInfo() を使用しようとしましたが、ローカル IP かどうかを判断するフィールドがありますが、コンピューターの IP アドレスを返すだけです。リモート コンピューターの IP を取得する方法がわかりません。

どなたか、アドバイスをお願いします!

4

2 に答える 2

2

あなたの質問によると、コンピューターのLAN IPを取得し、LANまたはVPNの両方であるリモートコンピューターのIPを取得できると述べています。リモート コンピューターのどの IP が LAN 上にあるかを判断するには、サブネット テストを使用できます。もちろん、VPN は別のサブネット上にあると仮定します。基本的に、コンピューターの IP の最初の 2 ~ 3 オクテットが一致するかどうかをテストできます。リモート IP の 2 ~ 3 オクテットの これが私が考えることができる唯一の方法です。

したがって、リモート IP を取得できると言うようにループして、コンピューターのオクテットのローカル IP アドレスと照合します。

于 2012-11-08T04:18:24.790 に答える
0

この問題をいじってみたところ、セキュリティ上の問題により、リモート文字列のアダプターを公開できないことがわかりました。したがって、どの IP アドレスが VPN であるかを正確に知る方法はありません。

また、VPN アドレスは VPN サーバーによって作成されます。したがって、その VPN アドレスは、ローカル IP に似たものであってもかまいません。つまり、VPN アドレスを推測することはできません。

于 2012-12-20T09:51:00.613 に答える