查询IP所在区段(C#)

转载 2007年10月04日 22:42:00
编程语言:C#
类    别:(网络应用,实用算法)
主要功能:查询一个IP所有的IP段.
关键:从Byte数组到ulong的转换出来的数字和 IPAddress.Address 返回值的是不一样的.

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

namespace IPUtility
{
    class Program
    {
        static void Main(string[] args)
        {
            IPRangeManage irm = new IPRangeManage();
            irm.Add(new IPRange("石家庄", "219.148.24.0", "219.148.63.255"));
            irm.Add(new IPRange("石家庄", "222.222.0.0", "222.222.63.255"));
            irm.Add(new IPRange("唐山", "219.148.64.0", "219.148.79.255"));
            irm.Add(new IPRange("保定", "219.148.20.0", "219.148.23.255"));

            Console.WriteLine(irm.Search("219.148.56.3").Name);

            Console.ReadLine();

        }


    }

    public class IPRange
    {
        private string _Name = string.Empty;

        private ulong _BeginIP = 0;

        private ulong _EndIP = Int32.MaxValue;

        /**//// <summary>
        /// IP段名称
        /// </summary>
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        /**//// <summary>
        /// ?始IP
        /// </summary>
        public ulong BeginIP
        {
            get { return _BeginIP; }
            set { _BeginIP = value; }
        }

        /**//// <summary>
        /// ?束IP
        /// </summary>
        public ulong EndIP
        {
            get { return _EndIP; }
            set { _EndIP = value; }
        }


        /**//// <summary>
        /// 此IP段的范?
        /// </summary>
        public ulong Range
        {
            get
            {
                return EndIP - BeginIP;
            }
        }

        public IPRange(string name, string ipBegin, string ipEnd)
        {
            this.Name = name;
            this.BeginIP = IP2A(ipBegin);
            this.EndIP = IP2A(ipEnd);
        }


        public static ulong IP2A(string ip)
        {
            byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();
            ulong ret = 0;

            foreach (byte b in bytes)
            {
                ret <<= 8;
                ret |= b;
            }

            return ret;

        }


        public static int Compare(IPRange x, IPRange y)
        {
            if(x.Range == y.Range)
                return 0;
            else if(x.Range > y.Range)
                return 1;
            else return -1;
        }

    }

    public class IPRangeManage
    {
        public IPRangeManage()
        { }

        private List< IPRange> _IPRangeList = new List< IPRange>();
        private bool _NeedSort = true;

        public void Add(IPRange ipRange)
        {
            _IPRangeList.Add(ipRange);
            _NeedSort = true;
        }

        private void Sort()
        {
            if (_NeedSort)
            {
                _IPRangeList.Sort(new Comparison<IPRange>(IPRange.Compare));
            }
        }

        public IPRange Search(string ipString)
        {
            ulong ip = IPRange.IP2A(ipString);

            this.Sort();

            foreach (IPRange ir in _IPRangeList)
            {
                if (ir.BeginIP <= ip && ir.EndIP >= ip)
                {
                    return ir;
                }
            }

            return null;
        }


    }

 


}

 

相关文章推荐

查询IP所在区段

  • 2007年05月19日 20:38
  • 13KB
  • 下载

IP地址排序、IP区段去重

1. 请问如何对这样一组IP地址排序? 95.243.188.67 102.107.11.122 93.131.2.17 95.243.188.67 96.96.12.138 100.18...
  • whz_zb
  • whz_zb
  • 2012年03月29日 23:11
  • 3336

C#读取QQWry.Dat文件实现IP查询

QQWry数据库下载地址:http://download.csdn.net/detail/fwj380891124/4385554using System; using System.Collect...

C#实现Ping功能|根据网址查询IP

大家应该都知道Ping是做什么的吧,如果不知道的话,你单击开始---运行---输入  ping  www.baidu.com  -t 如下图 当然我们也可以直接输入百度的IP进行PIng ...

C#根据域名查询IP(CMD命令参数输入或者启动程序后再输入查询)

有时因为需要,希望知道域名的IP,那用C#怎么实现呢?以下是实现代码 using System; using System.Collections.Generic; using System.Linq...

C#实现根据域名查询ip实例

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

(9)区段优化减肥

脱了穿山甲的壳以后,脱壳后文件就会比原先的加壳前文件大出很多倍。这样我们就需要给区段优化减肥,对于的垃圾区段去除掉,使体积变小。  LorderPE中区段列表说明:  Voffset虚拟地址  R...
  • eldn__
  • eldn__
  • 2012年10月03日 15:15
  • 1014
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查询IP所在区段(C#)
举报原因:
原因补充:

(最多只允许输入30个字)