`
jakielong
  • 浏览: 229178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抓包程序的包存储队列

 
阅读更多
typedef struct _Node
{
    int     data_len;       // 存储在节点中的数据长度
    char    *data;          // 存储在节点中的数据
    struct  _Node *next;    // 队列中的下一个节点地址
}NODE;
 
typedef struct _Queue
{
    NODE    *head;          // 队列的头部
    NODE    *end;           // 队列的尾部
    int     count;          // 队列长度
}QUEUE;
 
bool InitQueue( QUEUE *queue )
{
    if( NULL == queue )
    {
        return false;
    }
 
    queue->head = NULL;
    queue->end = NULL;
    queue->count = 0;
 
    return true;
}
 
// 在队列中插入节点
bool Enqueue( QUEUE *queue, char *queue_data, int data_len )
{
    if( NULL == queue || NULL == queue_data )
    {
        return false;
    }
 
    // 开辟新节点
    NODE *new_node = (NODE *)malloc( sizeof(NODE) );
    if( NULL == new_node )
    {
        return false;
    }
 
    // 开辟空间存储数据
    new_node->data = (char *)malloc( data_len );
    if( NULL == new_node->data )
    {
        return false;
    }
 
    memcpy( new_node->data, queue_data, data_len );
    new_node->next = NULL;
    new_node->data_len = data_len;
 
    // 如果队列为空,则新节点即是头部,也是尾部
    if( queue->head == NULL )
    {
        queue->head = new_node;
        queue->end = new_node;
    }
    else
    {
        // 如果队列不为空,将此节点连接到队列的尾部
        queue->end->next = new_node;
 
        // 队列新尾部指向此节点
        queue->end = new_node;
    }
 
    queue->count ++;
    return true;
}
 
// 从队列中读出一个节点
NODE *Dequeue( QUEUE *queue )
{
    if( NULL == queue )
    {
        return NULL;
    }
 
    // 如果队列为空,则无数据可从数列读出,直接返回
    if( NULL == queue->head )
    {
        return NULL;
    }
 
    // 保存队列首节点
    NODE *node_tmp = queue->head;
 
    // 将首节点的下一个节点(第二个节点)设置为首节点,即删除了首节点
    queue->head = node_tmp->next;
 
    // 如果新首节点为空,则队列为空
    if( NULL == queue->head )
    {
        queue->end = NULL;
    }
 
    queue->count --;
    return node_tmp;
}
 
// 释放队列所有内存
void FreeQueue( QUEUE *queue )
{
    if( queue )
    {
        return;
    }
 
    NODE *tmp_node1 = queue->head;
    while( tmp_node1 )
    {
        NODE *tmp_node2 = tmp_node1;
 
        free( tmp_node1->data );
        free( tmp_node1 );
 
        tmp_node1->data = NULL;
        tmp_node1 = NULL;
 
        tmp_node1 = tmp_node2->next;
    }
}
 

 

分享到:
评论

相关推荐

    抓包程序源代码c++.rar

    标题中的“抓包程序源代码c++.rar”指的是一个使用C++编程语言编写的网络数据包捕获(或称为“抓包”)程序的源代码压缩包。抓包程序是网络分析工具,允许用户查看通过网络传输的数据包,这对于网络故障排查、性能...

    libpcap-MT多线程抓包处理包

    "libpcap-MT多线程抓包处理包" 指的是一个利用libpcap库,并采用多线程技术来实现同时抓取和处理网络数据包的程序。这里的“MT”代表多线程(Multi-Threaded),意味着程序使用了并发处理以提高性能。 **描述详解:...

    JAVA网络抓包毕业设计源码.rar

    3. **数据包解析**:抓包程序需要理解TCP/IP协议栈,包括IP、TCP/UDP等协议头的结构,以便正确解析和展示数据包内容。 4. **ACCESS数据库操作**:使用JDBC(Java Database Connectivity)API与ACCESS数据库交互,...

    计算机网络抓包课程设计报告.doc

    【计算机网络抓包课程设计报告】 本报告主要探讨了如何实现一个网络流量解析程序,该程序能够处理由“Windump –W”工具抓取的二进制流量文件,并从中提取关键的IP报文信息,包括时间戳、源IP、目的IP和高层协议等...

    小红书微信小程序爬虫.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    拼多多爬虫,抓取拼多多热销商品信息和评论.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    一款漫画阅读APP,独立开发,数据来源于腾讯动漫网,通过爬虫抓包获取.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    java开源包8

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包4

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    Java资源包01

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    基于Node.JS 与puppeteer的纯命令行爬虫软件,以爬取小说网站上的小说资源。.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...

    java开源包1

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包2

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包3

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包6

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包5

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包10

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包11

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包7

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

    java开源包9

    Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式...

Global site tag (gtag.js) - Google Analytics