如何通过一个编程获得IP地址归属地的最简单办法

有时在网站应用程序中要显示对方的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

如何通过一个编程获得IP地址归属地的最简单办法,布布扣,bubuko.com

时间: 2024-08-11 01:36:23

如何通过一个编程获得IP地址归属地的最简单办法的相关文章

几个常用的IP地址归属地查询

几个常用的IP地址归属地查询 原文作者:小伙伴 地址:http://www.it163.org/post/118fd1_7c4073   在做网站开发的时候经常会遇到一些IP检测方面的问题.比如说,根据用户IP所在的地理位置跳转到不同的站点,或者是一些天气预报之类的小插件等等这些问题都需要判断用户地理位置! 发现好多程序员和我以前的做法基本上是相同的,都是读取纯真IP库的数据来判断!但是,用了一段时间发现,纯真的数据错误的确挺多的,还有就是那么 大的一个DAT文件确实很鸡肋!最近经测试发现其实调

华为oj-判断输入的字符串是不是一个有效的IP地址

题目标题: 判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址 约束 输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有空格认为是不合法IP 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP 子段为单个0 认为是合法IP,0.0.

无法启动INTERNET连接共享。一个已经用IP地址配置的LAN连接需要自动IP地址

提问者采纳 很简单 只要把你要共享的连接 192.168.0.1 0改成1 然后就可以共享了 共享后再改回来 就能上了 但是会出现IP冲突的~ 无法启动INTERNET连接共享.一个已经用IP地址配置的LAN连接需要自动IP地址

华为OJ测试题——判断输入的字符串是不是一个有效的IP地址(附世上最全测试数据)

题目标题: 判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址 约束 输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有空格认为是不合法IP 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP 子段为单个0 认为是合法IP,0.0.

网络编程,IP地址,TCP 编程

package cn.socket001; //网络编程: /*网络概念 把多台计算机通过物理线路连接起来,就形成了网络.目的在于交换数据和共享信息. 网络通信的三要素 [1]IP地址:唯一标识网络上的每一台计算机.两台计算机之间通信的必备有素 [2]端口号:计算机中应用的标号(代表一个应用程序) 0-1024系统使用或保留端口 常见端口:http:80 stmp: 25 ftp:21 有效端口0-65536,开发者可以的端口是1025-65536之间.一些第三方引用如mysql:3306 or

最新手机号段归属地,IP地址归属地数据库

最新手机号段归属地数据库-购买  http://qqzeng.com IP地址数据库-代码   SDK API 多语言解析Dat 导入数据库脚本 https://github.com/zengzhan/qqzeng-ip IP地址数据库-最新   微信 qqzeng-ip官网 http://qqzeng.com演示 http://qqzeng.com/ip

【Linux网络编程】IP地址介绍

什么是 IP 地址IP 地址(Internet Protocol Address)也称为网间地址.网际地址.IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP 地址是?TCP/IP 协议栈?里的网络层地址方案,IP地址是一种用来对网络设备的逻辑标识. 举个生活中的例子,如果我要寄一

IP地址归属地查询

http://www.ipip.net/download.html#ip_code 下载免费版 IP 地址数据库. 网站下面有官方给出的查找IP地址所属国家.省.市的办法. python版本列出 python 示例代码 import os from ipip import IP from ipip import IPX IP.load(os.path.abspath("mydata4vipday2.dat")) print IP.find("118.28.8.8")

手机号段、ip地址归属地大全

百事通:http://www.114best.com/dh/114.aspx?w=17097232323,联通识别为电信的,1349错 二三四五:http://tools.2345.com/frame/black/mobile/17097232323 ,city,type,phone_no,1349未知 号码查询:http://www.ziwww.com/haoma/17097232323.html,city,type,phone_no,zipcode,1349错 http://www.ip13