Dipecahkan: inti bersih dapatkan ip jarak jauh

Pembaharuan Terakhir: 09/11/2023

Tentu, mari kita mulai dengan membicarakan tentang .NET Core dan masalah mendapatkan alamat IP jarak jauh.

.NET Core adalah platform pengembang sumber terbuka dan lintas platform yang gratis untuk membangun berbagai jenis aplikasi, termasuk aplikasi dan layanan web. Namun, mendapatkan alamat IP jarak jauh di aplikasi .NET Core terkadang menimbulkan tantangan. Hal ini penting karena memiliki akses ke alamat IP klien memungkinkan peningkatan pencatatan, pengalaman yang dipersonalisasi, dan banyak lagi.

Untuk mengatasi ini, kita dapat memanfaatkan HttpContext yang disediakan oleh perpustakaan bawaan .NET Core.

Menerapkan Solusi

Kita mulai dengan mengakses HttpContext dalam metode pengontrol di mana kita memerlukan IP klien. Itu HttpKonteks objek berisi informasi khusus HTTP tentang permintaan HTTP individual.

Indeks IActionResult publik()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// logika tambahan…
}

Ini memberi Anda klien Alamat IP. Metode HttpContext.Connection.RemoteIpAddress mengembalikan alamat IP klien jarak jauh. Namun, perhatikan bahwa ini mungkin tidak selalu memberikan hasil yang diharapkan, terutama ketika server Anda berada di belakang penyeimbang beban atau menggunakan middleware header depan.

Pemahaman Lebih Dalam tentang Kode Etik

Kode C# yang disediakan menggunakan HttpKonteks objek, yang merupakan properti ControllerBase dan berisi informasi tentang permintaan HTTP. Ini mencakup item seperti informasi host, detail jalur, dan properti Connection yang sangat penting.

Properti Connection bertipe ConnectionInfo, dari Fitur Microsoft.AspNetCore.Http ruang nama. Di antara properti lainnya, properti ini berisi `RemoteIpAddress`, properti yang mengambil alamat IP dari permintaan HTTP.

Namun, server mungkin berada di belakang penyeimbang beban atau proksi. Perantara ini mungkin mengubah informasi permintaan HTTP asli, termasuk sumbernya Alamat IP. Jika hal ini terjadi, properti `RemoteIpAddress` memberikan alamat IP perangkat perantara, bukan alamat IP klien asli.

Solusi 'Middleware Header yang Diteruskan'

Untuk aplikasi yang berjalan di belakang perantara tersebut, .NET Core menyediakan `ForwardedHeadersMiddleware`, sebuah middleware yang bekerja dengan header 'X-Forwarded-*' untuk menyimpan detail permintaan HTTP asli.

Untuk mengaktifkan `ForwardedHeadersMiddleware`, tambahkan konfigurasi berikut ke kelas Startup.cs Anda.

Konfigurasi kekosongan publik (aplikasi IApplicationBuilder, IWebHostEnvironment env)
{
app.UseForwardedHeaders(ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

// ...
}

Memanfaatkan HttpContext dan Header yang Diteruskan

Anda kemudian dapat terus menggunakan HttpContext.Connection.RemoteIpAddress seperti sebelumnya, namun sekarang, jika tersedia, alamat IP klien akan dikembalikan dengan benar, meskipun server berada di belakang proxy atau penyeimbang beban.

Ingatlah bahwa dalam bidang pemrograman web yang kompleks, middleware dan penggunaan objek konteks yang benar seperti HttpKonteks dapat membuat tugas yang tampaknya sulit seperti mendapatkan IP jarak jauh menjadi cukup sederhana. Untuk mengambil alamat IP klien, kita perlu memahami seluk-beluk protokol HTTP, peran middleware seperti 'ForwardedHeadersMiddleware', dan kegunaannya. HttpKonteks obyek.

Pos terkait: