- 浏览: 1575861 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
http://topic.csdn.net/u/20070415/19/747769f0-e0e9-4384-8c04-af84e5682d1f.html
结合QQwry.dat |
package cn.lync.ecollege.comm; import java.io.*; import java.net.*; import java.util.*; public class QueryIP { public IPLocation loc= new IPLocation(); public RandomAccessFile ipFile = null; private static byte REDIRECT_MODE_1 = 0x01; private static byte REDIRECT_MODE_2 = 0x02; private byte[] buf = new byte[256]; private byte[] b3 = new byte[3]; private byte[] b4 = new byte[4]; public PrintWriter file_out = null; public static void main(String[] args) throws Exception{ long begin_time = System.currentTimeMillis(); QueryIP queryIP = new QueryIP(); //queryIP.query(); queryIP.query2( "211.67.81.4 "); long end_time = System.currentTimeMillis(); System.out.println( "Total time is "+ (end_time-begin_time) + "ms "); } public void query()throws Exception{ ipFile = new RandomAccessFile( "QQWry.Dat ", "r "); file_out = new PrintWriter( "out.csv "); long index_begin_off = readLong4(0); long index_end_off = readLong4(4); System.out.println( "index_begin_off = "+index_begin_off); System.out.println( "index_end_off = "+index_end_off); for(long i=index_begin_off; i <index_end_off; i+=7){ byte[] ip_start = new byte[4]; byte[] ip_end = new byte[4]; ipFile.seek(i); ipFile.readFully(ip_start); long ip_record_off = readLong3(); ipFile.seek(ip_record_off); ipFile.readFully(ip_end); ip_start = toNetOrder(ip_start); ip_end = toNetOrder(ip_end); IPLocation loc_get = getIPLocation( ip_record_off ); file_out.println( getDotedIP( ip_start )+ ", "+getDotedIP(ip_end ) + ", "+ loc_get.country + ", " + loc_get.area); } //long begin_off = readLong3(index_end_off+4); //IPLocation test_loc = getIPLocation(begin_off); //System.out.println( "COUNTRY= " +test_loc.country); //System.out.println( "AREA= " +test_loc.area); } public Hashtable query2(String dotted_ip)throws Exception{ Hashtable ret_hash = new Hashtable(); byte[] ip_array = new byte[4]; ip_array = InetAddress.getByName(dotted_ip).getAddress(); ipFile = new RandomAccessFile(new CommonObjects().CLASSES_ROOT+ "QQWry.Dat ", "r "); //file_out = new PrintWriter( "out.csv "); long index_begin_off = readLong4(0); long index_end_off = readLong4(4); //System.out.println( "index_begin_off = "+index_begin_off); //System.out.println( "index_end_off = "+index_end_off); long start_num = index_begin_off; long end_num = index_end_off; for(long i=start_num; i <=end_num; i+=7){ byte[] ip_start = new byte[4]; byte[] ip_end = new byte[4]; ipFile.seek(i); ipFile.readFully(ip_start); long ip_record_off = readLong3(i+4); ipFile.seek(ip_record_off); ipFile.readFully(ip_end); ip_start = toNetOrder(ip_start); ip_end = toNetOrder(ip_end); // Only search half: first-half OR second-half // long half_index_off = i + ( (index_end_off-i)/14 ) * 7 ; // if( ip_array[0] <ip_start[0] ) { // i=half_index_off; // }else{ // i=half_index_off; // } if( ip_start[0]> =ip_array[0] && ip_array[0] <=ip_end[0] ){ if( ip_start[1]> =ip_array[1] && ip_array[1] <=ip_end[1] ){ if( getLong4(ip_array)> =getLong4(ip_start) && getLong4(ip_array) <=getLong4(ip_end)) { //System.out.println( "ip_start = [ "+getDotedIP(ip_start)+ "] "); //System.out.println( "ip_end = [ "+getDotedIP(ip_end)+ "] "); //System.out.println( "ip_array = [ "+getDotedIP(ip_array)+ "] "); IPLocation loc_get = getIPLocation( ip_record_off ); //System.out.println( "COUNTRY= " +loc_get.country); //System.out.println( "AREA= " +loc_get.area); ret_hash.put( "COUNTRY ",loc_get.country); ret_hash.put( "AREA ",loc_get.area); break; } } } } long info_index = readLong3(index_end_off+4); IPLocation loc_info = getIPLocation( info_index ); //System.out.println(loc_info.country + ", " +loc_info.area); ret_hash.put( "IP_INFO_SOURCE ",loc_info.country + ", " +loc_info.area); return ret_hash; } public String getDotedIP( byte[] ip_addr) throws Exception { return InetAddress.getByAddress(ip_addr).getHostAddress(); } /** * 给定一个ip国家地区记录的偏移,返回一个IPLocation结构 * @param offset 国家记录的起始偏移 * @return IPLocation对象 */ private IPLocation getIPLocation(long offset) { try { // 跳过4字节ip ipFile.seek(offset + 4); // 读取第一个字节判断是否标志字节 byte b = ipFile.readByte(); if(b == REDIRECT_MODE_1) { // 读取国家偏移 long countryOffset = readLong3(); // 跳转至偏移处 ipFile.seek(countryOffset); // 再检查一次标志字节,因为这个时候这个地方仍然可能是个重定向 b = ipFile.readByte(); if(b == REDIRECT_MODE_2) { loc.country = readString(readLong3()); ipFile.seek(countryOffset + 4); } else loc.country = readString(countryOffset); // 读取地区标志 loc.area = readArea(ipFile.getFilePointer()); } else if(b == REDIRECT_MODE_2) { 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; } } /** * 从offset偏移开始解析后面的字节,读出一个地区名 * @param offset 地区记录的起始偏移 * @return 地区名字符串 * @throws IOException 地区名字符串 */ private String readArea(long offset) throws IOException { ipFile.seek(offset); byte b = ipFile.readByte(); if(b == REDIRECT_MODE_1 || b == REDIRECT_MODE_2) { long areaOffset = readLong3(offset + 1); if(areaOffset == 0) //return LumaQQ.getString( "unknown.area "); return "unknown area "; else return readString(areaOffset); } else return readString(offset); } /** * 从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; } } |
发表评论
-
JVM问题追查与调优
2012-03-27 14:44 1143JDK的几种分析工具 http://liudaoru ... -
NodeJs相关资料
2011-08-18 14:55 3006NodeJs获取参数: proces ... -
jprofiler追踪问题
2011-08-12 18:20 1047Jprofiler下载页: http://www.ej ... -
Linux服务器性能评估与优化【z】
2011-07-01 10:05 1548来自:http://www.itlearner.com/ ... -
Java 理论与实践: 非阻塞算法简介【z】
2011-03-26 20:39 1283From: http://www.ibm.com/develo ... -
Java Crash问题分析[z]
2011-03-23 14:41 5972参考: http://www.ibm.com/develop ... -
Berkeley DB相关
2010-09-25 22:17 1054为什么要使用Berkeley DB,它适合什么场合应用?Ber ... -
熟悉系统方法总结
2010-07-06 14:26 816了解一个陌生的系统是我们经常碰到的事情,下面总结一下自己的一些 ... -
Java缓存框架 EhCache
2010-07-06 14:09 4728From: http://www.oschina.net/p/ ... -
【nio】使用 ServerSocketChannel 实现的 File 服务器[z]
2010-05-21 17:31 3970From: http://www.java2000.net/p ... -
Memcached命令行管理
2010-03-15 11:18 4488From: http://www.exp2up.com/2 ... -
(转)Resin服务器配置指南
2010-01-21 15:35 3463From:http://blog.21cn.com/super ... -
Flickr架构
2010-01-11 09:52 1267From: http://www.cyask.com/ques ... -
JDK的几种分析工具
2009-12-04 12:13 10903From: http://blog.csdn.net/hant ... -
XMemcached——一个新的开源Java memcached客户端
2009-10-23 09:27 1893From: http://www.infoq.com/cn/ ... -
多线程任务调度学习
2009-10-16 13:58 2302昨天找到一套多线程任务调度的代码,相当的不错,先把思路总结一下 ... -
用HSCALE实现MySQL的数据分布式存储
2009-10-15 12:47 3017From:http://www.ningoo.net/ht ... -
马化腾:搜索、电子商务硬仗一定要坚持打
2009-10-15 12:09 1716From:http://www.techweb.com.c ... -
MySQL分表实现上百万上千万记录分布存储的批量查询设计模式【z】
2009-10-15 09:56 3171From:http://hi.baidu.com/jabber ... -
nginx负载均衡和lvs负载均衡的比较分析【z】
2009-10-13 20:02 1471From:http://www.shouker.com/u ...
相关推荐
"纯真IP地址数据库"可能就是这样的一个本地化数据库,提供快速查询服务,避免了每次查询都需要连接远程服务器的延迟。 "主界面.bmp"、"设置.bmp"、"托盘处菜单.bmp"这些文件名表明该程序具有直观的用户界面,用户...
为了使用这个数据库,你需要先解压“ip.7z”文件,然后使用适当的工具(如Python、Java或PHP)读取并解析“ip”文件,接着通过编程接口(API)或者直接查询来获取特定IP地址的位置信息。 总的来说,这个资源为...
描述中提到的“全球IP地址快速查看”意味着这个IP_DATA文件很可能是包含了全球各个国家和地区的IP地址数据库,方便用户快速查询和定位IP地址所属的地理位置、网络服务提供商等信息。这样的数据对于网络管理员、网络...
QQ IP数据库纯真版是一款专为用户提供的IP地址查询工具,尤其在2014-08-30进行了更新,以确保用户可以获取到最新的IP地址信息,并准确查询到IP地址的归属地。这个数据库主要针对的是中国的IP地址,为用户提供了详尽...
标签中的"ip地址库"表明这个系统的核心是IP地址数据库,用于存储和检索IP地址数据。"php"表示该系统使用的是PHP编程语言,而"ip地址解析"则说明系统的功能是解析和处理IP地址,提供IP到地理位置的转换服务。 在...
这个数据库包含了海量的IP地址信息,旨在帮助用户识别和过滤来自不同地区的网络连接,通常用于防止垃圾邮件、网络攻击或者进行流量优化等目的。 在描述中提到的“彩虹3引擎”,这是一个特定的IP数据库查询引擎,...
通过下载并分析`country-ipv4.lst`文件,可以筛选出所有属于中国的IP地址段,从而构建中国IP地址数据库。 #### 实现IP地址归属地判断 有了上述算法和数据库支持,判断一个IP地址是否属于中国就变得简单多了。首先...
“ip_addr-20200410.7z”是一个压缩文件,包含了更新至2020年4月10日的IP地址数据库。这个数据库基于纯真数据库和淘宝地址库进行了重制和整合,目的是提供更准确的地理位置信息。纯真数据库是一个由国内用户贡献的IP...
标题中的“ip_addr-20200325.7z”是一个压缩文件,它包含了一个IP地址库。这个库是基于两个知名的IP数据库——纯真数据库和淘宝地址库——进行整合和重新制作的。20200325表示这个数据集是在2020年3月25日更新的,这...
这通常意味着它是一个更新至该日期的IP地址数据库,可能包含了在此日期前收集和整理的IP地址信息。 描述中提到的“IP地址值库”是这个数据库的核心内容,它是基于“纯真数据库”和“淘宝地址库”进行重制的。纯真...
收集了包括中国电信、中国移动、中国联通、长城宽带、聚友宽带等 ISP 的最新准确 IP 地址数据。包括最全的网吧数据。
2. **连接配置**:建立数据库连接需要知道MySQL服务器的IP地址或域名、端口号、数据库名称、用户名和密码。在LabVIEW中,可以通过配置VI(虚拟仪器)来设置这些参数,创建数据库连接。 3. **SQL查询**:LabVIEW中的...
5. 通过数据库放置元件,打开任意一张原理图页面,执行快捷键 Z,part code = 料号,双击元件后后即可放入原理图内。 6. Allegro 封装库路径配置,在 Allegro 中任意打开一张.brd 文件,设置 Library 路径,选择 ...
标题提到的"随机生成对应省份IP的PHP类.7z"是一个压缩包,里面包含了一个PHP类,这个类能够实现根据省份随机生成IP地址的功能。 首先,我们需要理解IP地址的结构。IP地址是由32位二进制组成的,通常分为四段,每段8...
- 连接配置包括指定SQL Server的IP地址(162.105.31.249),并使用预设的登录名(ZKStudy)和密码(ZKStudy)。 4. **表名命名规则**: - 在创建数据库表时,考生需要注意表名的规范性。根据描述,表名需要在前面...
需要检查相关配置是否正确,例如服务器的IP地址、端口号、登录凭据等。 3. **数据库引擎服务**:如果数据库引擎服务没有运行,或者服务启动配置不正确,也会导致无法连接。需要确认SQL Server服务的状态,并检查...
标题中的“IP锁定程序实例源码.7z”是一个基于.NET平台的软件开发项目,它提供了对特定IP地址进行访问限制的功能。这个程序的核心在于能够识别用户的IP地址,并根据预设的规则决定是否允许该IP继续访问。描述中提到...
GeoLite2-Country-CSV_20200707.7z 是一个压缩包文件,其中包含GeoLite2数据库的2020年7月7日版本,该数据库专门用于提供全球各国的IP地址定位信息。GeoLite2是由MaxMind公司开发的一款免费的IP地理位置数据库,它为...
网络配置包括选择网络接口卡、设置IP地址和子网掩码等。例如,在使用Sam工具时,需要选择“Net woki ng and Communi cat i ons”(网络和通信),然后选择“Net work Int erf ace Car ds”(网络接口卡),并选择“l...
在本文中,我们将深入探讨如何解决Z-Blog平台在高并发环境下出现的性能问题,以及如何在评论系统中添加IP地址显示功能。 首先,我们关注的是Z-Blog在处理大量并发用户评论时遇到的性能瓶颈。当一篇博客文章获得数万...