Bagaimana cara mendapatkan alamat IP klien pengguna di ASP.NET?

387

Kita harus Request.UserHostAddressmendapatkan alamat IP di ASP.NET, tetapi ini biasanya alamat IP ISP pengguna, bukan alamat IP mesin pengguna yang misalnya mengklik tautan. Bagaimana saya bisa mendapatkan Alamat IP asli?

Misalnya, dalam profil pengguna Stack Overflow, itu adalah: "Aktivitas akun terakhir: 4 jam yang lalu dari 86.123.127.8" , tetapi alamat IP mesin saya agak berbeda. Bagaimana cara Stack Overflow mendapatkan alamat ini?

Dalam beberapa sistem web ada pemeriksaan alamat IP untuk beberapa tujuan. Misalnya, dengan alamat IP tertentu, untuk setiap 24 jam dapatkah pengguna hanya memiliki 5 klik pada tautan unduhan? Alamat IP ini harus unik, bukan untuk ISP yang memiliki banyak klien atau pengguna Internet.

Apakah saya mengerti dengan baik?

Mehdi
sumber
4
Mereka biasanya melakukan hal yang sama dan tidak berfungsi dengan benar untuk alamat IP bersama. Tidak banyak yang bisa dilakukan di area ini.
Mehrdad Afshari
Apa masalah yang Anda coba selesaikan di sini, mengapa Anda pikir Anda memerlukan alamat IP?
Steve
3
saya memiliki aplikasi yang memeriksa klik tautan tertentu, dan pengguna tertentu (berdasarkan IP) tidak dapat mengklik tautan lebih dari 5 kali dalam sehari. satu pengguna tertentu?
Mehdi

Jawaban:

142

Seperti yang orang lain katakan, Anda tidak bisa melakukan apa yang Anda minta. Jika Anda menggambarkan masalah yang Anda coba selesaikan, mungkin seseorang dapat membantu?

Misalnya

  • apakah Anda mencoba mengidentifikasi pengguna Anda secara unik?
  • Bisakah Anda menggunakan cookie, atau ID sesi mungkin bukan alamat IP?

EditAlamat yang Anda lihat di server tidak boleh menjadi alamat ISP, seperti yang Anda katakan itu akan menjadi sangat banyak. Alamat untuk pengguna rumahan pada broadband akan menjadi alamat di router mereka, sehingga setiap perangkat di dalam rumah akan tampak di luar sama, tetapi router menggunakan NAT untuk memastikan bahwa lalu lintas diarahkan ke setiap perangkat dengan benar. Untuk pengguna yang mengakses dari lingkungan kantor alamatnya mungkin sama untuk semua pengguna. Situs yang menggunakan alamat IP untuk ID menjalankan risiko salah besar - contoh yang Anda berikan adalah yang baik dan sering gagal. Misalnya kantor saya di Inggris, titik pelarian (tempat saya "nampak" berada di internet) adalah di negara lain tempat fasilitas TI utama kami, jadi dari kantor saya alamat IP saya tampaknya bukan di Inggris. Untuk alasan ini saya tidak dapat mengakses konten web UK saja, seperti BBC iPlayer). Pada waktu tertentu akan ada ratusan, atau bahkan ribuan orang di perusahaan saya yang tampaknya mengakses web dari alamat IP yang sama.

Saat Anda menulis kode server, Anda tidak pernah bisa memastikan apa yang merujuk ke alamat IP yang Anda lihat. Beberapa pengguna menyukainya dengan cara ini. Beberapa orang sengaja menggunakan proxy atau VPN untuk lebih mengacaukan Anda.

Ketika Anda mengatakan alamat mesin Anda berbeda dengan alamat IP yang ditunjukkan pada StackOverflow, bagaimana Anda mengetahui alamat mesin Anda? Jika Anda hanya mencari secara lokal menggunakan ipconfigatau sesuatu seperti itu saya harapkan itu berbeda karena alasan yang saya uraikan di atas. Jika Anda ingin mengecek apa yang dunia luar pikirkan, lihat whatismyipaddress.com/ .

Tautan Wikipedia ini tentang NAT akan memberi Anda beberapa latar belakang tentang hal ini.

Steve
sumber
jadi saya mengerti dalam aplikasi sisi server kita tidak bisa yakin tentang alamat IP. itu berarti pemrograman sisi klien adalah solusinya ?? maksud Anda misalnya dengan beberapa kode JavaScript yang dapat kita lakukan ??
Mehdi
12
TIDAK, ini tidak ada gunanya, alamat IP klien "berpikir" itu akan menjadi internal ke rumah atau kantor, itu akan menjadi tidak berarti di dunia luar. Misalnya sebagian besar router rumah membagikan alamat IP dalam kisaran 192.168.1.xxx, sehingga ribuan mesin memiliki alamat yang sama di jaringan mereka sendiri.
Steve
12
Tidak, ini tidak unik. Dua pengguna di belakang router yang sama menggunakan NAT akan memiliki alamat IP yang sama. Saya pikir Anda perlu membaca ini, lihat tautan di edit saya.
Steve
1
Jadi mengapa perusahaan seperti AWS, Azure dll menggunakan alamat ip dalam aturan grup keamanan dan hanya mengizinkan alamat ip itu untuk terhubung ke VM?
2
@ user5950947: Karena Azure mengharapkan Anda menjadi perusahaan dengan alamat IP publik statis. Aman untuk berasumsi bahwa perusahaan Anda hanya akan pernah mengakses dari alamat IP publiknya, jadi itu adalah fitur keamanan tambahan yang bagus. Tetapi alamat IP bisa dipalsukan atau jaringan Anda bisa diretas, jadi seharusnya tidak pernah menjadi satu-satunya keamanan.
Deantwo
449

Seringkali Anda ingin mengetahui alamat IP seseorang yang mengunjungi situs web Anda. Sementara ASP.NET memiliki beberapa cara untuk melakukan ini, salah satu cara terbaik yang kami lihat adalah dengan menggunakan "HTTP_X_FORWARDED_FOR" dari koleksi ServerVariables.

Inilah sebabnya ...

Terkadang pengunjung Anda berada di belakang server proxy atau router dan standar Request.UserHostAddresshanya menangkap alamat IP dari server proxy atau router. Ketika hal ini terjadi, alamat IP pengguna kemudian disimpan dalam variabel server ("HTTP_X_FORWARDED_FOR").

Jadi yang ingin kita lakukan adalah pertama-tama memeriksa "HTTP_X_FORWARDED_FOR" dan jika itu kosong, kita cukup kembali ServerVariables("REMOTE_ADDR").

Meskipun metode ini tidak mudah, ini dapat menghasilkan hasil yang lebih baik. Di bawah ini adalah kode ASP.NET di VB.NET, diambil dari posting blog James Crowley "Gotcha: HTTP_X_FORWARDED_FOR mengembalikan beberapa alamat 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
mangokun
sumber
24
Pastikan untuk tidak menggunakan kode ini untuk tujuan keamanan karena siapa pun dapat memalsukan HTTP_X_FORWARDED_FOR atau header serupa. Jadi jika Anda menggunakan ini untuk pencatatan terkait keamanan atau pemeriksaan keamanan, penyerang dapat memintasnya dengan mudah.
dr. evil
4
Dari tautan Anda what we actually needed to be doing was take the last IP address,, tetapi kode Anda yang pertama addresses[0]. Yang mana yang benar?
Nelson Rothermel
4
@NelsonRothermel Berdasarkan pada en.wikipedia.org/wiki/X-Forwarded-For#Format jika Anda menginginkan klien (daripada proxy sebelumnya) kemudian gunakan yang pertama .
Richard
4
@ dr.evil Jadi, apa yang akan Anda usulkan? Karena saya ingin mengatur akses untuk layanan WCF dengan IP yang ditentukan.
krypru
7
addresses.Length != 0tidak perlu, karena itu tidak pernah bisa 0.
James Wilkins
78

UPDATE: Terima kasih kepada Bruno Lopes. Jika beberapa alamat ip bisa datang maka perlu menggunakan metode ini:

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

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

        return Request.ServerVariables["REMOTE_ADDR"];
    }
algreat
sumber
3
Seperti tercantum dalam jawaban lain, HTTP_X_FORWARDED_FOR dapat berupa daftar IP, dipisahkan dengan koma.
Bruno Lopes
Menanggapi fungsi saya hanya mendapatkan :: 1 setiap kali. Bisakah saya mendapatkan alamat IP lengkap ???
farhangdon
1
itu akan mengembalikan :: 1 pada host lokal. coba di lingkungan productino dan itu harus baik-baik saja.
Benny Margalit
1
@farhangdon, kode berikut akan mengembalikan alamat ip di host lokal seperti yang ditulis @Bat_Programmer di bawah iniSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
JANGAN LAKUKAN INI! Berhati-hatilah untuk tidak hanya menggunakan alamat IP pertama dalam daftar. Anda hanya harus melewati IP proxy yang dikenal mulai dari entri paling kanan untuk menghindari serangan man-in-the-middle dan spoofing header.
Jpsy
24

Jika c # lihat dengan cara ini, sangat sederhana

string clientIp = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? 
                   Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();
Juan David Nicholls Cardona
sumber
8
Jika kedua variabel server bisa nol, itu bisa melempar pengecualian.
Michael Freidgeim
Apa itu Referensi Referensi di sini? Saya ServerVariables tidak ditemukan
Brownbagger11
23

Apa lagi yang Anda anggap sebagai alamat IP pengguna? Jika Anda ingin alamat IP adaptor jaringan, saya khawatir tidak ada cara yang mungkin untuk melakukannya di aplikasi Web. Jika pengguna Anda berada di belakang NAT atau hal lain, Anda juga tidak bisa mendapatkan IP.

Pembaruan : Meskipun ada situs Web yang menggunakan IP untuk membatasi pengguna (seperti rapidshare), mereka tidak berfungsi dengan benar di lingkungan NAT.

Mehrdad Afshari
sumber
22

Saya pikir saya harus berbagi pengalaman saya dengan Anda semua. Yah saya melihat dalam beberapa situasi REMOTE_ADDR TIDAK akan memberi Anda apa yang Anda cari. Misalnya, jika Anda memiliki Load Balancer di belakang layar dan jika Anda mencoba untuk mendapatkan IP Klien maka Anda akan berada dalam masalah. Saya memeriksanya dengan perangkat lunak IP masking saya dan saya juga memeriksa dengan kolega saya berada di benua yang berbeda. Jadi, inilah solusi saya.

Ketika saya ingin mengetahui IP klien, saya mencoba memilih setiap bukti yang mungkin sehingga saya bisa menentukan apakah mereka unik:

Di sini saya menemukan beberapa sever yang dapat membantu Anda semua jika Anda ingin mendapatkan IP yang tepat dari sisi klien. jadi saya menggunakan: HTTP_X_CLUSTER_CLIENT_IP

HTTP_X_CLUSTER_CLIENT_IP selalu memberi Anda IP yang tepat dari klien. Dalam hal apa pun jika tidak memberikan Anda nilai, Anda harus mencari HTTP_X_FORWARDED_FOR karena itu adalah kandidat terbaik kedua untuk mendapatkan IP klien dan var REMOTE_ADDR yang mungkin atau mungkin tidak mengembalikan IP Anda tetapi kepada saya memiliki semua ini tiga adalah apa yang saya temukan untuk memantau mereka.

Saya harap ini membantu beberapa orang.

KMX
sumber
Perlu mengatakan bahwa http_x _... header dapat dengan mudah dipalsukan sehubungan dengan variabel remote_addr. Dan karenanya remote_addr tetap menjadi sumber yang paling dapat diandalkan untuk alamat ip klien.
Ciro Corvino
1
@CiroCorvino Anda benar tetapi ketika Anda memiliki situs web Anda di-host pada server yang berjalan di belakang Load Balancer (seperti yang telah saya sebutkan di posting saya) maka remote_addr tidak akan memberi Anda IP yang Anda cari. Saya telah mengalami apa yang Anda katakan tetapi ketika saya menggali solusi apa yang telah saya nyatakan paling cocok untuk saya.
KMX
Maaf @KMX, pada dasarnya saya juga menggunakan kombinasi remote_addr dan http_x_forwarded untuk menyimpulkan beberapa asumsi tentang asal usul permintaan. Jika Anda mengedit posting Anda, saya memperbarui suara saya
Ciro Corvino
15

Kamu bisa menggunakan:

System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
Bat_Programmer
sumber
1
terima kasih, bagi saya ini adalah satu-satunya metode yang benar-benar mengembalikan IP saya pada host lokal.
Benny Margalit
Sebenarnya apa yang saya gunakan untuk mendapatkan alamat ip host lokal adalahSystem.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
Benny Margalit
1
Kode ini hanya berfungsi untuk saya dan saya bisa mendapatkan IPv6 dan IPv4 masing-masing menggunakan GetValue (0) dan GetValue (1). Terima Kasih Dipilih!
Raj Baral
Namun, saya mendapatkan kesalahan saat mengeksekusi di fiddle Request for the permission of type 'System.Net.DnsPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
vibs2006
OP menanyakan cara mendapatkan IP pengguna web jarak jauh, bukan alamat localhost-nya sendiri.
t.durden
13

Alamat IP adalah bagian dari lapisan Jaringan dalam "tumpukan tujuh lapisan". Lapisan Jaringan dapat melakukan apa pun yang ingin dilakukan dengan alamat IP. Itulah yang terjadi dengan server proxy, NAT, relay, atau apa pun.

Lapisan Aplikasi tidak boleh bergantung pada alamat IP dengan cara apa pun. Secara khusus, Alamat IP tidak dimaksudkan untuk menjadi pengidentifikasi apa pun selain pengenal dari satu ujung koneksi jaringan. Segera setelah koneksi ditutup, Anda harus mengharapkan alamat IP (dari pengguna yang sama) berubah.

John Saunders
sumber
1
Itu semua baik dan bagus, tetapi apa yang Anda lakukan ketika satu pelanggan dari sistem multi-tenant menuntut agar akun pengguna mereka hanya dapat login dari alamat IP yang ditentukan?
Ronnie Overby
1
Kemudian mereka harus memberi tahu Anda alamat IP yang akan dilihat server Anda. Jika mereka perlu ada alamat tertentu, maka mereka tidak akan bisa berada di belakang NAT atau sejenisnya.
John Saunders
@RonnieOverby saya dalam situasi yang sama. Saya perlu tahu IP apa yang mereka hubungkan dan harus ada di daftar putih saya. Kemudian aplikasi dapat mengaktifkan atau menonaktifkan fungsi tertentu berdasarkan IP mereka. Inilah yang diinginkan pelanggan.
t.durden
10

Semua tanggapan sejauh ini memperhitungkan tajuk yang tidak terstandarisasi, tetapi sangat umum X-Forwarded-For. Ada Forwardedheader standar yang sedikit lebih sulit untuk diuraikan. Beberapa contoh adalah sebagai berikut:

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

Saya telah menulis sebuah kelas yang memperhitungkan kedua header ini saat menentukan alamat IP klien.

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

Di bawah ini adalah beberapa unit test yang saya gunakan untuk memvalidasi solusi saya:

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; }
        }
    }
}
dana
sumber
9

Jika Anda menggunakan CloudFlare, Anda dapat mencoba Metode Ekstensi ini :

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

kemudian

string IPAddress = Request.GetIPAddress();
Tony
sumber
Dan menggunakan F5 atau Palo Alto?
Kiquenet
8
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
GorkemHalulu
sumber
7

Yang dapat Anda lakukan adalah menyimpan IP router dari pengguna Anda dan juga IP yang diteruskan dan mencoba membuatnya andal menggunakan kedua IP [External Public dan Internal Private]. Tetapi sekali lagi setelah beberapa hari klien dapat ditugaskan IP internal baru dari router tetapi akan lebih dapat diandalkan.

Shahid
sumber
5

Menggabungkan jawaban dari @Tony dan @mokokun , saya telah membuat metode ekstensi berikut:

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;
    }
}
Nitesh
sumber
Mengapa Anda menggunakan HTTP_X_FORWARDED_FORtetapi tidak X_FORWARDED_FOR? Apakah mereka sama?
Igor Yalovoy
3

gunakan dalam file 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"];
}
Behnam Mohammadi
sumber
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();
                }
            }
        }
    }
}

Menggunakan;

string _ip = this.GetClientIP();
VolkanCetinkaya
sumber
0

Itu mudah. ​​Coba saja:

var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

hanya itu :))

akbar
sumber
1
FYI, kode di atas hanya berfungsi di Asp.Net Core dan bukan tautan
Dobin
-1

Halo teman-teman Sebagian besar kode yang Anda temukan akan mengembalikan alamat ip server Anda bukan alamat ip klien. Namun, kode ini mengembalikan alamat ip klien yang benar. Cobalah. Untuk info lebih lanjut, periksa ini

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

untuk mendapatkan alamat ip lokal Anda menggunakan javascript Anda dapat menggunakan memasukkan kode ini di dalam tag skrip Anda

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

dan Untuk mendapatkan alamat ip publik Anda, Anda dapat menggunakan memasukkan kode ini di dalam tag skrip Anda

  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>
Shubham
sumber
-3

Gunakan ini

Dns.GetHostEntry(Dns.GetHostName())
pengguna1657913
sumber
4
Dns.GetHostEntry Metode GetHostEntry menanyakan server DNS untuk alamat IP yang dikaitkan dengan nama host atau alamat IP. Rujuk msdn.microsoft.com/en-us/library/ms143998(v=vs.80).aspx
Milind Thakkar
-7

Mencoba:

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;
}
Nilesh Umaretiya
sumber
Ini mengembalikan alamat ip server
Sreekumar P
Ini tentang asp.net, yang merupakan aplikasi web, yang berjalan di server, bukan di komputer pengguna.
doekman