查询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;
        }


    }

 


}

 

C# 网络编程之通过ip地址获取地理位置(补充)

前面我写过一篇文章"C# 网络编程之获取本机名、ip地址、域名、物理位置"里面可以根据输入的网址根据其ip地址获取器物理位置,其中该部分主要代码是通过有道网提供的在线第三方接口实现动态获取它的数据.现...
  • Eastmount
  • Eastmount
  • 2014年01月22日 17:40
  • 4729

C#根据输入的IP地址查找出对于的城市区域信息

/// /// 根据IP 获取物理地址 /// /// Ip地址(116.19.105.62) /// ...
  • chenxiaomumu
  • chenxiaomumu
  • 2014年02月14日 11:50
  • 1217

区段减肥,去除垃圾区段,重建PE。

区段减肥,去除垃圾区段,重建PE。 这个需要一点PE知识,没有也不要紧,跟着一起学,积累经验。 备份好脱壳程序,区段减肥有时过量会导致程序无法运行。 这次区段减肥只是例子,大家要学会举一反三。 ...
  • yizhenweifeng
  • yizhenweifeng
  • 2013年02月15日 20:45
  • 2708

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.181.237....
  • gzw1623231307
  • gzw1623231307
  • 2017年02月22日 07:10
  • 58

C#获取计算机上网的公网ip和地理位置

1、 //===========获取计算机上网的公网ip:113.57.68.117 protected void Button2_Click(object sender, EventArgs e...
  • u014424282
  • u014424282
  • 2017年11月22日 15:06
  • 96

c#实现根据网络IP显示地理位置功能

用户信息表,是大多数系统都有的。我们也知道,通常都会有类似 注册IP 和 最后登录IP 这两个的字段,来存储用户注册时候的IP地址和最后登录的IP的地址。 获取这样的地址,在后台显示 xxx.x...
  • pan869823184
  • pan869823184
  • 2013年06月23日 20:52
  • 4012

用VMware Workstation 11的LAN区段功能构造内网环境

1、配置LAN区段,就是命个名,不用配置网络相关的   2、想要在同一内网的机器选择同一个LAN     3、最后仅需要在网卡配置一下就可以了,无关的网卡配置我清除了,保留5行好对比...
  • xuxile
  • xuxile
  • 2016年09月18日 14:42
  • 1691

各个语言的入口特征和区段特征

判断程序是使用什么语言写的:主要查看区段和入口特征 VC6入口特征 几个api基本不变 区段特征 四个区段 .text 代码段  .rdata 导入表 .data 数据...
  • c1561322601
  • c1561322601
  • 2017年07月21日 21:19
  • 244

Android 区段加密

Android逆向之旅---基于对so中的section加密技术实现so加固 一、前言 好长时间没有更新文章了,主要还是工作上的事,连续加班一个月,没有时间研究了,只有周末有时间,来看一下,...
  • yy405145590
  • yy405145590
  • 2016年01月31日 15:13
  • 589

C#设置代理IP及刷网站访问量demo

二话不说先上图: 设置代理ip是参考网上的资料,下面是设置代理ip代码:...
  • wuma0q1an
  • wuma0q1an
  • 2016年05月04日 10:53
  • 3162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查询IP所在区段(C#)
举报原因:
原因补充:

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