亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ipseeker.java

?? Java下的Apache日志分析器
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
		return info;
	}

	/**
	 * 從offset位置讀取4個字節為一個long,因為java為big-endian格式,所以沒辦法 用了這么一個函數來做轉換
	 * 
	 * @param offset
	 * @return 讀取的long值,返回-1表示讀取文件失敗
	 */
	private long readLong4(long offset) {
		long ret = 0;
		try {
			ipFile.seek(offset);
			ret |= (ipFile.readByte() & 0xFF);
			ret |= ((ipFile.readByte() << 8) & 0xFF00);
			ret |= ((ipFile.readByte() << 16) & 0xFF0000);
			ret |= ((ipFile.readByte() << 24) & 0xFF000000);
			return ret;
		} catch (IOException e) {
			return -1;
		}
	}

	/**
	 * 從offset位置讀取3個字節為一個long,因為java為big-endian格式,所以沒辦法 用了這么一個函數來做轉換
	 * 
	 * @param offset
	 * @return 讀取的long值,返回-1表示讀取文件失敗
	 */
	private long readLong3(long offset) {
		long ret = 0;
		try {
			ipFile.seek(offset);
			ipFile.readFully(b3);
			ret |= (b3[0] & 0xFF);
			ret |= ((b3[1] << 8) & 0xFF00);
			ret |= ((b3[2] << 16) & 0xFF0000);
			return ret;
		} catch (IOException e) {
			return -1;
		}
	}

	/**
	 * 從當前位置讀取3個字節轉換成long
	 * 
	 * @return
	 */
	private long readLong3() {
		long ret = 0;
		try {
			ipFile.readFully(b3);
			ret |= (b3[0] & 0xFF);
			ret |= ((b3[1] << 8) & 0xFF00);
			ret |= ((b3[2] << 16) & 0xFF0000);
			return ret;
		} catch (IOException e) {
			return -1;
		}
	}

	/**
	 * 從offset位置讀取四個字節的ip地址放入ip數組中,讀取后的ip為big-endian格式,但是
	 * 文件中是little-endian形式,將會進行轉換
	 * 
	 * @param offset
	 * @param ip
	 */
	private void readIP(long offset, byte[] ip) {
		try {
			ipFile.seek(offset);
			ipFile.readFully(ip);
			byte temp = ip[0];
			ip[0] = ip[3];
			ip[3] = temp;
			temp = ip[1];
			ip[1] = ip[2];
			ip[2] = temp;
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

	/**
	 * 從offset位置讀取四個字節的ip地址放入ip數組中,讀取后的ip為big-endian格式,但是
	 * 文件中是little-endian形式,將會進行轉換
	 * 
	 * @param offset
	 * @param ip
	 */
	private void readIP(int offset, byte[] ip) {
		mbb.position(offset);
		mbb.get(ip);
		byte temp = ip[0];
		ip[0] = ip[3];
		ip[3] = temp;
		temp = ip[1];
		ip[1] = ip[2];
		ip[2] = temp;
	}

	/**
	 * 把類成員ip和beginIp比較,注意這個beginIp是big-endian的
	 * 
	 * @param ip
	 *            要查詢的IP
	 * @param beginIp
	 *            和被查詢IP相比較的IP
	 * @return 相等返回0,ip大于beginIp則返回1,小于返回-1。
	 */
	private int compareIP(byte[] ip, byte[] beginIp) {
		for (int i = 0; i < 4; i++) {
			int r = compareByte(ip[i], beginIp[i]);
			if (r != 0)
				return r;
		}
		return 0;
	}

	/**
	 * 把兩個byte當作無符號數進行比較
	 * 
	 * @param b1
	 * @param b2
	 * @return 若b1大于b2則返回1,相等返回0,小于返回-1
	 */
	private int compareByte(byte b1, byte b2) {
		if ((b1 & 0xFF) > (b2 & 0xFF)) // 比較是否大于
			return 1;
		else if ((b1 ^ b2) == 0)// 判斷是否相等
			return 0;
		else
			return -1;
	}

	/**
	 * 這個方法將根據ip的內容,定位到包含這個ip國家地區的記錄處,返回一個絕對偏移 方法使用二分法查找。
	 * 
	 * @param ip
	 *            要查詢的IP
	 * @return 如果找到了,返回結束IP的偏移,如果沒有找到,返回-1
	 */
	private long locateIP(byte[] ip) {
		long m = 0;
		int r;
		// 比較第一個ip項
		readIP(ipBegin, b4);
		r = compareIP(ip, b4);
		if (r == 0)
			return ipBegin;
		else if (r < 0)
			return -1;
		// 開始二分搜索
		for (long i = ipBegin, j = ipEnd; i < j;) {
			m = getMiddleOffset(i, j);
			readIP(m, b4);
			r = compareIP(ip, b4);
			// log.debug(Utils.getIpStringFromBytes(b));
			if (r > 0)
				i = m;
			else if (r < 0) {
				if (m == j) {
					j -= IP_RECORD_LENGTH;
					m = j;
				} else
					j = m;
			} else
				return readLong3(m + 4);
		}
		// 如果循環結束了,那么i和j必定是相等的,這個記錄為最可能的記錄,但是并非
		// 肯定就是,還要檢查一下,如果是,就返回結束地址區的絕對偏移
		m = readLong3(m + 4);
		readIP(m, b4);
		r = compareIP(ip, b4);
		if (r <= 0)
			return m;
		else
			return -1;
	}

	/**
	 * 得到begin偏移和end偏移中間位置記錄的偏移
	 * 
	 * @param begin
	 * @param end
	 * @return
	 */
	private long getMiddleOffset(long begin, long end) {
		long records = (end - begin) / IP_RECORD_LENGTH;
		records >>= 1;
		if (records == 0)
			records = 1;
		return begin + records * IP_RECORD_LENGTH;
	}

	/**
	 * 給定一個ip國家地區記錄的偏移,返回一個IPLocation結構
	 * 
	 * @param offset
	 * @return
	 */
	private IPLocation getIPLocation(long offset) {
		try {
			// 跳過4字節ip
			ipFile.seek(offset + 4);
			// 讀取第一個字節判斷是否標志字節
			byte b = ipFile.readByte();
			if (b == AREA_FOLLOWED) {
				// 讀取國家偏移
				long countryOffset = readLong3();
				// 跳轉至偏移處
				ipFile.seek(countryOffset);
				// 再檢查一次標志字節,因為這個時候這個地方仍然可能是個重定向
				b = ipFile.readByte();
				if (b == NO_AREA) {
					loc.country = readString(readLong3());
					ipFile.seek(countryOffset + 4);
				} else
					loc.country = readString(countryOffset);
				// 讀取地區標志
				loc.area = readArea(ipFile.getFilePointer());
			} else if (b == NO_AREA) {
				loc.country = readString(readLong3());
				loc.area = readArea(offset + 8);
			} else {
				loc.country = readString(ipFile.getFilePointer() - 1);
				loc.area = readArea(ipFile.getFilePointer());
			}
			return loc;
		} catch (IOException e) {
			return null;
		}
	}

	/**
	 * @param offset
	 * @return
	 */
	private IPLocation getIPLocation(int offset) {
		// 跳過4字節ip
		mbb.position(offset + 4);
		// 讀取第一個字節判斷是否標志字節
		byte b = mbb.get();
		if (b == AREA_FOLLOWED) {
			// 讀取國家偏移
			int countryOffset = readInt3();
			// 跳轉至偏移處
			mbb.position(countryOffset);
			// 再檢查一次標志字節,因為這個時候這個地方仍然可能是個重定向
			b = mbb.get();
			if (b == NO_AREA) {
				loc.country = readString(readInt3());
				mbb.position(countryOffset + 4);
			} else
				loc.country = readString(countryOffset);
			// 讀取地區標志
			loc.area = readArea(mbb.position());
		} else if (b == NO_AREA) {
			loc.country = readString(readInt3());
			loc.area = readArea(offset + 8);
		} else {
			loc.country = readString(mbb.position() - 1);
			loc.area = readArea(mbb.position());
		}
		return loc;
	}

	/**
	 * 從offset偏移開始解析后面的字節,讀出一個地區名
	 * 
	 * @param offset
	 * @return 地區名字符串
	 * @throws IOException
	 */
	private String readArea(long offset) throws IOException {
		ipFile.seek(offset);
		byte b = ipFile.readByte();
		if (b == 0x01 || b == 0x02) {
			long areaOffset = readLong3(offset + 1);
			if (areaOffset == 0)
				return "未知地區";
			else
				return readString(areaOffset);
		} else
			return readString(offset);
	}

	/**
	 * @param offset
	 * @return
	 */
	private String readArea(int offset) {
		mbb.position(offset);
		byte b = mbb.get();
		if (b == 0x01 || b == 0x02) {
			int areaOffset = readInt3();
			if (areaOffset == 0)
				return "未知地區";
			else
				return readString(areaOffset);
		} else
			return readString(offset);
	}

	/**
	 * 從offset偏移處讀取一個以0結束的字符串
	 * 
	 * @param offset
	 * @return 讀取的字符串,出錯返回空字符串
	 */
	private String readString(long offset) {
		try {
			ipFile.seek(offset);
			int i;
			for (i = 0, buf[i] = ipFile.readByte(); buf[i] != 0; buf[++i] = ipFile
					.readByte())
				;
			if (i != 0)
				return Utils.getString(buf, 0, i, "GBK");
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
		return "";
	}

	/**
	 * 從內存映射文件的offset位置得到一個0結尾字符串
	 * 
	 * @param offset
	 * @return
	 */
	private String readString(int offset) {
		try {
			mbb.position(offset);
			int i;
			for (i = 0, buf[i] = mbb.get(); buf[i] != 0; buf[++i] = mbb.get())
				;
			if (i != 0)
				return Utils.getString(buf, 0, i, "GBK");
		} catch (IllegalArgumentException e) {
			System.out.println(e.getMessage());
		}
		return "";
	}

	public String getAddress(String ip) {
		String sCnty = getCountry(ip);
		String sArea = getArea(ip);
		String country = sCnty.equals(" CZ88.NET") ? "" : sCnty;
		String area = sArea.equals(" CZ88.NET") ? "" : sArea;
		String address = country + " " + area;
		return address.trim();
	}

	public String getAddress_faster(byte[] ip) {
		// 檢查ip地址文件是否正常
		if (ipFile == null)
			return "錯誤的IP數據庫文件";
		// 保存ip,轉換ip字節數組為字符串形式
		String ipStr = Utils.getIpStringFromBytes(ip);
		// 先檢查cache中是否已經包含有這個ip的結果,沒有再搜索文件
		if (ipCache.containsKey(ipStr)) {
			IPLocation loc = (IPLocation) ipCache.get(ipStr);
			return loc.country + " " + loc.area;
		} else {
			IPLocation loc = getIPLocation(ip);
			ipCache.put(ipStr, loc.getCopy());
			return loc.country + " " + loc.area;
		}
	}

	public String getAddress_faster(String ip) {
		String sAddr = getAddress_faster(Utils.getIpByteArrayFromString(ip));
		return sAddr.replaceAll(" CZ88.NET", "").trim();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜亚洲精品中文字幕一区| 国产精品人人做人人爽人人添| 一区二区理论电影在线观看| 99re亚洲国产精品| 亚洲欧洲精品一区二区精品久久久 | 国产不卡免费视频| 国产精品国产三级国产aⅴ入口| 99re在线视频这里只有精品| 一区二区三区四区乱视频| 久久久综合精品| 国产99精品国产| 亚洲精品久久久蜜桃| 欧美探花视频资源| 美洲天堂一区二卡三卡四卡视频| 久久九九久久九九| av午夜精品一区二区三区| 亚洲一区二区在线免费观看视频| 91精品国产综合久久久蜜臀粉嫩 | 成人高清免费观看| 亚洲男同性恋视频| 日韩一卡二卡三卡四卡| 成人国产亚洲欧美成人综合网 | 一区二区三区波多野结衣在线观看| 欧美日本视频在线| 国产高清视频一区| 亚洲综合一区二区三区| 精品久久国产97色综合| 97精品视频在线观看自产线路二| 一个色在线综合| 久久亚洲私人国产精品va媚药| 91日韩在线专区| 日本成人在线一区| 亚洲欧洲成人精品av97| 在线播放/欧美激情| 成人激情小说乱人伦| 午夜视频在线观看一区二区三区| 久久精品人人做人人综合| 欧美午夜宅男影院| 粉嫩久久99精品久久久久久夜| 亚洲国产另类av| 久久精品夜夜夜夜久久| 91麻豆精品国产91久久久久久久久| 国产成人在线视频播放| 水蜜桃久久夜色精品一区的特点| 国产精品女主播在线观看| 正在播放亚洲一区| 99国产精品国产精品久久| 精品综合免费视频观看| 亚洲线精品一区二区三区八戒| 欧美激情综合网| 日韩一卡二卡三卡四卡| 91久久精品一区二区二区| 国产xxx精品视频大全| 日本vs亚洲vs韩国一区三区| 亚洲综合在线视频| 国产精品国产三级国产有无不卡 | 亚洲第一会所有码转帖| 欧美韩国一区二区| 久久这里都是精品| 欧美一卡二卡三卡| 欧美伊人久久大香线蕉综合69| 成人激情黄色小说| 国产一区二区伦理| 精一区二区三区| 免费欧美日韩国产三级电影| 一区二区三区欧美久久| 日韩一区欧美小说| 国产精品伦理一区二区| 久久夜色精品国产噜噜av| 日韩美女天天操| 91精选在线观看| 欧美三级韩国三级日本三斤| 欧美午夜影院一区| 色妞www精品视频| 色婷婷国产精品| 在线免费观看一区| 在线观看亚洲成人| 在线观看欧美日本| 欧美日韩国产另类不卡| 欧美视频一区二区三区| 欧美视频日韩视频| 欧美日韩成人激情| 欧美一级xxx| 日韩免费看的电影| 久久久久88色偷偷免费| 国产亚洲婷婷免费| 国产精品成人免费精品自在线观看| 欧美国产一区二区| 亚洲精品视频在线观看免费| 亚洲人吸女人奶水| 亚洲3atv精品一区二区三区| 首页亚洲欧美制服丝腿| 蜜臀久久99精品久久久久宅男 | 国产精品综合视频| av激情综合网| 在线免费观看视频一区| 91精品久久久久久久久99蜜臂| 宅男在线国产精品| 久久综合色综合88| 国产精品女同一区二区三区| 最新久久zyz资源站| 一区二区三区四区不卡在线| 亚洲成人精品影院| 蜜臀av性久久久久蜜臀aⅴ| 久久成人综合网| 成人h版在线观看| 91美女在线视频| 欧美一二三区在线| 中文无字幕一区二区三区| 亚洲欧美视频在线观看| 欧美aaa在线| 丁香天五香天堂综合| 色老综合老女人久久久| 在线不卡欧美精品一区二区三区| 日韩欧美国产综合| 亚洲欧美一区二区在线观看| 婷婷久久综合九色综合伊人色| 国产在线看一区| 色婷婷一区二区三区四区| 欧美一区二区三区免费视频| 中文字幕第一页久久| 天堂影院一区二区| 国产不卡高清在线观看视频| 欧美日韩精品一区二区三区蜜桃 | 视频一区在线视频| 国产福利一区二区三区视频在线| 一本大道av一区二区在线播放| 91精品国产综合久久久久| 国产精品无遮挡| 日本aⅴ免费视频一区二区三区| eeuss鲁片一区二区三区 | 色呦呦国产精品| 久久久美女毛片| 日韩国产一区二| 一本一道久久a久久精品| 欧美精品一区二区三区很污很色的| 亚洲免费av网站| 成人性生交大合| 日韩欧美二区三区| 一区二区免费在线| 成人高清在线视频| 久久久亚洲精华液精华液精华液| 亚洲综合成人在线| www.欧美精品一二区| 国产亚洲欧美一区在线观看| 日日夜夜一区二区| 91精品91久久久中77777| 国产精品久久久久永久免费观看 | 91免费小视频| 国产欧美精品在线观看| 日本视频一区二区三区| 在线免费观看日本一区| 亚洲婷婷综合久久一本伊一区| 国产精品一区二区在线看| 日韩一区二区在线观看| 亚洲一区二区三区四区五区中文| 成人国产精品免费网站| 久久久久久电影| 老色鬼精品视频在线观看播放| 欧美日韩一级片在线观看| 樱桃国产成人精品视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 色久优优欧美色久优优| 综合亚洲深深色噜噜狠狠网站| 国产精品亚洲а∨天堂免在线| 日韩欧美国产午夜精品| 青青草原综合久久大伊人精品优势| 在线电影国产精品| 爽好久久久欧美精品| 制服丝袜亚洲网站| 丝袜美腿亚洲一区二区图片| 欧美日韩在线播放三区四区| 亚洲一区二区三区在线| 欧美伊人久久大香线蕉综合69| 一区二区三区日韩在线观看| 91官网在线观看| 亚洲线精品一区二区三区| 欧美视频在线播放| 热久久久久久久| 欧美草草影院在线视频| 国产在线看一区| 国产亚洲欧美日韩日本| 成人影视亚洲图片在线| 国产欧美精品在线观看| 97精品国产97久久久久久久久久久久| 国产欧美日韩综合精品一区二区| 国产成人高清在线| 国产精品久久久久9999吃药| 91免费看视频| 亚洲大片一区二区三区| 欧美一区二区私人影院日本| 午夜在线电影亚洲一区| 日韩视频免费观看高清完整版| 国产综合久久久久久久久久久久 | 国产女主播在线一区二区| 91美女片黄在线观看| 午夜精品福利久久久| 久久久亚洲高清| 色妹子一区二区| 久久国产乱子精品免费女|