我有一个包含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的国家/地区?
答案 0 :(得分:0)
用“。”分割地址后进行简单检查。从每个分割值开始比较从左到右。
例如:
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;
}
希望这有帮助。
答案 1 :(得分:0)
按如下方式创建新课程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;