第十四章:提取出某日访问百度次数最多的那个IP

2024-02-01 05:18

本文主要是介绍第十四章:提取出某日访问百度次数最多的那个IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提取出某日访问百度次数最多的那个IP

问题描述:海量日志数据,提取出某日访问百度次数最多的那个IP。

分析:IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址, 创建一个unsigned count[N];的数组,即可统计出每个IP的访问次数

#include <fstream>  
#include <iostream>  
#include <ctime>  using namespace std;  
#define N 32           //临时文件数  #define ID(x)  (x>>27)                 //x对应的文件编号  
#define VALUE(x) (x&0x07ffffff)        //x在文件中保存的值  
#define MAKE_IP(x,y)  ((x<<27)|y)      //由文件编号和值得到IP地址.  #define MEM_SIZE  128*1024*1024       //需分配内存的大小为 MEM_SIZE*sizeof(unsigned)     char* data_path="D:/test/ip.dat";        //ip数据  //产生n个随机IP地址  
void make_data(const int& n)         
{  ofstream out(data_path,ios::out|ios::binary);  srand((unsigned)(time(NULL)));  if (out)  {  for (int i=0; i<n; ++i)  {  unsigned val=unsigned(rand());           val = (val<<24)|val;              //产生unsigned类型的随机数  out.write((char *)&val,sizeof (unsigned));  }  }  out.close();
}  //找到访问次数最大的ip地址  
int main()  
{  //make_data(100);     //   make_data(100000000);       //产生测试用的IP数据  fstream arr[N];  for (int i=0; i<N; ++i)                 //创建N个临时文件  {  char tmp_path[128];     //临时文件路径  sprintf(tmp_path,"D:/test/tmp%d.dat",i);  arr[i].open(tmp_path, ios::trunc|ios::in|ios::out|ios::binary);  //打开第i个文件  if( !arr[i])  {  cout<<"open file"<<i<<"error"<<endl;  }  }  ifstream infile(data_path,ios::in|ios::binary);   //读入测试用的IP数据  unsigned data;  while(infile.read((char*)(&data), sizeof(data)))  {  unsigned val=VALUE(data);  int key=ID(data);  arr[ID(data)].write((char*)(&val), sizeof(val));           //保存到临时文件件中  }  for(unsigned i=0; i<N; ++i)  {  arr[i].seekg(0);  }  unsigned max_ip = 0;    //出现次数最多的ip地址  unsigned max_times = 0;     //最大只出现的次数  //分配512M内存,用于统计每个数出现的次数  unsigned *count = new unsigned[MEM_SIZE];    for (unsigned i=0; i<N; ++i)  {  memset(count, 0, sizeof(unsigned)*MEM_SIZE);  //统计每个临时文件件中不同数字出现的次数  unsigned data;  while(arr[i].read((char*)(&data), sizeof(unsigned)))       {  ++count[data];  }  //找出出现次数最多的IP地址  for(unsigned j=0; j<MEM_SIZE; ++j)                             {  if(max_times<count[j])             {  max_times = count[j];  max_ip = MAKE_IP(i,j);        // 恢复成原ip地址.  }  }  }  delete[] count;  unsigned char *result=(unsigned char *)(&max_ip);  printf("出现次数最多的IP为:%d.%d.%d.%d,共出现%d次\n",   result[0], result[1], result[2], result[3], max_times);  
}  



这篇关于第十四章:提取出某日访问百度次数最多的那个IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666185

相关文章

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示