/// <summary> /// IP位置查询 /// </summary> /// <param name="address">ipv4地址</param> /// <returns> /// IP位置信息 /// </returns> public static IpLocation Find(string address) { if (IPAddress.TryParse(address, out IPAddress ip)) { var octets = ip.GetAddressBytes(); if (octets.Length == 4) { return(Searcher.Value.Search(IpLocationHelper.IPv4ToInteger(ip.GetAddressBytes()))); } } return(null); }
/// <summary> /// IP查询 /// </summary> /// <param name="address">IP地址</param> /// <returns>IP位置信息</returns> public IpLocation Search(uint address) { if (IpLocationHelper.IsReserved(address)) { return(new IpLocation { City = "内网IP", Isp = "保留地址" }); } //IP索引分区前缀 var prefix = (byte)(address >> 24); FindPartition(prefix, out int start, out int end); //如果不在分区索引上则从整个IP数据储存进行搜索 if (start < 0 || end < 0) { start = ip_start_position; end = (int)DataSource.Length - 1; } string data; if (DataSource is MemoryDataSource) { data = FindDataByMemory(start, end, address); } else { data = FindData(start, end, address); } if (!string.IsNullOrWhiteSpace(data)) { var seg = data.Split('|'); return(new IpLocation { Country = seg[0], Province = seg[1], City = seg[2], Isp = seg[3] }); } return(null); }