Bir kullanıcının istemci IP adresini ASP.NET'te nasıl edinebilirim?


387

Biz Request.UserHostAddressASP.NET IP adresini almak için, ama bu genellikle kullanıcının ISS IP adresi, örneğin bir bağlantı tıklandığında tam olarak kullanıcının makine IP adresidir. Gerçek IP Adresini nasıl alabilirim?

Örneğin, Yığın Taşması kullanıcı profilinde: "Son hesap etkinliği: 4 saat önce 86.123.127.8" den , ancak makine IP adresim biraz farklı. Yığın Taşması bu adresi nasıl alır?

Bazı web sistemlerinde bazı amaçlar için bir IP adresi kontrolü vardır. Örneğin, belirli bir IP adresiyle, kullanıcı 24 saatte bir indirme bağlantılarına yalnızca 5 tıklama alabilir mi? Bu IP adresi, çok çeşitli istemcilere veya Internet kullanıcılarına sahip bir İSS için değil benzersiz olmalıdır.

İyi anladım mı?


4
Genellikle aynı şeyi yaparlar ve paylaşılan IP adresleri için düzgün çalışmazlar. Bu alanda fazla bir şey yapılamaz.
Mehrdad Afshari

Burada çözmeye çalıştığınız sorun nedir, neden IP adresine ihtiyacınız olduğunu düşünüyorsunuz?
Steve

3
belirli bir bağlantı tıklamaları kontrol eden bir uygulama var ve belirli bir kullanıcı (IP ile) bir günde 5 kereden fazla bağlantıyı tıklatamazsınız. belirli bir kullanıcının?
Mehdi

Yanıtlar:


142

Diğerlerinin söylediği gibi, istediğini yapamazsın. Eğer çözmeye çalıştığınız sorunu açıklarsanız belki biri size yardımcı olabilir mi?

Örneğin

  • kullanıcılarınızı benzersiz bir şekilde tanımlamaya mı çalışıyorsunuz?
  • IP adresi yerine bir çerez veya oturum kimliği kullanabilir misiniz?

DüzenleSunucuda gördüğünüz adres, geniş bir aralık olacağını söylediğiniz gibi, ISS'nin adresi olmamalıdır. Geniş banttaki bir ev kullanıcısının adresi yönlendiricilerindeki adres olacaktır, bu nedenle evin içindeki her cihaz dışarıda aynı görünecektir, ancak yönlendirici, trafiğin her bir cihaza doğru bir şekilde yönlendirilmesini sağlamak için NAT kullanır. Bir ofis ortamından erişen kullanıcılar için adres tüm kullanıcılar için aynı olabilir. Kimlik için IP adresi kullanan siteler çok yanlış anlama riskini taşır - verdiğiniz örnekler iyi olanlardır ve genellikle başarısız olurlar. Örneğin ofisim İngiltere'de, kırılma noktası (internette "göründüğüm") ana BT tesisimizin bulunduğu başka bir ülkede, bu yüzden ofisimden IP adresim İngiltere'de değil gibi görünüyor. Bu nedenle İngiltere'ye yalnızca web içeriğine erişemiyorum, BBC iPlayer gibi). Herhangi bir zamanda, şirketimde aynı IP adresinden web'e erişiyor gibi görünen yüzlerce hatta binlerce insan olabilir.

Sunucu kodu yazarken gördüğünüz IP adresinin ne anlama geldiğinden asla emin olamazsınız. Bazı kullanıcılar bu şekilde hoşlanıyor. Bazı insanlar sizi daha fazla karıştırmak için kasıtlı olarak bir proxy veya VPN kullanır.

Makine adresinizin StackOverflow'da gösterilen IP adresinden farklı olduğunu söylediğinizde, makine adresinizi nasıl buluyorsunuz? Sadece yerel olarak ipconfigya da bunun gibi bir şey arıyorsanız , yukarıda özetlediğim nedenlerden dolayı farklı olmasını beklerdim. Dış dünyanın ne düşündüğünü iki kez kontrol etmek istiyorsanız whatismyipaddress.com/ adresine bir göz atın .

NAT üzerindeki bu Wikipedia bağlantısı size bu konuda bir arka plan sağlayacaktır.


Bu yüzden sunucu tarafı uygulamalarında IP adresi hakkında emin olamayacağımı anladım. istemci tarafı programlama çözüm olduğu anlamına gelir ?? örneğin bazı JavaScript kodları ile bunu yapabiliriz ??
Mehdi

12
HAYIR, bu anlamsız olurdu, müşteri "ev" ya da ofis için iç olacağını düşünüyor IP adresi, dış dünyada anlamsız olacaktır. Çoğu ev yönlendiricisi 192.168.1.xxx aralığındaki IP adreslerini dağıtır, bu nedenle binlerce makine kendi ağlarında aynı adrese sahiptir.
Steve

12
Hayır, benzersiz değil. NAT kullanan aynı yönlendiricinin arkasındaki iki kullanıcı aynı IP adresine sahip olacaktır. Gerçekten bunu okumanız gerektiğini düşünüyorum, düzenlememdeki bağlantıya bakın.
Steve

1
Öyleyse neden AWS, Azure vb.Gibi şirketler güvenlik grubu kurallarında ip adresini kullanıyor ve yalnızca bu ip adresinin VM'ye bağlanmasına izin veriyor?

2
@ user5950947: Çünkü Azure statik genel IP adresine sahip bir şirket olmasını bekliyor. Şirketinizin herkese açık IP adresinden erişebileceğini varsaymak güvenlidir, bu nedenle hoş bir ek güvenlik özelliğidir. Ancak IP adresleri taklit edilebilir veya ağınız hacklenebilir, bu yüzden tek güvenlik olmamalıdır.
Deantwo

449

Genellikle web sitenizi ziyaret eden birinin IP adresini bilmek istersiniz. ASP.NET'in bunu yapmanın birkaç yolu olsa da, gördüğümüz en iyi yollardan biri ServerVariables koleksiyonunun "HTTP_X_FORWARDED_FOR" u kullanmaktır.

İşte nedeni ...

Bazen ziyaretçileriniz bir proxy sunucusunun veya yönlendiricinin arkasındadır ve standart Request.UserHostAddressyalnızca proxy sunucusunun veya yönlendiricinin IP adresini alır. Böyle bir durumda kullanıcının IP adresi sunucu değişkeninde ("HTTP_X_FORWARDED_FOR") saklanır.

Yapmak istediğimiz şey önce "HTTP_X_FORWARDED_FOR" u kontrol etmek ve eğer boşsa geri dönmektir ServerVariables("REMOTE_ADDR").

Bu yöntem kusursuz olmamasına rağmen, daha iyi sonuçlara yol açabilir. Aşağıda VB.NET'teki, James Crowley'in "Gotcha: HTTP_X_FORWARDED_FOR birden fazla IP adresi döndürüyor" adlı blog yazısından alınan ASP.NET kodu verilmiştir.

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

24
Herkes HTTP_X_FORWARDED_FOR veya benzer başlıkları taklit edebildiği için bu kodu güvenlik amacıyla kullanmadığınızdan emin olun. Bu nedenle, güvenlikle ilgili günlük kaydı veya güvenlik denetimleri için kullanırsanız, bir saldırgan kolayca atlayabilir.
dr. kötü

4
Bağlantınızdan, what we actually needed to be doing was take the last IP addressancak kodunuz ilkini alır addresses[0]. Hangisi doğru?
Nelson Rothermel

4
Üzerinde @NelsonRothermel Tabanlı en.wikipedia.org/wiki/X-Forwarded-For#Format istemci (yerine önceki vekil) daha sonra kullanmak isterseniz ilk .
Richard

4
@ dr.evil Peki bunun yerine ne önerirsiniz? Çünkü belirtilen IP'lere göre WCF hizmetleri için erişim ayarlamak istiyorum.
krypru

7
addresses.Length != 0hiçbir zaman 0 olamaz çünkü gerekli değildir.
James Wilkins

78

GÜNCELLEME: Bruno Lopes sayesinde. Birkaç ip adresi gelebiliyorsa, bu yöntemi kullanmanız gerekir:

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

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

        return Request.ServerVariables["REMOTE_ADDR"];
    }

3
Başka bir cevapta belirtildiği gibi, HTTP_X_FORWARDED_FOR virgülle ayrılmış bir IP listesi olabilir.
Bruno Lopes

Bu işleve yanıt olarak her seferinde :: 1 alıyorum. Tam IP adresi alamıyorum ???
farhangdon

1
yerel ana bilgisayarda :: 1 dönecektir. productino ortamında deneyin ve iyi olmalı.
Benny Margalit

1
@farhangdon, @Bat_Programmer aşağıda yazdığı gibi aşağıdaki kod yerel ana bilgisayardaki ip adresini döndürürSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny

BUNU YAPMAYIN! Listedeki ilk IP adresini kullanmamaya dikkat edin. Ortadaki adam saldırılarını ve başlık sahtekarlığını önlemek için bilinen en doğru girişten başlayarak bilinen proxy IP'lerini atlamanız gerekir.
Jpsy

24

C # ise bu şekilde bakın, çok basit

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();

8
Her iki sunucu değişkeni de null olabilirse, istisna atabilir.
Michael Freidgeim

Buraya Talep Referansı nedir? I ServerVariables bulunamadı
Brownbagger11

23

Kullanıcının IP adresini başka ne düşünüyorsunuz? Ağ bağdaştırıcısının IP adresini istiyorsanız, bir Web uygulamasında yapmanın olası bir yolu olmadığından korkuyorum. Kullanıcınız NAT veya başka şeylerin arkasındaysa, IP'yi de alamazsınız.

Güncelleme : Kullanıcıyı sınırlamak için IP kullanan Web siteleri olsa da (rapidshare gibi), NAT ortamlarında düzgün çalışmazlar.


22

Sanırım deneyimlerimi hepinizle paylaşmalıyım. Bazı durumlarda REMOTE_ADDR aradığınızı alamayacağınızı görüyorum . Örneğin, sahnenin arkasında bir Yük Dengeleyiciniz varsa ve İstemcinin IP'sini almaya çalışıyorsanız sorun yaşarsınız. IP maskeleme yazılımımla kontrol ettim, ayrıca meslektaşlarımın farklı kıtalarda olduğunu da kontrol ettim. İşte benim çözümüm.

Bir müşterinin IP'sini bilmek istediğimde, benzersiz olup olmadıklarını belirleyebilmem için mümkün olan her kanıtı almaya çalışıyorum:

Burada, istemci tarafının tam IP'sini almak istiyorsanız, size yardımcı olabilecek başka bir sever-var buldum. bu yüzden kullanıyorum: HTTP_X_CLUSTER_CLIENT_IP

HTTP_X_CLUSTER_CLIENT_IP her zaman istemcinin tam IP'sini alır. Her durumda size değer vermiyorsa, o zaman HTTP_X_FORWARDED_FOR'u aramalısınız , çünkü size istemci IP'sini almak için ikinci en iyi adaydır ve daha sonra REMOTE_ADDR var. üç tanesi onları izlemek için en iyi şeyi buldum.

Umarım bu bazı adamlara yardımcı olur.


Http_x _... başlıklarının remote_addr değişkenine göre kolayca taklit edilebileceğini söylemek gerekir. Bu nedenle remote_addr, istemci IP adresi için en güvenilir kaynak olmaya devam eder.
Ciro Corvino

1
@CiroCorvino haklısın ama web siteniz Yük Dengeleyici arkasında çalışan bir sunucuda barındırdığınızda (zaten benim yazımda bahsettiğim gibi) sonra remote_addr size aradığınız IP'yi vermeyecektir. Söylediklerini deneyimledim ama çözüme girdiğimde belirttiğim şey benim için en iyi sonucu verdi.
KMX

Üzgünüm @ KMX, aslında ben de remote_addr ve http_x_forwarded bir birleşimi kullanarak isteğin kökeni hakkında bazı varsayımlar çıkarmak için kullanın. Yayınınızı düzenlerseniz, oyumu güncelleyeceğim
Ciro Corvino

15

Kullanabilirsiniz:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();

1
teşekkürler, benim için bu gerçekten yerel ana IP benim döndüren tek yöntemdir.
Benny Margalit

Aslında yerel ana bilgisayar ip adresi almak için kullandıkSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit

1
Bu kod sadece benim için çalışıyor ve sırasıyla GetValue (0) ve GetValue (1) kullanarak IPv6 ve IPv4 elde edebiliyoruz. Teşekkürler
Raj Baral

Ancak, bu keman yürütürken bir hata alıyorum Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
vibs2006

OP kendi yerel ana bilgisayarının adresini değil, uzak web kullanıcısının IP'sini nasıl alacağınızı sorar.
t.durden

13

IP adresleri, "yedi katmanlı yığın" içindeki Ağ katmanının bir parçasıdır. Ağ katmanı, IP adresiyle yapmak istediği her şeyi yapabilir. Proxy sunucusu, NAT, geçiş veya herhangi bir şeyle böyle olur.

Uygulama katmanı hiçbir şekilde IP adresine bağlı olmamalıdır. Özellikle, bir IP Adresinin bir ağ bağlantısının bir ucunun tanımlayıcısından başka bir tanımlayıcı olması amaçlanmamıştır. Bir bağlantı kapatılır kapatılmaz, aynı kullanıcının IP adresinin değişmesini beklemelisiniz.


1
Her şey iyi ve güzel, ancak çok kiracılı bir sistemin bir müşterisi, kullanıcılarının hesaplarının yalnızca belirtilen bir IP adresinden giriş yapabilmesini istediğinde ne yaparsınız?
Ronnie Overby

1
Daha sonra size sunucunuzun hangi IP adresini göreceğini söylemelidirler. Belirli bir adresin olması gerekiyorsa, bir NAT veya benzerinin arkasında olamazlar.
John Saunders

@RonnieOverby Aynı durumdayım. Hangi IP'den bağlandıklarını bilmem gerekiyor ve beyaz listemde olmalı. Ardından uygulama, IP'lerine bağlı olarak belirli işlevleri açabilir veya kapatabilir. Müşterinin istediği budur.
t.durden

10

Şimdiye kadar verilen tüm cevaplar standart olmayan ancak çok yaygın olan X-Forwarded-Forbaşlığı dikkate almaktadır. ForwardedAyrıştırılması biraz daha zor olan standartlaştırılmış bir başlık vardır. Bazı örnekler aşağıdaki gibidir:

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

Bir istemcinin IP adresini belirlerken bu başlıkların her ikisini de dikkate alan bir sınıf yazdım.

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;
        }
    }
}

Çözümümü doğrulamak için kullandığım bazı birim testleri aşağıdadır:

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; }
        }
    }
}

9

CloudFlare kullanıyorsanız, bu Uzantı Yöntemini deneyebilirsiniz :

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;
    }
}

sonra

string IPAddress = Request.GetIPAddress();

Ve F5 veya Palo Alto mu kullanıyorsunuz?
Kiquenet

8
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;

7

Yapabileceğiniz şey, kullanıcının yönlendirici IP'sini ve ayrıca iletilen IP'yi saklamak ve her iki IP'yi de [Harici Genel ve Dahili Özel] kullanarak güvenilir hale getirmeye çalışmaktır. Ancak yine birkaç gün sonra istemciye yönlendiriciden yeni dahili IP atanabilir, ancak daha güvenilir olacaktır.


5

Cevaplar birleştiren @Tony ve @mangokun , ben şu uzatma yöntemi oluşturduk:

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;
    }
}

Neden kullanıyorsun HTTP_X_FORWARDED_FORama kullanmıyorsun X_FORWARDED_FOR? Bunlar aynı mı?
Igor Yalovoy

3

ashx dosyasında kullanın

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"];
}

2
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();
                }
            }
        }
    }
}

kullanmak;

string _ip = this.GetClientIP();

0

Kolay. Deneyin:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

sadece bu :))


1
FYI, yukarıdaki kod sadece Asp.Net Core'da çalışıyor ve normal Asp.Net linkinde
çalışmıyor

-1

Merhaba çocuklar bulacaksınız kodların çoğu size istemci ip adresi değil sunucu ip adresi dönecektir. Bu kod doğru istemci ip adresini döndürür. Bir deneyin. Daha fazla bilgi için bunu kontrol et

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

javascript kullanarak yerel ip adresinizi almak için bu kodu script etiketinizin içine koyabilirsiniz

<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>

ve Genel IP adresinizi almak için bu kodu komut dosyası etiketinizin içine koyun

  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>


-7

Deneyin:

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;
}

Bu sunucu ip adresini döndürür
Sreekumar P

Bu, kullanıcıların bilgisayarında değil, bir sunucuda çalışan bir web uygulaması olan asp.net ile ilgilidir.
doekman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.