Determinateifarequestisfromalocalnetwork(intranet)我要解决的问题是:我们的网站可以从互联网和内联网访问。内网用户(公司内部用户)不能上网。我们正在使用GoogleAnylitics,当内部网用户访问该页面时,该页面需要很长时间才能上传,因为它会尝试下载从Google生成的(ga)javascript文件。有解决办法吗?您可以检查用户的IP地址。私有ip4地址始终以10.、172.或192.*开头...有关私有网络的更多信息,请参见此处。您还可以异步加载GoogleAnalytics。*****************更新——请阅读****************************************正如@igor-turman正确指出的那样,只有部分“172”和“192”地址范围指定供私人使用。其余从172和192开始的IP地址是PUBLIC。这是检查私有IP地址的正则表达式:(^192.168.([0-9]|[0-9][0-9]|[0-2][0-5][0-5]).([0-9]|[0-9][0-9]|[0-2][0-5][0-5])$)|(^172.([1][6-9]|[2][0-9]|[3][0-1]).([0-9]|[0-9][0-9]|[0-2][0-5][0-5]).([0-9]|[0-9][0-9]|[0-2][0-5][0-5])$)|(^10.([0-9]|[0-9][0-9]|[0-2][0-5][0-5]).([0-9]|[0-9][0-9]|[0-2][0-5][0-5]).([0-9]|[0-9][0-9]|[0-2][0-5][0-5])$)您可以在regexpal.com上测试这个正则表达式。这就是我检查ip的方式:stringipString=System.Web.HttpContext.Current.Request.UserHostAddress;byte[]ipBytes=System.Net.IPAddress.Parse(ipString).GetAddressBytes();intip=System.BitConverter。ToInt32(ipBytes,0);//你的网络ip范围stringipStringFrom="192.168.1.0";byte[]ipBytesFrom=System.Net.IPAddress.Parse(ipStringFrom).GetAddressBytes();intipFrom=System.BitConverter.ToInt32(ipBytesFrom,0);字符串ipStringTo="192.168.1.255";byte[]ipBytesTo=System.Net.IPAddress.Parse(ipStringTo).GetAddressBytes();intipTo=System.BitConverter.ToInt32(ipBytesFrom,0);boolclientIsOnLAN=ipFrom>=ip&&ip如果您有多个子网,只需对它们(从、到)执行相同的操作并添加到上面的bool条件中。我刚刚意识到以上内容对你的情况可能有点矫枉过正。或者,对您来说,它可以像这样简单:boolisOnLAN=System.Web.HttpContext.Current.Request.UserHostAddress.StartsWith("192.168.1.")亡灵法术:没有一个答案是好的或正确的。您可以将IP(仅限IPv4-IPv6为UInt128)转换为UInt32值,然后您可以检查请求IP是否在私有IP范围内的某个位置:例如,如果它不是内网,则可以使用它来设置cookie为了“安全”。对于每个thisCookieAsSystem.Web.HttpCookieInresponse.CookiesthisCookie.HttpOnly=True接下来这个CookieVB.NET类,你可以转换成C#自己(http://converter.telerik.com)PublicClassIPv4InfoPrivateClassIPv4RangePublicRangeStartAsUInt32PublicRangeEndAsUInt32EndClass'https://en.wikipedia.org/wiki/Private_network'https://tools.ietf.org/html/rfc1918'192.168.0.0-192.168.255.255(65,536个IP地址)'172.16.0.0-172.31.255.255(1,048,576个IP地址)'10.0.0.0-10.255.255.255(16,777,216个IP地址)私有共享Rng127AsIPv4Range=NewIPv4Range()With{.RangeStart=GetIpNum("127.0.0.0"),.RangeEnd=GetIpNum("127.255.255.255")}PrivateSharedRng192AsIPv4Range=新的IPv4Range()与{.RangeStart=GetIpNum("192.168.0.0"),.RangeEnd=GetIpNum("192.168.255.255")}'CIDR:192.168.0.0/16(255.255.0.0)PrivateSharedRng172AsIPv4Range=NewIPv4Range()With{.RangeStart=GetIpNum("172.16.0.0"),.RangeEnd=GetIpNum("172.31.255.255")}'CIDR:172.16.0.0/12(255.240.0.0)PrivateSharedRng10AsIPv4Range=NewIPv4Range()With{.RangeStart=GetIpNum("10.0.0.0"),.RangeEnd=GetIpNum("10.255.255.255")}'CIDR:10.0.0.0/8(255.0.0.0)'http://stackoverflow.com/questions/36831/how-do-you-parse-an-ip-address-string-to-a-uint-value-in-c公开共享函数GetIpNum(ipStringAsString)AsUInt32DimipAddress__1AsSystem.Net.IPAddress=System.Net.IPAddress.Parse("some.ip.address")DimipBytesAsByte()=ipAddress__1.GetAddressBytes()DimipAsUInt32=CUInt(ipBytes(0))=Rng127.RangeStartAndAlsox=Rng192.RangeStartAndAlsox=Rng172.RangeStartAndAlsox=Rng10.RangeStartAndAlsox注意:对于使用UInt128执行此操作,有一个非常好的UInt128实现使用Request.UserHostAddress属性判断请求是来自公网还是私网以上是C#学习教程:判断请求是否来自本地网络(内网)分享所有内容,如果有用C#学习教程需要大家和大家多多了解,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
