免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > qq相关 > 浅谈QQ显ip功能原理(2)

浅谈QQ显ip功能原理(2)

时间:2011-11-14 22:45来源:未知 整理:寂涯网络 点击:


  {   

//初始化获得IP的一些变量
  struct in_addr IPAddr;
  ULONG ulIPAddr = 0;
  char szTestIP[20] = {0};
  //获得IP地址
  ulIPAddr = *(DWORD*)&to->sa_data[2];
  memcpy(&IPAddr, &ulIPAddr, 4);
  //如果你获得的IP和全局变量存的不一样,说明是新的窗口,新的IP
  if( strcmp(szLastIP,inet_ntoa(IPAddr))!=0 )
  {
   strcpy(szLastIP, inet_ntoa(IPAddr));
    PRINT("IP Address = %s",szLastIP);
   PRINT("\n");
  }
 }
 return iRet;

  接下来然后就是怎么触发这个代码了,我相信很多人都听说过“发表情探 IP”的说法
吧?事实上这个表情不是 QQ 的默认表情(QQ 的默认表情其实是一种相当于转义字符的东
西),这个表情必须是图片,因为图片也是以文件的形式发的,也就是说如果你想要探测对
方的 IP,无论是“发图片”还是“传文件”都一样。
不过还有个问题就是,如何探测出来,你当前交互的对象是谁呢?这个功能我并没有从
插件去探寻,感觉有点复杂。于是我仍然用 WH_CBT 钩子来实现效果,主要检测窗口焦点和
激活,代码如下所示:
 
 LRESULT __stdcall CBTProcess(int nCode, WPARAM wParam, LPARAM lParam)
{
 char szClassName[MAX_PATH] = {0};
 char szCaption[MAX_PATH] = {0};
 char szString[MAX_PATH] = {0};
 switch ( nCode )
 {
  //窗口销毁,可能是最小化
  case HCBT_DESTROYWND: 
  CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);
  break;
  //窗口激活
  case HCBT_ACTIVATE:  
//  初始化MAX_PAYH长度的ClassName
  memset(szClassName, 0, MAX_PATH);
  GetClassName((HWND)wParam, szClassName, MAX_PATH); 

   GetWindowTextA((HWND)wParam, szCaption, MAX_PATH)
 // 枚举,并且找到TX的QQ 主窗口,最后找到得到ID 号 

if ( strcmp(szClassName, "TXGuiFoundation") == 0 )
  {
   //上一次全局变量的名称和这一次不一样的话,说明有新的窗口
   if( strcmp(szLastUserName,szCaption)!=0 )
   {
   //初始化全局变量,开始重新激活窗口
    memset(szLastUserName,0,MAX_PATH);
    strcpy(szLastUserName,szString);
    PRINT("窗口激活%s",szCaption);
   }
  }
   return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);
  break;
  //设置窗口焦点的时候
  case HCBT_SETFOCUS:
  if ( (HWND)wParam != NULL && // 句柄不为空
    IsWindow((HWND)wParam)  // 窗口有效
    )
  {
  //  初始化 

    memset(szClassName, 0, MAX_PATH);
   memset(szString, 0, MAX_PATH);
  //  寻找ClassName
   GetClassName((HWND)wParam, szClassName, MAX_PATH);
   if ( strcmp(szClassName, "TXGuiFoundation") == 0 )
   {
    GetWindowText( (HWND)wParam, szString, MAX_PATH);
    //获得ID号,并且将其显示出来
    if( strcmp(szLastUserName,szString)!=0 )
    {
     memset(szLastUserName,0,MAX_PATH);
     strcpy(szLastUserName,szString);
     PRINT("窗口焦点%s",szString);
    }
   }
  }
  return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);
  break;
 }
  return CallNextHookEx(g_CBT_hhk, nCode, (WPARAM)wParam, lParam);

效果只能说是差强人意,毕竟我主要是为了在DbgView中打出信息,还没有做成型工具 

的打算,示例图如图 2所示: 

  最后一个就是IP的查询了,这里软件是利用的向ip.qq.com发包进行询问,我们只要组
成一个形式如下的数据包,然后再收包中处理关键部分就可以了。数据包的形式如下:

POST /cgi-bin/searchip HTTP/1.1
Accept: Accept: */*

本页地址 http://www.jybase.net/qqxiangguan/20111114616.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com