Jak uzyskać adres IP klienta użytkownika w ASP.NET?

Mamy Request.UserHostAddress aby uzyskać adres IP w ASP.NET, ale zazwyczaj jest to adres IP dostawcy Internetu użytkownika, a nie dokładnie adres IP maszyny użytkownika, który na przykład kliknął link. Jak Mogę uzyskać prawdziwy adres IP?

Na przykład w profilu użytkownika Stack Overflow jest to: "Ostatnia aktywność na koncie: 4 godziny temu od 86.123.127.8" , ale mój adres IP komputera jest nieco inny. Jak Stack Overflow dostaje ten adres?

W niektórych systemach internetowych istnieje IP sprawdzanie adresu dla niektórych celów. Na przykład, przy określonym adresie IP, co 24 godziny użytkownik może mieć tylko 5 kliknięć na linki do pobierania? Ten adres IP powinien być unikalny, a nie dla ISP, który ma ogromną liczbę klientów lub użytkowników Internetu.

Czy dobrze zrozumiałem?
Author: Peter Mortensen, 2009-04-09

20 answers

Jak mówili inni, nie możesz robić tego, o co prosisz. Jeśli opiszesz problem, który próbujesz rozwiązać, może ktoś pomoże?

Np.

  • czy próbujesz jednoznacznie zidentyfikować swoich użytkowników?
  • czy zamiast adresu IP można użyć pliku cookie lub ID sesji?

Edytuj adres, który widzisz na serwerze, nie powinien być adresem ISP, ponieważ mówisz, że byłby to ogromny zakres. Adres dla użytkownika domowego w sieci szerokopasmowej będzie adres w routerze, więc każde urządzenie wewnątrz domu będzie wyświetlane na zewnątrz, aby być takie same, ale router używa NAT, aby zapewnić, że ruch jest kierowany do każdego urządzenia poprawnie. Dla użytkowników korzystających ze środowiska biurowego adres może być taki sam dla wszystkich użytkowników. Strony, które używają adresu IP do identyfikacji, ryzykują, że bardzo się pomylisz - podane przykłady są dobre i często zawodzą. Na przykład moje biuro znajduje się w Wielkiej Brytanii, punkt breakout (gdzie "wydaje się" być na internet) znajduje się w innym kraju, gdzie znajduje się nasz główny ośrodek IT, więc z mojego biura mój adres IP wydaje się nie być w Wielkiej Brytanii. Z tego powodu nie mogę uzyskać dostępu tylko do treści internetowych w Wielkiej Brytanii, takich jak BBC iPlayer). W każdej chwili w mojej firmie byłyby setki, a nawet tysiące osób, które wydają się mieć dostęp do sieci z tego samego adresu IP.

Kiedy piszesz kod serwera, nigdy nie możesz być pewien, do czego odnosi się adres IP, który widzisz. Niektórzy użytkownicy lubią to w ten sposób. Niektóre ludzie celowo używają proxy lub VPN, aby jeszcze bardziej cię dezorientować.

Kiedy mówisz, że twój adres maszyny różni się od adresu IP pokazanego w StackOverflow, w jaki sposób poznajesz adres maszyny? Jeśli szukasz lokalnie używając ipconfig lub czegoś podobnego, spodziewałbym się, że będzie inaczej z powodów, które opisałem powyżej. Jeśli chcesz dokładnie sprawdzić, co myśli świat zewnętrzny, zajrzyj do whatismyipaddress.com/.

This Wikipedia link on NAT dostarczy Ci informacji na ten temat.

 143
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-18 10:27:37

Często będziesz chciał poznać adres IP osoby odwiedzającej Twoją stronę. While ASP.NET ma kilka sposobów, aby to zrobić jednym z najlepszych sposobów, jakie widzieliśmy, jest użycie "HTTP_X_FORWARDED_FOR" kolekcji ServerVariables.

Oto dlaczego...

Czasami odwiedzający są za serwerem proxy lub routerem, a standardowy Request.UserHostAddress przechwytuje tylko adres IP serwera proxy lub routera. W takim przypadku adres IP użytkownika jest następnie przechowywany na serwerze zmienna ("HTTP_X_FORWARDED_FOR").

Więc to, co chcemy zrobić, to najpierw sprawdzić "HTTP_X_FORWARDED_FOR" i jeśli jest puste, po prostu zwracamy ServerVariables("REMOTE_ADDR").

Chociaż ta metoda nie jest niezawodna, może prowadzić do lepszych wyników. Poniżej znajduje się ASP.NET kod w VB.NET, zaczerpnięte z wpisu Jamesa Crowleya na blogu "Gotcha: HTTP_X_FORWARDED_FOR zwraca wiele adresów IP"

C #

protected string GetIPAddress()
{
    System.Web.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)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

VB.NET

Public Shared Function GetIPAddress() As String
    Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
    Dim sIPAddress As String = context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If String.IsNullOrEmpty(sIPAddress) Then
        Return context.Request.ServerVariables("REMOTE_ADDR")
    Else
        Dim ipArray As String() = sIPAddress.Split(New [Char]() {","c})
        Return ipArray(0)
    End If
End Function
 460
Author: mangokun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 10:10:17

UPDATE: Dzięki Bruno Lopesowi. Jeśli może pojawić się kilka adresów ip, należy użyć tej metody:

    private string GetUserIP()
    {
        string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipList))
        {
            return ipList.Split(',')[0];
        }

        return Request.ServerVariables["REMOTE_ADDR"];
    }
 84
Author: algreat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-13 20:09:48

Jeśli jest c # patrz w ten sposób, jest bardzo proste

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
 25
Author: Juan David Nicholls Cardona,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 22:55:36

Co jeszcze uważasz za adres IP użytkownika? Jeśli chcesz adres IP karty sieciowej, obawiam się, że nie ma możliwości zrobienia tego w aplikacji internetowej. Jeśli twój użytkownik stoi za NAT lub innymi rzeczami, nie możesz też uzyskać IP.

Update: chociaż istnieją strony internetowe, które używają IP do ograniczania użytkownika( jak rapidshare), nie działają poprawnie w środowiskach NAT.

 24
Author: mmx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-19 20:23:41

Myślę, że powinienem podzielić się z Wami moimi doświadczeniami. Widzę, że w niektórych sytuacjach REMOTE_ADDR nie dostaniesz tego, czego szukasz. Na przykład, jeśli masz Load Balancer za sceną i jeśli próbujesz uzyskać adres IP klienta, będziesz miał kłopoty. Sprawdziłem to za pomocą mojego oprogramowania do maskowania IP, a także sprawdziłem z moimi kolegami z różnych kontynentów. Oto moje rozwiązanie.

Kiedy chcę poznać IP klienta, staram się wybrać każdy możliwe dowody, więc mogę ustalić, czy są unikalne:

Tutaj znalazłem inny Sever-var, który może pomóc wszystkim, jeśli chcesz uzyskać dokładne IP po stronie klienta. więc używam: HTTP_X_CLUSTER_CLIENT_IP

HTTP_X_CLUSTER_CLIENT_IP zawsze podaje dokładny adres IP klienta. W każdym przypadku, jeśli nie daje Ci wartości, powinieneś poszukać HTTP_X_FORWARDED_FOR , ponieważ jest to drugi najlepszy kandydat, aby uzyskać adres IP klienta, a następnie REMOTE_ADDR var, który może lub nie zwróci Ci IP, ale dla mnie posiadanie wszystkich tych trzech jest najlepszą rzeczą do ich monitorowania.

Mam nadzieję, że to pomoże niektórym facetom.

 23
Author: KMX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 16:27:24

Możesz użyć:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
 15
Author: Bat_Programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 00:20:23

Adresy IP są częścią warstwy sieciowej w "stosie siedmiowarstwowym". Warstwa sieciowa może robić, co chce, z adresem IP. Tak się dzieje z serwerem proxy, NAT, relay lub czymkolwiek.

Warstwa aplikacji nie powinna w żaden sposób zależeć od adresu IP. W szczególności adres IP nie jest identyfikatorem niczego innego niż identyfikator jednego końca połączenia sieciowego. Gdy tylko połączenie zostanie zamknięte, należy spodziewać się adresu IP adres (tego samego Użytkownika) do zmiany.

 13
Author: John Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-09 18:32:25

Wszystkie odpowiedzi do tej pory uwzględniają niestandardowy, ale bardzo wspólny, X-Forwarded-For nagłówek. Istnieje ustandaryzowany Forwarded nagłówek, który jest nieco trudniejszy do przetworzenia. Niektóre przykłady są następujące:

Forwarded: for="_gazonk"
Forwarded: For="[2001:db8:cafe::17]:4711"
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
Forwarded: for=192.0.2.43, for=198.51.100.17

Napisałem klasę, która bierze pod uwagę oba te nagłówki przy określaniu adresu IP klienta.

using System;
using System.Web;

namespace Util
{
    public static class IP
    {
        public static string GetIPAddress()
        {
            return GetIPAddress(new HttpRequestWrapper(HttpContext.Current.Request));
        }

        internal static string GetIPAddress(HttpRequestBase request)
        {
            // handle standardized 'Forwarded' header
            string forwarded = request.Headers["Forwarded"];
            if (!String.IsNullOrEmpty(forwarded))
            {
                foreach (string segment in forwarded.Split(',')[0].Split(';'))
                {
                    string[] pair = segment.Trim().Split('=');
                    if (pair.Length == 2 && pair[0].Equals("for", StringComparison.OrdinalIgnoreCase))
                    {
                        string ip = pair[1].Trim('"');

                        // IPv6 addresses are always enclosed in square brackets
                        int left = ip.IndexOf('['), right = ip.IndexOf(']');
                        if (left == 0 && right > 0)
                        {
                            return ip.Substring(1, right - 1);
                        }

                        // strip port of IPv4 addresses
                        int colon = ip.IndexOf(':');
                        if (colon != -1)
                        {
                            return ip.Substring(0, colon);
                        }

                        // this will return IPv4, "unknown", and obfuscated addresses
                        return ip;
                    }
                }
            }

            // handle non-standardized 'X-Forwarded-For' header
            string xForwardedFor = request.Headers["X-Forwarded-For"];
            if (!String.IsNullOrEmpty(xForwardedFor))
            {
                return xForwardedFor.Split(',')[0];
            }

            return request.UserHostAddress;
        }
    }
}

Poniżej kilka testów jednostkowych, których użyłem do walidacji mojego rozwiązania:

using System.Collections.Specialized;
using System.Web;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UtilTests
{
    [TestClass]
    public class IPTests
    {
        [TestMethod]
        public void TestForwardedObfuscated()
        {
            var request = new HttpRequestMock("for=\"_gazonk\"");
            Assert.AreEqual("_gazonk", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv6()
        {
            var request = new HttpRequestMock("For=\"[2001:db8:cafe::17]:4711\"");
            Assert.AreEqual("2001:db8:cafe::17", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv4()
        {
            var request = new HttpRequestMock("for=192.0.2.60;proto=http;by=203.0.113.43");
            Assert.AreEqual("192.0.2.60", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedIPv4WithPort()
        {
            var request = new HttpRequestMock("for=192.0.2.60:443;proto=http;by=203.0.113.43");
            Assert.AreEqual("192.0.2.60", Util.IP.GetIPAddress(request));
        }

        [TestMethod]
        public void TestForwardedMultiple()
        {
            var request = new HttpRequestMock("for=192.0.2.43, for=198.51.100.17");
            Assert.AreEqual("192.0.2.43", Util.IP.GetIPAddress(request));
        }
    }

    public class HttpRequestMock : HttpRequestBase
    {
        private NameValueCollection headers = new NameValueCollection();

        public HttpRequestMock(string forwarded)
        {
            headers["Forwarded"] = forwarded;
        }

        public override NameValueCollection Headers
        {
            get { return this.headers; }
        }
    }
}
 11
Author: dana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 04:47:20

Jeśli używasz CloudFlare, możesz wypróbować tę metodę rozszerzenia :

public static class IPhelper
{
    public static string GetIPAddress(this HttpRequest Request)
    {
        if (Request.Headers["CF-CONNECTING-IP"] != null) return Request.Headers["CF-CONNECTING-IP"].ToString();

        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) return Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

        return Request.UserHostAddress;
    }
}

Then

string IPAddress = Request.GetIPAddress();
 10
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-23 22:03:38
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
 8
Author: GorkemHalulu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 07:38:15

To, co możesz zrobić, to zapisać adres IP routera użytkownika, a także adres IP przekazywany i spróbować uczynić go niezawodnym, korzystając zarówno z IPs [zewnętrzny publiczny, jak i wewnętrzny prywatny]. Ale ponownie po kilku dniach klient może zostać przypisany nowy wewnętrzny adres IP z routera, ale będzie bardziej niezawodny.

 7
Author: Shahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-04 15:22:47

Łącząc odpowiedzi z @Tony i @ mangokun , stworzyłem następującą metodę rozszerzenia:

public static class RequestExtensions
{
    public static string GetIPAddress(this HttpRequest Request)
    {
        if (Request.Headers["CF-CONNECTING-IP"] != null) return Request.Headers["CF-CONNECTING-IP"].ToString();

        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (!string.IsNullOrEmpty(ipAddress))
            {
                string[] addresses = ipAddress.Split(',');
                if (addresses.Length != 0)
                {
                    return addresses[0];
                }
            }
        }

        return Request.UserHostAddress;
    }
}
 6
Author: Nitesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-07 19:58:43

Użyj w pliku ashx

public string getIP(HttpContext c)
{
    string ips = c.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!string.IsNullOrEmpty(ips))
    {
        return ips.Split(',')[0];
    }
    return c.Request.ServerVariables["REMOTE_ADDR"];
}
 3
Author: Behnam Mohammadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-09 07:49:39
public static class Utility
{
    public static string GetClientIP(this System.Web.UI.Page page)
    {
        string _ipList = page.Request.Headers["CF-CONNECTING-IP"].ToString();
        if (!string.IsNullOrWhiteSpace(_ipList))
        {
            return _ipList.Split(',')[0].Trim();
        }
        else
        {
            _ipList = page.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"];
            if (!string.IsNullOrWhiteSpace(_ipList))
            {
                return _ipList.Split(',')[0].Trim();
            }
            else
            {
                _ipList = page.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (!string.IsNullOrWhiteSpace(_ipList))
                {
                    return _ipList.Split(',')[0].Trim();
                }
                else
                {
                    return page.Request.ServerVariables["REMOTE_ADDR"].ToString().Trim();
                }
            }
        }
    }
}

Use;

string _ip = this.GetClientIP();
 2
Author: VolkanCetinkaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-22 16:49:05

Cześć chłopaki większość kodów, które znajdziesz zwróci ci adres IP serwera, a nie adres IP klienta .jednak ten kod zwraca poprawny adres IP klienta.Spróbuj. Aby uzyskać więcej informacji, sprawdź to

Https://www.youtube.com/watch?v=Nkf37DsxYjI

Aby uzyskać lokalny adres ip za pomocą javascript możesz użyć umieść ten kod wewnątrz znacznika script

<script>
    var RTCPeerConnection = /*window.RTCPeerConnection ||*/
     window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

         if (RTCPeerConnection) (function () {
             var rtc = new RTCPeerConnection({ iceServers: [] });
             if (1 || window.mozRTCPeerConnection) {      
                 rtc.createDataChannel('', { reliable: false });
             };

             rtc.onicecandidate = function (evt) {

                 if (evt.candidate)
                     grepSDP("a=" + evt.candidate.candidate);
             };
             rtc.createOffer(function (offerDesc) {
                 grepSDP(offerDesc.sdp);
                 rtc.setLocalDescription(offerDesc);
             }, function (e) { console.warn("offer failed", e); });


             var addrs = Object.create(null);
             addrs["0.0.0.0"] = false;
             function updateDisplay(newAddr) {
                 if (newAddr in addrs) return;
                 else addrs[newAddr] = true;
                 var displayAddrs = Object.keys(addrs).filter(function
(k) { return addrs[k]; });
                 document.getElementById('list').textContent =
displayAddrs.join(" or perhaps ") || "n/a";
             }

             function grepSDP(sdp) {
                 var hosts = [];
                 sdp.split('\r\n').forEach(function (line) { 
                     if (~line.indexOf("a=candidate")) {   
                         var parts = line.split(' '),   
                             addr = parts[4],
                             type = parts[7];
                         if (type === 'host') updateDisplay(addr);
                     } else if (~line.indexOf("c=")) {      
                         var parts = line.split(' '),
                             addr = parts[2];
                         updateDisplay(addr);
                     }
                 });
             }
         })(); else
         {
             document.getElementById('list').innerHTML = "<code>ifconfig| grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
             document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";

         }




</script>
<body>
<div id="list"></div>
</body>

I do uzyskania publicznego adresu ip możesz użyć umieść ten kod wewnątrz znacznika script

  function getIP(json) {
    document.write("My public IP address is: ", json.ip);
  }


<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
 0
Author: Shubham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-31 05:05:31

In NuGet package install Microsoft.AspNetCore.HttpOverrides Następnie spróbuj:

public class ClientDeviceInfo
    {
        private readonly IHttpContextAccessor httpAccessor;

        public ClientDeviceInfo(IHttpContextAccessor httpAccessor)
        {
            this.httpAccessor = httpAccessor;
        }

        public string GetClientLocalIpAddress()
        {
            return httpAccessor.HttpContext.Connection.LocalIpAddress.ToString();
        }

        public string GetClientRemoteIpAddress()
        {
            return httpAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
        }

        public string GetClientLocalPort()
        {
            return httpAccessor.HttpContext.Connection.LocalPort.ToString();
        }

        public string GetClientRemotePort()
        {
            return httpAccessor.HttpContext.Connection.RemotePort.ToString();
        }
     }
 0
Author: Husam Ebish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-25 21:09:09

To proste.Spróbuj:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

Po Prostu:))

 -1
Author: akbar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-29 14:39:16

Użyj tego

Dns.GetHostEntry(Dns.GetHostName())
 -3
Author: user1657913,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-19 12:10:40

Spróbuj:

using System.Net;

public static string GetIpAddress()  // Get IP Address
{
    string ip = "";     
    IPHostEntry ipEntry = Dns.GetHostEntry(GetCompCode());
    IPAddress[] addr = ipEntry.AddressList;
    ip = addr[2].ToString();
    return ip;
}
public static string GetCompCode()  // Get Computer Name
{   
    string strHostName = "";
    strHostName = Dns.GetHostName();
    return strHostName;
}
 -7
Author: Nilesh Umaretiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-27 09:59:46