2011-04-25 16 views
-1

私はこのスレッドでこの質問を読んで:How to get the IP address of the server on which my C# application is running on?ローカルIPを取得するには?

をしかし、このコードは私のために働いていません。

string hostname = Dns.GetHostName(); 
IPHostEntry ip = Dns.GetHostEntry(hostname); 

それは私の引数で、この2行目ERRを与える:

フィールド初期化子は、 非静的フィールド、メソッド、または プロパティを参照することはできません。

マシンのローカルIPを文字列で保存したいとします。それで全部です!

string myIpAddress = Request.UserHostAddress ; 

これは、IPv4アドレスまたはIPv6アドレスであってもよい:

ASP.Netで
+4

は、.NET 2.0,3.5および4.0で動作します。どのバージョンの.NETをターゲットにしていますか? –

+0

私は4.0を使用しています。 –

答えて

2
public static String GetIP() 
{ 
    String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

    if(string.IsNullOrEmpty(ip)) 
    { 
     ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
    } 

    return ip; 
} 
+0

ありがとうAkhtar ...助けて! –

1
//This will return the collection of local IP's 
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); 

public static bool IsLocalIpAddress(string host) 
{ 
    try 
    { // get host IP addresses 
    IPAddress[] hostIPs = Dns.GetHostAddresses(host); 
    // get local IP addresses 
    IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); 

    // test if any host IP equals to any local IP or to localhost 
    foreach (IPAddress hostIP in hostIPs) 
    { 
     // is localhost 
     if (IPAddress.IsLoopback(hostIP)) return true; 
     // is local address 
     foreach (IPAddress localIP in localIPs) 
     { 
     if (hostIP.Equals(localIP)) return true; 
     } 
    } 
    } 
    catch { } 
    return false; 
} 
//Call this method this will tell Is this your local Ip 
IsLocalIpAddress("localhost"); 
0

は、あなたが要求はRequestオブジェクトから作られた先のIPアドレスを取得することができます。調べるには、可能System.Net.IPAddressにそれを解析:

IPAddress addr = IPAddress.Parse(myIpAddress) ; 

あなたははるかに複雑な(面白い?)疑問になり、現在のホストのIPアドレスに興味があれば。

任意の特定のホスト(および「ホスト」の「個別のコンピュータ」)には、複数のNIC(ネットワークインタフェースカード)がインストールされている場合があります。各NIC(IPネットワークに接続されていると仮定)には、—というIPアドレスが割り当てられており、IPv4アドレスとIPv6アドレスが割り当てられている可能性があります。

さらに、各NICはマルチホームであり、追加のIPアドレス(IPv4および/またはIPv6のいずれかが割り当てられている)を持つことができます。

次に、それぞれのホストが同じループバックアドレスを共有するIPループバックアダプタがあります。 IPv4の場合、ループバックアドレスは127/8サブネット全体として定義されます(つまり、IPアドレス127.0.0.0 – 127.255.255.255はすべてIPv4ループバックアドレスです)。 IPv6は単一のループバックアドレス(:: 1)のみを割り当てます。

したがって、ホストの有利な点から、コンテキスト(ループバックアダプタかNICか、どちらがIpv4かIPv6か)を知る必要があります。そして、その場合でも、単一のIP住所。あなたは「私のIPアドレス」を意味するのか、あなた自身に尋ねなければなりません。