web-dev-qa-db-ja.com

ASP.NETでサーバーのIPアドレスを取得しますか?

ASP.NETページを呼び出すサーバーのIPアドレスを取得するにはどうすればよいですか? Responseオブジェクトに関するものを見てきましたが、c#で非常に新しいです。トンありがとう。

35
jergason

これは動作するはずです:

 //this gets the ip address of the server pc

  public string GetIPAddress()
  {
     IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated.
     IPAddress ipAddress = ipHostInfo.AddressList[0];

     return ipAddress.ToString();
  }

http://wec-library.blogspot.com/2008/03/gets-ip-address-of-server-pc-using-c.html

OR

 //while this gets the ip address of the visitor making the call
  HttpContext.Current.Request.UserHostAddress;

http://www.geekpedia.com/KB32_How-do-I-get-the-visitors-IP-address.html

56
TStamper

Request.ServerVariables["LOCAL_ADDR"];

これにより、マルチホームサーバーの要求が着信したIPが提供されます。

33
MrPurpleStreak

上記は、DNS呼び出しを必要とするため低速です(使用できない場合は明らかに動作しません)。以下のコードを使用して、現在のPCのローカルIPV4アドレスと対応するサブネットマスクのマップを取得できます。

public static Dictionary<IPAddress, IPAddress> GetAllNetworkInterfaceIpv4Addresses()
{
    var map = new Dictionary<IPAddress, IPAddress>();

    foreach (var ni in NetworkInterface.GetAllNetworkInterfaces())
    {
        foreach (var uipi in ni.GetIPProperties().UnicastAddresses)
        {
            if (uipi.Address.AddressFamily != AddressFamily.InterNetwork) continue;

            if (uipi.IPv4Mask == null) continue; //ignore 127.0.0.1
            map[uipi.Address] = uipi.IPv4Mask;
        }
    }
    return map;
}

警告:これはまだMonoには実装されていません

14
mythz
  //this gets the ip address of the server pc
  public string GetIPAddress()
  {
     string strHostName = System.Net.Dns.GetHostName();
     //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); <-- Obsolete
     IPHostEntry ipHostInfo = Dns.GetHostEntry(strHostName);
     IPAddress ipAddress = ipHostInfo.AddressList[0];

     return ipAddress.ToString();
  }
7
Alberto León

これはIPv4で機能します:

public static string GetServerIP()
{            
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());

    foreach (IPAddress address in ipHostInfo.AddressList)
    {
        if (address.AddressFamily == AddressFamily.InterNetwork)
            return address.ToString();
    }

    return string.Empty;
}
5

以下のスナップショットは Mkyong から取得したもので、google chrome.Inside "Request Headers"タブの開発者コンソール内にネットワークタブを表示します。以下に示すように、すべてのサーバー変数のリストが表示されます。

enter image description here

以下は、アプリケーションにヒットするクライアントのIPアドレスを取得するコードの数行です。

//gets the ipaddress of the machine hitting your production server              
string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

if (ipAddress == "" || ipAddress == null)  
{                                     
  //gets the ipaddress of your local server(localhost) during development phase                                                                         
  ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];              
}

//Output:                                                                           
For production server - 122.169.106.247 (random)
For localhost         - ::1
0
Tahir77667