본문 바로가기
프로그래밍/C#

C# 일정 범위 내에 IP 체크하기

by zoo10 2017. 11. 9.

클라이언트 IP를 일정 범위 내의 IP안에 있는지 확인하는 함수이다.


string ip_network = "192.168.0.1:192.168.0.55,10.2.10.11:10.2.10.15"; 


bool b = checkIpNetwork(ip_network);


private bool checkIpNetwork(string ip_network)

{

    if (ip_network == "")

        return true;


    string[] ipArray = ip_network.Split(',');

    

    foreach (string strIP in ipArray)

    {

        IPAddress startIP = null;

        IPAddress endIP = null;

        IPAddress loginIP = null;

        string[] ips = strIP.Split(':');

        

        if (ips.Length < 2 || ips == null) continue;

        if (!IPAddress.TryParse(ips[0], out startIP)) continue;

        if (!IPAddress.TryParse(ips[1], out endIP)) continue;

        if (!IPAddress.TryParse(myip, out loginIP)) continue;

        if (startIP.AddressFamily != endIP.AddressFamily) continue;

        if (startIP.AddressFamily != loginIP.AddressFamily || endIP.AddressFamily != loginIP.AddressFamily) continue;


        long ipStart = BitConverterFromIPAddrss(startIP);

        long ipEnd = BitConverterFromIPAddrss(endIP);

        long ip = BitConverterFromIPAddrss(loginIP);


        if ( ip >= ipStart && ip <= ipEnd)

            return true;

    }


    return false;

}


private long BitConverterFromIPAddrss(IPAddress address)

{

    var addressBytes = address.GetAddressBytes();

    Array.Reverse(addressBytes);

    var paddedAddressBytes = new byte[addressBytes.Length + 1];

    Array.Copy(addressBytes, paddedAddressBytes, addressBytes.Length);


    return BitConverter.ToInt32(paddedAddressBytes, 0);

}


문자열 구성에 따라 파싱하는 부분은 수정이 필요하기도 하다.