Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# ASP.NET MVC में क्लाइंट का IP एड्रेस कैसे प्राप्त करें?

नेटवर्क पर हर मशीन का एक यूनिक आइडेंटिफायर होता है। जैसे आप मेल में लेटर भेजने के लिए एड्रेस लिखते हैं, वैसे ही कंप्यूटर नेटवर्क पर विशिष्ट कंप्यूटर्स को डेटा भेजने के लिए यूनिक आइडेंटिफायर का उपयोग करते हैं। आज अधिकांश नेटवर्क्स, इंटरनेट पर सभी कंप्यूटर्स सहित, TCP/IP प्रोटोकॉल का उपयोग संचार के मानक के रूप में करते हैं। TCP/IP प्रोटोकॉल में, कंप्यूटर के लिए यूनिक आइडेंटिफायर को इसका IP एड्रेस कहा जाता है।

विधि 1: HttpRequest.UserHostAddress प्रॉपर्टी

कंट्रोलर के अंदर

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public string Index()
        {
            string ipAddress = Request.UserHostAddress;
            return ipAddress;
        }
    }
}

कंट्रोलर के बाहर (हेल्पर क्लास में)

using System.Web;

namespace DemoMvcApplication.Helpers
{
    public static class DemoHelperClass
    {
        public static string GetIPAddress()
        {
            string ipAddress = HttpContext.Current.Request.UserHostAddress;
            return ipAddress;
        }
    }
}

विधि 2: ServerVariables का उपयोग करना

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public string Index()
        {
            // REMOTE_ADDR सर्वर वेरिएबल से IP प्राप्त करें
            string ipAddress = Request.ServerVariables["REMOTE_ADDR"];
            return ipAddress;
        }
    }
}

आउटपुट उदाहरण

C# ASP.NET MVC में क्लाइंट का IP एड्रेस कैसे प्राप्त करें?

चूंकि हम एप्लिकेशन को स्थानीय रूप से चला रहे हैं, लोकलहोस्ट के लिए IP एड्रेस ::1 है। नाम localhost सामान्यतः IPv4 लूपबैक एड्रेस 127.0.0.1 और IPv6 लूपबैक एड्रेस ::1 पर रिज़ॉल्व होता है।

प्रॉक्सी/लोड बैलेंसर के पीछे वास्तविक क्लाइंट IP प्राप्त करना

जब एप्लिकेशन प्रॉक्सी, लोड बैलेंसर, या CDN (जैसे Cloudflare, AWS ALB, Nginx) के पीछे होता है, तो UserHostAddress प्रॉक्सी का IP लौटाएगा, वास्तविक क्लाइंट का नहीं।

X-Forwarded-For हेडर चेक करें

public static string GetClientIpAddress(HttpRequestBase request)
{
    // X-Forwarded-For हेडर चेक करें (प्रॉक्सी द्वारा सेट)
    string ip = request.Headers["X-Forwarded-For"];
    
    if (!string.IsNullOrEmpty(ip))
    {
        // X-Forwarded-For में कॉमा-सैपरेटेड IPs हो सकते हैं: "client, proxy1, proxy2"
        // पहला आमतौर पर मूल क्लाइंट होता है
        string[] ips = ip.Split(',');
        return ips[0].Trim();
    }
    
    // X-Real-IP हेडर चेक करें (कुछ प्रॉक्सीज द्वारा उपयोग किया जाता है)
    ip = request.Headers["X-Real-IP"];
    if (!string.IsNullOrEmpty(ip))
        return ip.Trim();
    
    // CF-Connecting-IP (Cloudflare-विशिष्ट)
    ip = request.Headers["CF-Connecting-IP"];
    if (!string.IsNullOrEmpty(ip))
        return ip.Trim();
    
    // फॉलबैक: सर्वर वेरिएबल
    return request.ServerVariables["REMOTE_ADDR"];
}

ASP.NET Core में (अतिरिक्त संदर्भ)

public class HomeController : Controller
{
    public IActionResult Index()
    {
        // डायरेक्ट कनेक्शन
        var ip = HttpContext.Connection.RemoteIpAddress?.ToString();
        
        // फॉरवर्डेड हेडर्स के साथ (Startup में UseForwardedHeaders() आवश्यक)
        var forwardedIp = HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
        
        return Content($"Direct: {ip}, Forwarded: {forwardedIp}");
    }
}

// Startup.cs में फॉरवर्डेड हेडर्स इनेबल करें
services.Configure(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    options.KnownNetworks.Clear(); // सभी नेटवर्क्स पर भरोसा करें (सावधानी से उपयोग करें)
    options.KnownProxies.Clear();
});

app.UseForwardedHeaders();

IP एड्रेस वैलिडेशन हेल्पर

public static class IpHelper
{
    public static bool IsValidIpv4(string ip)
    {
        return IPAddress.TryParse(ip, out var address) && address.AddressFamily == AddressFamily.InterNetwork;
    }
    
    public static bool IsValidIpv6(string ip)
    {
        return IPAddress.TryParse(ip, out var address) && address.AddressFamily == AddressFamily.InterNetworkV6;
    }
    
    public static bool IsPrivateIp(string ip)
    {
        if (!IPAddress.TryParse(ip, out var address)) return false;
        var bytes = address.GetAddressBytes();
        
        // IPv4 प्राइवेट रेंजेस: 10.x.x.x, 172.16-31.x.x, 192.168.x.x
        if (address.AddressFamily == AddressFamily.InterNetwork)
        {
            return bytes[0] == 10 ||
                   (bytes[0] == 172 && bytes[1] >= 16 && bytes[1] <= 31) ||
                   (bytes[0] == 192 && bytes[1] == 168);
        }
        
        // IPv6 यूनिक लोकल एड्रेस (fc00::/7)
        return bytes[0] == 0xfc || bytes[0] == 0xfd;
    }
}

सुरक्षा नोट: क्लाइंट-सप्लाईड हेडर्स (X-Forwarded-For) पर आंख बंद करके भरोसा न करें। भरोसेमंद प्रॉक्सीज की सूची कॉन्फिगर करें और UseForwardedHeaders को उचित KnownProxies/KnownNetworks के साथ उपयोग करें।

  1. C# ASP.NET MVC में ViewBag का उपयोग कैसे करें? C# ASP.NET MVC में ViewBag का उपयोग कैसे करें?

    ViewBag C# 4.0 में पेश की गई डायनामिक फीचर का उपयोग करता है। यह एक ऑब्जेक्ट को डायनामिकली प्रॉपर्टीज जोड़ने की अनुमति देता है। आंतरिक रूप से, यह ControllerBase क्लास की एक डायनामिक टाइप प्रॉपर्टी है जो Controller क्लास का बेस क्लास है। ViewData से ViewBag के अंतर विशेषताViewDataViewBag सिंटैक्स

  1. C# ASP.NET WebAPI में क्वेरीस्ट्रिंग पैरामीटर के साथ वर्जनिंग कैसे करें? C# ASP.NET WebAPI में क्वेरीस्ट्रिंग पैरामीटर के साथ वर्जनिंग कैसे करें?

    Web API में DefaultHttpControllerSelector क्लास उस उपयुक्त कंट्रोलर एक्शन मेथड का चयन करने के लिए जिम्मेदार है जिसे हम URI में भेजते हैं। मान लीजिए हमें क्वेरी स्ट्रिंग में वर्जनिंग लागू करनी है जैसे नीचे: v=1 StudentsV1Controller (Version 1) v=2 StudentsV2Controller (Version 2) यदि हम वर्जनिंग

  1. C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें? C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें?

    कंट्रोलर में एक पब्लिक मेथड को एक्शन मेथड कहा जाता है। आइए एक उदाहरण पर विचार करें जहां DemoController क्लास ApiController से डेराइव्ड है और इसमें कई एक्शन मेथड्स हैं जिनके नाम HTTP वर्ब्स जैसे Get, Post, Put और Delete से मेल खाते हैं। उदाहरण public class DemoController : ApiController { public