内容摘要:本文将通过一个实例来向大家讲解如何使用C#来编写一个具备查询IP段功能的小程序。
本文将通过一个实例来向大家讲解如何使用C#来编写一个具备查询IP段功能的小程序。
主要功能:查询一个IP所有的IP段.
关键:从Byte数组到ulong的转换出来的数字和 IPAddress.Address 返回值的是不一样的.
以下是引用片段:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Net;
namespaceIPUtility
{
classProgram
{
staticvoidMain(string[]args)
{
IPRangeManageirm=newIPRangeManage();
irm.Add(newIPRange("石家庄","219.148.24.0","219.148.63.255"));
irm.Add(newIPRange("石家庄","222.222.0.0","222.222.63.255"));
irm.Add(newIPRange("唐山","219.148.64.0","219.148.79.255"));
irm.Add(newIPRange("保定","219.148.20.0","219.148.23.255"));
Console.WriteLine(irm.Search("219.148.56.3").Name);
Console.ReadLine();
}
}
publicclassIPRange
{
privatestring_Name=string.Empty;
privateulong_BeginIP=0;
privateulong_EndIP=Int32.MaxValue;
/**////
///IP段名称
///
publicstringName
{
get{return_Name;}
set{_Name=value;}
}
/**////
///?始IP
///
publiculongBeginIP
{
get{return_BeginIP;}
set{_BeginIP=value;}
}
/**////
///?束IP
///
publiculongEndIP
{
get{return_EndIP;}
set{_EndIP=value;}
}
/**////
///此IP段的范?
///
publiculongRange
{
get
{
returnEndIP-BeginIP;
}
}
publicIPRange(stringname,stringipBegin,stringipEnd)
{
this.Name=name;
this.BeginIP=IP2A(ipBegin);
this.EndIP=IP2A(ipEnd);
}
publicstaticulongIP2A(stringip)
{
byte[]bytes=IPAddress.Parse(ip).GetAddressBytes();
ulongret=0;
foreach(bytebinbytes)
{
ret<<=8;
ret|=b;
}
returnret;
}
publicstaticintCompare(IPRangex,IPRangey)
{
if(x.Range==y.Range)
return0;
elseif(x.Range>y.Range)
return1;
elsereturn-1;
}
}
publicclassIPRangeManage
{
publicIPRangeManage()
{}
privateList<IPRange>_IPRangeList=newList<IPRange>();
privatebool_NeedSort=true;
publicvoidAdd(IPRangeipRange)
{
_IPRangeList.Add(ipRange);
_NeedSort=true;
}
privatevoidSort()
{
if(_NeedSort)
{
_IPRangeList.Sort(newComparison(IPRange.Compare));
}
}
publicIPRangeSearch(stringipString)
{
ulongip=IPRange.IP2A(ipString);
this.Sort();
foreach(IPRangeirin_IPRangeList)
{
if(ir.BeginIP<=ip&&ir.EndIP>=ip)
{
returnir;
}
}
returnnull;
}
}
}
所有代码就这么多,是不是很简单啊?相信大家都能够看懂。
责编:豆豆技术应用