package cc.mrbird.febs.common.utils; 
 | 
  
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.io.FileUtils; 
 | 
import org.lionsoul.ip2region.DataBlock; 
 | 
import org.lionsoul.ip2region.DbConfig; 
 | 
import org.lionsoul.ip2region.DbSearcher; 
 | 
import org.lionsoul.ip2region.Util; 
 | 
  
 | 
import java.io.File; 
 | 
import java.io.IOException; 
 | 
import java.lang.reflect.Method; 
 | 
  
 | 
/** 
 | 
 * @author MrBird 
 | 
 */ 
 | 
@Slf4j 
 | 
public class AddressUtil { 
 | 
  
 | 
    @SuppressWarnings("all") 
 | 
    public static String getCityInfo(String ip) { 
 | 
        DbSearcher searcher = null; 
 | 
        try { 
 | 
            String dbPath = AddressUtil.class.getResource("/ip2region/ip2region.db").getPath(); 
 | 
            File file = new File(dbPath); 
 | 
            if (!file.exists()) { 
 | 
                String tmpDir = System.getProperties().getProperty("java.io.tmpdir"); 
 | 
                dbPath = tmpDir + "ip.db"; 
 | 
                file = new File(dbPath); 
 | 
                FileUtils.copyInputStreamToFile(AddressUtil.class.getClassLoader().getResourceAsStream("classpath:ip2region/ip2region.db"), file); 
 | 
            } 
 | 
            int algorithm = DbSearcher.BTREE_ALGORITHM; 
 | 
            DbConfig config = new DbConfig(); 
 | 
            searcher = new DbSearcher(config, dbPath); 
 | 
            Method method = null; 
 | 
            switch (algorithm) { 
 | 
                case DbSearcher.BTREE_ALGORITHM: 
 | 
                    method = searcher.getClass().getMethod("btreeSearch", String.class); 
 | 
                    break; 
 | 
                case DbSearcher.BINARY_ALGORITHM: 
 | 
                    method = searcher.getClass().getMethod("binarySearch", String.class); 
 | 
                    break; 
 | 
                case DbSearcher.MEMORY_ALGORITYM: 
 | 
                    method = searcher.getClass().getMethod("memorySearch", String.class); 
 | 
                    break; 
 | 
            } 
 | 
            DataBlock dataBlock = null; 
 | 
            if (!Util.isIpAddress(ip)) { 
 | 
                log.error("Error: Invalid ip address"); 
 | 
            } 
 | 
            dataBlock = (DataBlock) method.invoke(searcher, ip); 
 | 
            return dataBlock.getRegion(); 
 | 
        } catch (Exception e) { 
 | 
            log.error("获取IP地址失败,{}", e.getMessage()); 
 | 
        } finally { 
 | 
            if (searcher != null) { 
 | 
                try { 
 | 
                    searcher.close(); 
 | 
                } catch (IOException e) { 
 | 
                    e.printStackTrace(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
} 
 |