`
- 浏览:
248662 次
- 性别:
- 来自:
杭州
-
java 读取纯真IP数据库QQwry.dat的源代码(转)
-
java读取纯真IP数据库QQwry.dat的源代码,要运行此程序必须到网上下载QQwry.da,由于太大,我这里就不提供了。
-
一、IPEntry.java
-
-
-
-
-
-
-
public
class
IPEntry {
-
public
String beginIp;
-
public
String endIp;
-
public
String country;
-
public
String area;
-
-
-
-
-
-
-
public
IPEntry() {
-
beginIp = endIp = country = area = ""
;
-
}
-
-
public
String toString(){
-
retur this
.area+
" "
+
this
.country+
"IP范围:"
+
this
.beginIp+
"-"
+
this
.endIp;
-
}
-
}
-
-
二、Utils.java
-
-
-
-
-
-
import
java.io.UnsupportedEncodingException;
-
-
-
-
public
class
Utils {
-
-
-
-
-
-
public
static
byte
[] getIpByteArrayFromString(String ip) {
-
byte
[] ret =
new
byte
[
4
];
-
java.util.StringTokenizer st = new
java.util.StringTokenizer(ip,
"."
);
-
try
{
-
ret[0
] = (
byte
)(Integer.parseInt(st.nextToken()) &
0xFF
);
-
ret[1
] = (
byte
)(Integer.parseInt(st.nextToken()) &
0xFF
);
-
ret[2
] = (
byte
)(Integer.parseInt(st.nextToken()) &
0xFF
);
-
ret[3
] = (
byte
)(Integer.parseInt(st.nextToken()) &
0xFF
);
-
} catch
(Exception e) {
-
System.out.println(e.getMessage());
-
}
-
return
ret;
-
}
-
-
public
static
void
main(String args[]){
-
byte
[] a=getIpByteArrayFromString(args[
0
]);
-
for
(
int
i=
0
;i< a.length;i++)
-
System.out.println(a[i]);
-
System.out.println(getIpStringFromBytes(a));
-
}
-
-
-
-
-
-
-
-
public
static
String getString(String s, String srcEncoding, String destEncoding) {
-
try
{
-
return
new
String(s.getBytes(srcEncoding), destEncoding);
-
} catch
(UnsupportedEncodingException e) {
-
return
s;
-
}
-
}
-
-
-
-
-
-
-
-
public
static
String getString(
byte
[] b, String encoding) {
-
try
{
-
return
new
String(b, encoding);
-
} catch
(UnsupportedEncodingException e) {
-
return
new
String(b);
-
}
-
}
-
-
-
-
-
-
-
-
-
-
public
static
String getString(
byte
[] b,
int
offset,
int
len, String encoding) {
-
try
{
-
return
new
String(b, offset, len, encoding);
-
} catch
(UnsupportedEncodingException e) {
-
return
new
String(b, offset, len);
-
}
-
}
-
-
-
-
-
-
public
static
String getIpStringFromBytes(
byte
[] ip) {
-
StringBuffer sb = new
StringBuffer();
-
sb.append(ip[0
] &
0xFF
);
-
sb.append('.'
);
-
sb.append(ip[1
] &
0xFF
);
-
sb.append('.'
);
-
sb.append(ip[2
] &
0xFF
);
-
sb.append('.'
);
-
sb.append(ip[3
] &
0xFF
);
-
return
sb.toString();
-
}
-
}
-
-
三、IPSeeker.java
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
import
java.io.FileNotFoundException;
-
import
java.io.IOException;
-
import
java.io.RandomAccessFile;
-
import
java.nio.ByteOrder;
-
import
java.nio.MappedByteBuffer;
-
import
java.nio.channels.FileChannel;
-
import
java.util.ArrayList;
-
import
java.util.Hashtable;
-
import
java.util.List;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
public
class
IPSeeker {
-
-
-
-
-
-
-
-
-
-
-
private
class
IPLocation {
-
public
String country;
-
public
String area;
-
public
IPLocation() {
-
country = area = ""
;
-
}
-
public
IPLocation getCopy() {
-
IPLocation ret = new
IPLocation();
-
ret.country = country;
-
ret.area = area;
-
return
ret;
-
}
-
}
-
private
static
final
String IP_FILE = IPSeeker.
class
.getResource(
"/QQWry.dat"
).toString().substring(
5
);
-
-
private
static
final
int
IP_RECORD_LENGTH =
7
;
-
private
static
final
byte
AREA_FOLLOWED =
0x01
;
-
private
static
final
byte
NO_AREA =
0x2
;
-
-
private
Hashtable ipCache;
-
-
private
RandomAccessFile ipFile;
-
-
private
MappedByteBuffer mbb;
-
-
private
static
IPSeeker instance =
new
IPSeeker();
-
-
private
long
ipBegin, ipEnd;
-
-
private
IPLocation loc;
-
private
byte
[] buf;
-
private
byte
[] b4;
-
private
byte
[] b3;
-
-
-
-
private
IPSeeker() {
-
ipCache = new
Hashtable();
-
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) {
-
System.out.println(IPSeeker.class
.getResource(
"/QQWry.dat"
).toString());
-
System.out.println(IP_FILE);
-
System.out.println("IP地址信息文件没有找到,IP显示功能将无法使用"
);
-
ipFile = null
;
-
}
-
-
if
(ipFile !=
null
) {
-
try
{
-
ipBegin = readLong4(0
);
-
ipEnd = readLong4(4
);
-
if
(ipBegin == -
1
|| ipEnd == -
1
) {
-
ipFile.close();
-
ipFile = null
;
-
}
-
} catch
(IOException e) {
-
System.out.println("IP地址信息文件格式有错误,IP显示功能将无法使用"
);
-
ipFile = null
;
-
}
-
}
-
}
-
-
-
-
public
static
IPSeeker getInstance() {
-
return
instance;
-
}
-
-
-
-
-
-
public
List getIPEntriesDebug(String s) {
-
List ret = new
ArrayList();
-
long
endOffset = ipEnd +
4
;
-
for
(
long
offset = ipBegin +
4
; offset <= endOffset; offset += IP_RECORD_LENGTH) {
-
-
long
temp = readLong3(offset);
-
-
if
(temp != -
1
) {
-
IPLocation loc = getIPLocation(temp);
-
-
if
(loc.country.indexOf(s) != -
1
|| loc.area.indexOf(s) != -
1
) {
-
IPEntry entry = new
IPEntry();
-
entry.country = loc.country;
-
entry.area = loc.area;
-
-
readIP(offset - 4
, b4);
-
entry.beginIp = Utils.getIpStringFromBytes(b4);
-
-
readIP(temp, b4);
-
entry.endIp = Utils.getIpStringFromBytes(b4);
-
-
ret.add(entry);
-
}
-
}
-
}
-
return
ret;
-
}
-
-
-
-
-
-
public
List getIPEntries(String s) {
-
List ret = new
ArrayList();
-
try
{
-
-
if
(mbb ==
null
) {
-
FileChannel fc = ipFile.getChannel();
-
mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0
, ipFile.length());
-
mbb.order(ByteOrder.LITTLE_ENDIAN);
-
}
-
int
endOffset = (
int
)ipEnd;
-
for
(
int
offset = (
int
)ipBegin +
4
; offset <= endOffset; offset += IP_RECORD_LENGTH) {
-
int
temp = readInt3(offset);
-
if
(temp != -
1
) {
-
IPLocation loc = getIPLocation(temp);
-
-
if
(loc.country.indexOf(s) != -
1
|| loc.area.indexOf(s) != -
1
) {
-
IPEntry entry = new
IPEntry();
-
entry.country = loc.country;
-
entry.area = loc.area;
-
-
readIP(offset - 4
, b4);
-
entry.beginIp = Utils.getIpStringFromBytes(b4);
-
-
readIP(temp, b4);
-
entry.endIp = Utils.getIpStringFromBytes(b4);
-
-
ret.add(entry);
-
}
-
}
-
}
-
} catch
(IOException e) {
-
System.out.println(e.getMessage());
-
}
-
return
ret;
-
}
-
-
-
-
-
-
private
int
readInt3(
int
offset) {
-
mbb.position(offset);
-
return
mbb.getInt() &
0x00FFFFFF
;
-
}
-
-
-
-
-
private
int
readInt3() {
-
return
mbb.getInt() &
0x00FFFFFF
;
-
}
-
-
-
-
-
-
public
String getCountry(
byte
[] ip) {
-
-
if
(ipFile ==
null
)
return
"错误的IP数据库文件"
;
-
-
String ipStr = Utils.getIpStringFromBytes(ip);
-
-
if
(ipCache.containsKey(ipStr)) {
-
IPLocation loc = (IPLocation)ipCache.get(ipStr);
-
return
loc.country;
-
} else
{
-
IPLocation loc = getIPLocation(ip);
-
ipCache.put(ipStr, loc.getCopy());
-
return
loc.country;
-
}
-
}
-
-
-
-
-
-
public
String getCountry(String ip) {
-
return
getCountry(Utils.getIpByteArrayFromString(ip));
-
}
-
-
-
-
-
-
public
String getArea(
byte
[] ip) {
-
-
if
(ipFile ==
null
)
return
"错误的IP数据库文件"
;
-
-
String ipStr = Utils.getIpStringFromBytes(ip);
-
-
if
(ipCache.containsKey(ipStr)) {
-
IPLocation loc = (IPLocation)ipCache.get(ipStr);
-
return
loc.area;
-
} else
{
-
IPLocation loc = getIPLocation(ip);
-
ipCache.put(ipStr, loc.getCopy());
-
return
loc.area;
-
}
-
}
-
-
-
-
-
-
public
String getArea(String ip) {
-
return
getArea(Utils.getIpByteArrayFromString(ip));
-
}
-
-
-
-
-
-
private
IPLocation getIPLocation(
byte
[] ip) {
-
IPLocation info = null
;
-
long
offset = locateIP(ip);
-
if
(offset != -
1
)
-
info = getIPLocation(offset);
-
if
(info ==
null
) {
-
info = new
IPLocation();
-
info.country = "未知国家"
;
-
info.area = "未知地区"
;
-
}
-
return
info;
-
}
-
-
-
-
-
-
-
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
;
-
}
-
}
-
-
-
-
-
-
-
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
;
-
}
-
}
-
-
-
-
-
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
;
-
}
-
}
-
-
-
-
-
-
-
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());
-
}
-
}
-
-
-
-
-
-
-
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;
-
}
-
-
-
-
-
-
-
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
;
-
}
-
-
-
-
-
-
-
private
int
compareByte(
byte
b1,
byte
b2) {
-
if
((b1 &
0xFF
) > (b2 &
0xFF
))
-
return
1
;
-
else
if
((b1 ^ b2) ==
0
)
-
return
0
;
-
else
-
return
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
以下是一个简单的Java源代码示例,演示如何读取QQwry.dat并获取IP地址所在的地区: ```java import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class ...
这个压缩包"读取IP数据库(QQWry.dat)文件 v0.1 Full Source.rar"包含了一个程序及其源代码,用于读取并解析QQWry.dat文件。下面将详细介绍这个过程中的相关知识点。 1. IP数据库: IP数据库是一个存储了全球IP地址...
Java读取qqwry.dat实现IP地域查询是网络编程中的一种常见需求,特别是在开发服务器端应用、游戏插件或者网络安全工具时。qqwry.dat是一个包含全球IP地址及其对应地理位置信息的数据文件,由著名的IP查询库——...
标题 "Go-qqwry.go-纯真ip库的golang服务" 指的是一个用 Go 语言编写的微服务程序,它专门用于处理 IP 地址查询,特别是使用了“纯真 IP 库”作为数据源。纯真 IP 库是中国广泛使用的 IP 地址数据库,包含了丰富的 ...
总的来说,NL_QQwry是C++环境中一个实用的IP查询工具,通过封装QQWry.dat数据库的读取和解析过程,简化了开发者的工作,提高了IPWhois查询的效率。在实际应用中,无论是服务器监控、网络安全分析还是网络管理,NL_...
确保程序有读取qqwry.dat的权限,并检查代码是否与Windows 7系统兼容。 总结,通过解析qqwry.dat数据库,我们可以快速地获取到任意IP地址的地理位置信息。这个过程涉及到二进制文件操作、数据结构设计、搜索算法...
总结来说,【ASP.NET源码]IP 地址扫描器(使用 QQWry.dat IP 地址库)】项目展示了如何结合ASP.NET技术与第三方数据源(QQWry.dat)开发一个实用的IP查询工具。它涉及到网络编程、数据库操作、文件处理以及Web用户界面...
在本例中,我们主要关注`QQWry.Dat`这个文件,它是纯真IP数据库的文件名,包含了大量的IP段及其对应的国家和地区信息。 1. 创建`FileSystemObject`对象: ```vbscript Set fso = Server.CreateObject("Scripting....
源代码(ip.d)提供了一个用D语言编写的IP地址查询程序,你可以通过阅读源码了解如何解析和查找QQWry.dat中的数据。它可能包含了对文件的读取、二进制搜索算法以及IP地址到地理位置的映射逻辑。 2. **PHP版本的程序 ...
"纯真数据库读取程序代码"是一个用于处理和解析纯真IP数据库的C++源代码项目,包含了两个关键文件:SEU_QQwry.cpp和SEU_QQwry.h。这个程序的主要目的是帮助开发者在他们的应用中快速查找并识别IP地址对应的地理位置...
本模块代码是针对在 2011 年在 CSDN 论坛个发布的“最新 NET 读取纯真IP数据库代码(C#)”源码,做了一次升级,这次升级不是简单的修补,是本人精心的重写,现在只需要 5 分哦,您值得拥有!该源代码不同于网上的...
标题中的“纯真IP地址查询(Java版源代码)”指的是使用Java编程语言实现的IP地址查询工具,它能够解析并查找IP对应的地理位置信息。这种工具通常基于纯真IP数据库,该数据库包含了全球大部分IP地址的对应国家和地区...
在Java编程语言中,"纯真IP查询"通常指的是使用纯真IP数据库(通常称为"ZDB"或"QQWry.Dat")来获取IP地址对应国家和地区的功能。这个压缩包文件"java--纯真IP查询.rar"包含了一个名为"IpAddress.java"的源代码文件,...
_CFD_源码.zip 这个压缩包文件名暗示了它包含的是一个CFD(Computational Fluid Dynamics,计算流体动力学)工具的源代码,具体版本为1。文件名中的"QQwry.dat"可能是一个特定的数据文件,用于输入或测试CFD模型。...
"纯真IP源代码"指的是基于Delphi/Pascal编程语言实现的一种IP地址查询系统,它主要功能是查找和解析IP地址对应的地理位置信息。这个系统通常使用一个名为"QQWry.Dat"的数据文件,该文件包含了全球IP地址的数据库。这...
这是一个用Pascal语言编写的源代码文件,通常用于解析`qqwry.db`或类似的IP数据库格式。`QQWry`是由QQ公司维护的一个IP数据库,它包含了大量IP地址与地理位置的映射关系。`ParseQQWry.pas`可能是一个解析器,用于...
3. Wry2Mdb.cpp:这可能是主要的程序逻辑实现,包括读取QQWry.dat文件,解析其内容,并将数据写入MDB文件。 4. uAbout.dfm、uMain.dfm:这些是Delphi的表单文件,定义了用户界面的布局和组件,如按钮、文本框等。 5....
这个小工具的核心功能是将纯真IP数据库(QQWry.Dat)转换为文本文件,以便用户可以更方便地查看和处理IP地址信息。下面我们将深入探讨这个过程涉及的主要知识点。 1. **C#编程语言**:C#是一种面向对象的编程语言,...