介紹通過(guò)IP地址查找ip具體的城市和運(yùn)營(yíng)商!通過(guò)QQIP地址庫(kù):QQWry.Dat編寫(xiě)
以下只貼出少量代碼,請(qǐng)各位直接到本人的網(wǎng)盤(pán)下載完整版(代碼+最新QQWry.Dat),項(xiàng)目可直接運(yùn)行!
QQWry.Dat大小為8.79M,項(xiàng)目大小僅390k,直接運(yùn)行IPTest.java類(lèi)即可!
此代碼可用于各種java項(xiàng)目和jsp、j2ee項(xiàng)目
注意:QQWry.Dat只需文件放在對(duì)應(yīng)的目錄下即可。
- public class IPSeeker {
- //純真IP數(shù)據(jù)庫(kù)名
- private String IP_FILE="QQWry.Dat";
- //保存的文件夾
- private String INSTALL_DIR="f:/qqwry";
-
-
- // 一些固定常量,比如記錄長(zhǎng)度等等
- private static final int IP_RECORD_LENGTH = 7;
- private static final byte REDIRECT_MODE_1 = 0x01;
- private static final byte REDIRECT_MODE_2 = 0x02;
-
- // 用來(lái)做為cache,查詢(xún)一個(gè)ip時(shí)首先查看cache,以減少不必要的重復(fù)查找
- private Map<String, IPLocation> ipCache;
- // 隨機(jī)文件訪(fǎng)問(wèn)類(lèi)
- private RandomAccessFile ipFile;
- // 內(nèi)存映射文件
- private MappedByteBuffer mbb;
- // 起始地區(qū)的開(kāi)始和結(jié)束的絕對(duì)偏移
- private long ipBegin, ipEnd;
- // 為提高效率而采用的臨時(shí)變量
- private IPLocation loc;
- private byte[] buf;
- private byte[] b4;
- private byte[] b3;
-
- public IPSeeker(String fileName,String dir) {
- this.INSTALL_DIR=dir;
- this.IP_FILE=fileName;
- ipCache = new HashMap<String, IPLocation>();
- loc = new IPLocation();
- buf = new byte[100];
- b4 = new byte[4];
- b3 = new byte[3];
- try {
- ipFile = new RandomAccessFile(IP_FILE, "r");
- } catch (FileNotFoundException e) {
- ...........
- .............
- ................