如何通过一个编程获得IP地址归属地的最简单办法
2014-05-22 11:12
225 查看
有时在网站应用程序中要显示对方的IP地址与它的归属地,一般来说,有下列几种办法。
1, 采用IP地址数据库。本地查询
这个办法的优点是:查询速度最快,不依赖于外部网站。
缺点是:要编写一定的数据库查询代码,而且你的数据库如果不是很新,则某些IP的查询结果会不正确。
(有需要的可以在此留言,大虾米可以提供一个能找到的最新的IP地址库)
2,采用WebService查询。
这里有一个最好的WebService http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D 缺点是:要编写一定的WebService查询代码。而且查询的结果是XML形式,需要进一步的解析。
3,调用某些查询网站的代码,如 http://www.ip.cn/
缺点是:它会返回相当多的无关代码,难以解析出你想要的东西。
4, 调用气动隔膜泵网站链接直接查询
比如 http://www.tianqizx.cn/ip.aspx?ip=202.105.19.49 网站会直接返回查询的结果,如 “ 广东省佛山市 三水区”
不会有任何的杂信息干扰
win32 API并没有提供直接得到CPU占用率的气动隔膜泵函数,但提供GetProcessTimes()函数可以得到进程占用的CPU时间,通过和实际时间的流逝相比,可以得到某进程占用CPU的比率好了,
下面就是完整的C++代码。
// 得到当前进程的CPU占用率
class GetCPUPercentage
{
private:
CRITICAL_SECTION cs; // 供多线程同步的临界区变量
HANDLE hd; // 空闲进程的句柄
DWORD t1; // 时间戳
int percent; // 最近一次计算的CPU占用率
__int64 oldp;
__int64 FileTimeToInt64(const FILETIME& time);
int GetTime(__int64& proc); // 得到进程占用的CPU时间
public:
GetCPUPercentage();
~GetCPUPercentage();
int Get(); // 得到CPU占用率
};
GetCPUPercentage::GetCPUPercentage()
{
InitializeCriticalSection(&cs); // 初始化线程临界区变量
percent = 0; // 初始的占用率
DWORD pid = GetCurrentProcessId(); // 得到当前进程id
hd = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); // 通过id得到进程的句柄
if( hd==NULL ){
return;
}
// 得到初始时刻的值
GetTime(oldp);
t1 = GetTickCount();
}
GetCPUPercentage::~GetCPUPercentage()
{
if( hd!=NULL ){
CloseHandle(hd);
}
DeleteCriticalSection(&cs);
}
// 时间格式转换
__int64 GetCPUPercentage::FileTimeToInt64(const FILETIME& time)
{
ULARGE_INTEGER tt;
tt.LowPart = time.dwLowDateTime;
tt.HighPart = time.dwHighDateTime;
return(tt.QuadPart);
}
// 得到进程占用的CPU时间
int GetCPUPercentage::GetTime(__int64& proc)
{
FILETIME create;
FILETIME exit;
FILETIME ker; // 内核占用时间
FILETIME user; // 用户占用时间
FILETIME now;
if( !GetProcessTimes(hd, &create, &exit, &ker, &user) ){
return(-1);
}
proc = (FileTimeToInt64(ker) + FileTimeToInt64(user))/10000;
return(0);
}
// 进行换算
int GetCPUPercentage::Get()
{
if( hd==NULL )
return(0);
EnterCriticalSection(&cs);
DWORD t2 = GetTickCount();
DWORD dt = t2 - t1;
if( dt>139 ){ // 毫秒数。用一个比较少的时间片作为计算单位,这个值可修改
__int64 proc;
GetTime(proc);
percent = ((proc-oldp)*100)/dt;
t1 = t2;
oldp = proc;
}
LeaveCriticalSection(&cs);
return(percent);
}
// 定义一个全局变量
GetCPUPercentage _cpu;
// 下面是用C++Bulider写的测试例子:
// --------------------------
// 在用一个时钟不停地显示当前的CPU占用率
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{http://www.it168.com/
Label1->Caption = _cpu.Get();
}
//---------------------------------------------------------------------------
// 再弄个按钮
LRESULT WINAPI TestThread(LONG lParam)
{
int n = lParam;
for(int i=0 ;i<n; i++){
Form1->Label2->Caption = i;
Sleep(12);
}
return(0);
}
// 点击这个按钮会创建一些线程来把CPU整的繁忙些
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = atoi(Edit1->Text.c_str());
DWORD dwThreadid;
CreateThread(NULL
1, 采用IP地址数据库。本地查询
这个办法的优点是:查询速度最快,不依赖于外部网站。
缺点是:要编写一定的数据库查询代码,而且你的数据库如果不是很新,则某些IP的查询结果会不正确。
(有需要的可以在此留言,大虾米可以提供一个能找到的最新的IP地址库)
2,采用WebService查询。
这里有一个最好的WebService http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D 缺点是:要编写一定的WebService查询代码。而且查询的结果是XML形式,需要进一步的解析。
3,调用某些查询网站的代码,如 http://www.ip.cn/
缺点是:它会返回相当多的无关代码,难以解析出你想要的东西。
4, 调用气动隔膜泵网站链接直接查询
比如 http://www.tianqizx.cn/ip.aspx?ip=202.105.19.49 网站会直接返回查询的结果,如 “ 广东省佛山市 三水区”
不会有任何的杂信息干扰
win32 API并没有提供直接得到CPU占用率的气动隔膜泵函数,但提供GetProcessTimes()函数可以得到进程占用的CPU时间,通过和实际时间的流逝相比,可以得到某进程占用CPU的比率好了,
下面就是完整的C++代码。
// 得到当前进程的CPU占用率
class GetCPUPercentage
{
private:
CRITICAL_SECTION cs; // 供多线程同步的临界区变量
HANDLE hd; // 空闲进程的句柄
DWORD t1; // 时间戳
int percent; // 最近一次计算的CPU占用率
__int64 oldp;
__int64 FileTimeToInt64(const FILETIME& time);
int GetTime(__int64& proc); // 得到进程占用的CPU时间
public:
GetCPUPercentage();
~GetCPUPercentage();
int Get(); // 得到CPU占用率
};
GetCPUPercentage::GetCPUPercentage()
{
InitializeCriticalSection(&cs); // 初始化线程临界区变量
percent = 0; // 初始的占用率
DWORD pid = GetCurrentProcessId(); // 得到当前进程id
hd = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); // 通过id得到进程的句柄
if( hd==NULL ){
return;
}
// 得到初始时刻的值
GetTime(oldp);
t1 = GetTickCount();
}
GetCPUPercentage::~GetCPUPercentage()
{
if( hd!=NULL ){
CloseHandle(hd);
}
DeleteCriticalSection(&cs);
}
// 时间格式转换
__int64 GetCPUPercentage::FileTimeToInt64(const FILETIME& time)
{
ULARGE_INTEGER tt;
tt.LowPart = time.dwLowDateTime;
tt.HighPart = time.dwHighDateTime;
return(tt.QuadPart);
}
// 得到进程占用的CPU时间
int GetCPUPercentage::GetTime(__int64& proc)
{
FILETIME create;
FILETIME exit;
FILETIME ker; // 内核占用时间
FILETIME user; // 用户占用时间
FILETIME now;
if( !GetProcessTimes(hd, &create, &exit, &ker, &user) ){
return(-1);
}
proc = (FileTimeToInt64(ker) + FileTimeToInt64(user))/10000;
return(0);
}
// 进行换算
int GetCPUPercentage::Get()
{
if( hd==NULL )
return(0);
EnterCriticalSection(&cs);
DWORD t2 = GetTickCount();
DWORD dt = t2 - t1;
if( dt>139 ){ // 毫秒数。用一个比较少的时间片作为计算单位,这个值可修改
__int64 proc;
GetTime(proc);
percent = ((proc-oldp)*100)/dt;
t1 = t2;
oldp = proc;
}
LeaveCriticalSection(&cs);
return(percent);
}
// 定义一个全局变量
GetCPUPercentage _cpu;
// 下面是用C++Bulider写的测试例子:
// --------------------------
// 在用一个时钟不停地显示当前的CPU占用率
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{http://www.it168.com/
Label1->Caption = _cpu.Get();
}
//---------------------------------------------------------------------------
// 再弄个按钮
LRESULT WINAPI TestThread(LONG lParam)
{
int n = lParam;
for(int i=0 ;i<n; i++){
Form1->Label2->Caption = i;
Sleep(12);
}
return(0);
}
// 点击这个按钮会创建一些线程来把CPU整的繁忙些
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = atoi(Edit1->Text.c_str());
DWORD dwThreadid;
CreateThread(NULL
相关文章推荐
- 一个简单登陆框的变化+更新了如何连接sql数据库,获得数据集,比较两种方法(数据集和读数据)
- flex 中通过 RO 调用一个java写的Bean的时候获得IP地址的方法 .也就是获得session 和 request的方法
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 知道一个div的宽高背景色,如何不通过写在行间样式的办法更改样式?currentStyle(只兼容ie),getComeputedStyle(兼容)-->获取非行间样式
- 通过IP地址获取归属地的最简单的方法
- 如何通过一个Url获得图片的大小
- 通过一个简单的例子,介绍如何使用LDAP(转)
- 编程如何获得通过草图创建的Revit构件关联的原始草图对象
- 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
- 通过IP地址获取归属地的最简单的方法[转]
- 在Windows XP中如何释放并重新获得一个IP地址?
- WCF热门问题编程示例(1):WCF服务如何获得客户端IP地址信息
- [每天一个知识点]24-编程技巧-如何简单计算分页等需要进1的除法
- 在同一个网段局域网内,通过ip地址获得机器的mac地址
- 通过一个简单的例子学习编译器是如何执行程序的
- socket编程中如何实现自动获取本机IP地址和随机获取一个没有占用的端口
- 简介 WatiN是一个开源的用于Web测试自动化的类库,从watir中获得的灵感,使用C#开发。WatiN通过与浏览器的交互来实现自动化,使用起来具有轻便,简单的特点。目前最新版本为2.0,加入了对
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(原创)
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的