0

私のサイトを閲覧しているユーザーの IP アドレスを見つけるのに助けが必要です (C# コードを使用)。

システムの IP アドレス、ISP の IP アドレス、ネットワーク アドレス、および IPV4 と IPV6 について混乱しています。

以下は、他のソースから取得したコードです。

protected string GetUserIP()
{
        string userIP = string.Empty;
        HttpContext context = System.Web.HttpContext.Current;

        string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipAddress))
        {
            string[] addresses = ipAddress.Split(',');
            if (addresses.Length != 0)
            {
                userIP = addresses[0];
            }
        }
        else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
        {
            userIP = HttpContext.Current.Request.UserHostAddress;
        }

        return userIP;
}

しかし、ここでは期待した結果が得られません。

これをローカルホストでテストすると、127.0.0.1 が得られました

これを開発サーバーにデプロイし、ローカル マシンでページを参照すると、別のアドレスが表示されました。

別のマシンで同じ URL にアクセスしようとしましたが、IP アドレスは同じです。

同じネットワーク内の開発サーバーにデプロイされたページにアクセスするために使用しているシステム。

それで、それは私のコードが返したネットワークIPですか..?

ipconfig コマンドを使用して自分の IP を見つけると、それはまた別のものになるからです。

また、サードパーティのサイト ( http://www.whatismyip.com/ip-address-lookup/ ) を使用して自分の IP を確認したところ、予想した実際の IP が表示されました。C# コードを使用して実際の IP を取得するにはどうすればよいですか?

私の最終的な目標は、Maxmind City DB を使用して自分のサイトを閲覧しているユーザーの場所の詳細を取得することですが、そのためには閲覧ユーザーの IP を渡す必要があります。

string ip = GetUserIP();
string db = “GeoIP2-City.mmdb";
var reader = new DatabaseReader(db);
var city = reader.City(ip);
double? lat = city.Location.Latitude;
double? lang = city.Location.Longitude;

上記のコードから取得した IP については、Maxmind DB から情報を取得しようとしたときに例外 (データベースに IP が見つかりません) が発生しましたが、「whatismyip」Web サイトから取得した IP については、Maxmind DB から詳細を取得しました。 .

私の質問は明確です。誰か入力があれば教えてください。

ありがとう、シャラス

4

1 に答える 1