IP 转换为 数字

Posted on 2007-11-07 10:30  清风-张毅  阅读(1522)  评论(0)    收藏  举报

做BS系统过程中,有时候不可避免地使用到客户端IP限制,这个过程可以笼统地概括为IP认证.

IP认证做法是在服务器端写入授权IP范围,然后对将请求的IP与授权的IP范围进行验证,我们这里谈到的就是此处的IP验证技术

在这个验证过程中,包含两步,第一步授权IP预先验证以保证授权IP以及IP范围的正确性(当然如果你能确保编辑人员肯定不会犯错除外,考虑到系统的容错性这一步一般不会省掉),这个IP授权范围的预先认证通常情况下相当繁琐(包含授权IP本身的验证,当然算法一般).第二步才是IP范围验证

当然还有一种不用预先验证就能确保授权IP与授权IP范围的正确性的方法(也可以说是表面上没有预先验证,算法本身已经验证了)
它的步骤如下
1.将IP转换成对应正确的长整型数据(注意算法:不能随意转换)
2.最后在进行IP范围验证

将IP转换成对应的长整型数据的算法如下

    public class IPToLongHelper
    {
        public static long ConvertIPToLong(string Ip)
        {
            long longResult = 0;
            try
            {
                //取出IP地址去掉‘.’后的string数组
                string[] Ip_List = Ip.Split('.');
                string X_Ip = "";
                //循环数组,把数据转换成十六进制数,并合并数组(3dafe81e)
                foreach (string ip in Ip_List)
                {
                    X_Ip += Convert.ToByte(ip).ToString("x").PadLeft(2, '0');
                }

                //将十六进制数转换成十进制数(1034938398)
                longResult = long.Parse(X_Ip, System.Globalization.NumberStyles.HexNumber);
            }
            catch
            {
  //设置的IP范围异常
            }

            return longResult;
        }
    }

之后就可以不用担心IP是否设置正确,直接进行IP范围认证了

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3