c#中计算一个ip是不是在指定范围内?
Posted
技术标签:
【中文标题】c#中计算一个ip是不是在指定范围内?【英文标题】:Calculate whether an ip is in a specified range in c#?c#中计算一个ip是否在指定范围内? 【发布时间】:2014-07-31 13:06:55 【问题描述】:我有一个包含 IP 和国家/地区范围的数据库。 我得到了用户IP,想知道国家
数据是
from |to |country
-------------------------
1.1.1.1.1|2.2.2.2| US
5.5.5.5.5|6.6.6.6| CN
我怎样才能找到ip 5.6.0.0是哪个国家?
【问题讨论】:
什么样的IP地址有五个用点分隔的值? IPV5?尝试将 IPV4 地址转换为uint
值并进行比较。 1.2.3.4 => ( ( ( 1 * 256 + 2 ) * 256 + 3 ) * 256 + 4
.
已经有一些答案了 - 1, 2
【参考方案1】:
用“.”分割地址后,您可以简单地检查一下。开始对每个拆分值进行从左到右的比较。
例如:
bool BelongsOrNot(String from, String to, String ip)
String []froms = from.Split(".");
String []tos = to.Split(".");
String []ips = ip.Split(".");
for(var i=0;i<ips.length; i++)
int ipi = Int32.Parse(ips[i]);
int fromi = Int32.Parse(frons[i]);
int toi = Inte32.Parse(tos[i]);
if(toi>ipi && fromi < ipi)
return false;
return true;
希望这会有所帮助。
【讨论】:
【参考方案2】:新建类IP
如下:
public class IP : System.Net.IPAddress, IComparable<IP>
public IP(long newAddress) : base(newAddress)
public IP(byte[] address, long scopeid) : base(address, scopeid)
public IP(byte[] address) : base(address)
public int CompareTo(IP other)
byte[] ip1 = GetAddressBytes();
byte[] ip2 = other.GetAddressBytes();
for (int i = 0; i < ip1.Length; i++)
if (ip1[i] > ip2[i])
return 1;
if (ip1[i] < ip2[i])
return -1;
return 0;
检查指定的IP
是否属于范围:
IP ipRangeLow = new IP(new byte[] 5, 5, 5, 5 );
IP ipRangeHigh = new IP(new byte[] 6, 6, 6, 6 );
IP ip = new IP(new byte[] 5, 6, 0, 0 );
bool ipInRange = ip.CompareTo(ipRangeLow) >= 0 && ip.CompareTo(ipRangeHigh) <= 0;
【讨论】:
以上是关于c#中计算一个ip是不是在指定范围内?的主要内容,如果未能解决你的问题,请参考以下文章