public bool isInNet(string host, string pattern, string mask) {
GlobalLog.Print("WebProxyScriptHelper::isInNet() host:" + ValidationHelper.ToString(host) + " pattern:" + ValidationHelper.ToString(pattern) + " mask:" + ValidationHelper.ToString(mask));
if (host==null) {
if(Logging.On)Logging.PrintWarning(Logging.Web, SR.GetString(SR.net_log_proxy_called_with_null_parameter, "WebProxyScriptHelper.isInNet()", "host"));
throw new ArgumentNullException("host");
}
if (pattern==null) {
if(Logging.On)Logging.PrintWarning(Logging.Web, SR.GetString(SR.net_log_proxy_called_with_null_parameter, "WebProxyScriptHelper.isInNet()", "pattern"));
throw new ArgumentNullException("pattern");
}
if (mask==null) {
if(Logging.On)Logging.PrintWarning(Logging.Web, SR.GetString(SR.net_log_proxy_called_with_null_parameter, "WebProxyScriptHelper.isInNet()", "mask"));
throw new ArgumentNullException("mask");
}
try {
IPAddress hostAddress = IPAddress.Parse(host);
IPAddress patternAddress = IPAddress.Parse(pattern);
IPAddress maskAddress = IPAddress.Parse(mask);
byte[] maskAddressBytes = maskAddress.GetAddressBytes();
byte[] hostAddressBytes = hostAddress.GetAddressBytes();
byte[] patternAddressBytes = patternAddress.GetAddressBytes();
if (maskAddressBytes.Length!=hostAddressBytes.Length || maskAddressBytes.Length!=patternAddressBytes.Length) {
return false;
}
for (int i=0; i<maskAddressBytes.Length; i++) {
if ( (patternAddressBytes[i] & maskAddressBytes[i]) != (hostAddressBytes[i] & maskAddressBytes[i]) ) {
return false;
}
}
}
catch {
return false;
}
return true;
}