मैं ASP.NET MVC 5. से उपयोगकर्ता के आईपी पते पाने के लिए कोशिश कर रहा हूँ रिटर्न मैं इस तरह के विभिन्न उदाहरणों, ऊपर देखा है:ग्राहक आईपी पते एक ही आंतरिक नेटवर्क पता
- https://stackoverflow.com/a/740431/177416
- https://stackoverflow.com/a/20194511/177416
- https://stackoverflow.com/a/3003254/177416
वे सभी का उत्पादन किया गया है एक ही परिणाम: उपयोगकर्ता नेटवर्क से आंतरिक माना जाता है। मैंने दोस्तों को अपने फोन की कोशिश की है (जो नेटवर्क पर नहीं हैं)।
private static Logger _logger = LogManager.GetCurrentClassLogger();
public static bool IsIpInternal()
{
var ipAddress = HttpContext.Current.Request.UserHostAddress;
var logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, ipAddress);
_logger.Log(logEvent);
try
{
if (ipAddress != null)
{
var ipParts = ipAddress.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse).ToArray();
var isDebug = System.Diagnostics.Debugger.IsAttached;
if (ipParts[0] == 10)
{
return true;
}
}
}
catch (Exception e)
{
logEvent = new LogEventInfo(LogLevel.Error, _logger.Name, e.Message);
_logger.Log(logEvent);
return false;
}
return false;
}
लॉग सभी अनुरोधों (लॉग के आधार पर) के लिए 10.xxx.xx.xxx
दिखा रहा है: यहाँ मेरी नवीनतम प्रयास है। वेब ऐप से कनेक्ट करने वाले क्लाइंट के आईपी की बजाय यह एक आंतरिक पता है। IsIpInternal()
हमेशा सत्य देता है। मैं क्या गलत कर रहा हूं?
ध्यान दें कि मैं 192.168.x.x
और 172.16.xxx.xxx
पते को अनदेखा कर रहा हूं।
क्या आपकी वेबसाइट प्रॉक्सी या लोड बैलेंसर के पीछे है? –
@ जॉन वू, हां, हमारे पास एक साइट्रिक्स नेटस्केकर है जो हमारे सभी सर्वर उपयोग करते हैं। क्या वह मूल आईपी पता हटा सकता है? – Alex