操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

使用C#编写查询IP段功能的程序

2000-11-19 网友评论 0 条 点击进入论坛

  本文将通过一个实例来向大家讲解如何使用C#来编写一个具备查询IP段功能的小程序。

  主要功能:查询一个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;

  /**////

  /// IP段名称

  ///

  public string Name

  {

  get

  set

  }

  /**////

  /// ?始IP

  ///

  public ulong BeginIP

  {

  get

  set

  }

  /**////

  /// ?束IP

  ///

  public ulong EndIP

  {

  get

  set

  }

  /**////

  /// 此IP段的范?

  ///

  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.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;

  }

  }

  }

  所有代码就这么多,是不是很简单啊?相信大家都能够看懂。

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46294 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
移动开发
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail