IP 주소가 "*"
과 일치하는 특정 범위에 있는지 확인하고 싶습니다. 예를 들어, "202.121.189.8"은 "202.121.189. *
"입니다.IP 범위와 일치하는 간단한 산술을 최적화하십시오.
시나리오는 내가 그들 중 일부는 "*"
을 포함, 금지 된 IP 목록을 가지고, 그래서 함수를 쓴 것입니다, 그것을 잘 지금까지 작동합니다
static bool IsInRange(string ip, List<string> ipList)
{
if (ipList.Contains(ip))
{
return true;
}
var ipSets = ip.Split('.');
foreach (var item in ipList)
{
var itemSets = item.Split('.');
for (int i = 0; i < 4; i++)
{
if (itemSets[i] == "*")
{
bool isMatch = true;
for (int j = 0; j < i; j++)
{
if (ipSets[i - j - 1] != itemSets[i - j - 1])
{
isMatch = false;
}
}
if (isMatch)
{
return true;
}
}
}
}
return false;
}
테스트 코드 :
string ip = "202.121.189.8";
List<string> ipList = new List<string>() { "202.121.168.25", "202.121.189.*" };
Console.WriteLine(IsInRange(ip, ipList));
하지만 내가 쓴 것은 매우 어리 석다. 나는 그것을 최적화하고 싶다. 누구도이 기능을 단순화하는 방법을 알고 있는가? 너무 많은 "for .... if ..."을 사용하지 마십시오.