2016-04-07 6 views
0
私はクライアントマシンのIPアドレスを読みたい

、私はこのためのコードの行の下に使用しています -正しいIPアドレスを読み取るには?

UserIP = Dns.GetHostAddresses(Dns.GetHostName())[1].ToString(); 

は、いくつかのマシンでは、それは次のように正しいIPアドレスを返して - 10.50.207.154が、いくつかのマシンのためにそれを返しますIPアドレスのような - FE80 :: 25AB:4248:C134:23C6%29

(例 - 10.50.207.154)のようなIPアドレスを取得する方法を最初の1?

+2

、私のためにこの作業をしようと、クライアントマシンのIPアドレスを取得します。これは有効なIPアドレスです。 – Pikamander2

+0

...無効なIPv4アドレスです。 – AJNeufeld

答えて

4

彼らは両方のIPアドレスです。 「正しい」ものはIPv4です。長い方はIPv6です。

あなたはwrite a simple regex to detect IPv4ことができますが、私はあなたが間違ってIPv6が、彼らは非常にそうしているときのように、IPアドレスではないアドレスを棄却している感があります。

1

は(https://en.wikipedia.org/wiki/IPv6)[これは、IPv6アドレスです]

private string GetIPAddress() 
     { 
      string IpAddress; 
      IpAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

      if (IpAddress == "" || IpAddress == null) 
      { 
       IpAddress = Request.ServerVariables["REMOTE_ADDR"]; 

       if (IpAddress == "::1" || IpAddress == "localhost") 
       { 
        IPAddress[] ipArray = Dns.GetHostAddresses(Dns.GetHostName()); 
        foreach (IPAddress ip in ipArray) 
        { 
         //InterNetwork for IPV4 
         if (ip.AddressFamily == AddressFamily.InterNetwork) 
         { 
          IpAddress = ip.ToString(); 
          break; 
         } 
        } 
       } 
      } 

      return IpAddress; 
     } 
関連する問題