资源简介
调锁调了蛮多时间.单线程序抓包,三个缓冲区,
默认三个线程进行处理.由于为了尽量保证包的顺序,三个线程同时只从一个缓冲区取数据
代码片段和文件信息
/*
* =====================================================================================
*
* Filename: FlowClassThread.c
*
* Description: Class Packet
*
* Version: 1.0
* Created: 04/30/2009 08:51:46 AM
* Revision: none
* Compiler: gcc
*
* Author: WengJian Lv
* Company: GreeNet
*
* =====================================================================================
*/
#include “test.h“
void * FlowClassThread(PktMemC *pktmemc_buf)
{
int temp;
int count = 0;
u_char packet[1550];
u_char *tmp_packet; /*just for readable*/
/**/
while(1)
{
pthread_mutex_lock(&(pktmemc_buf->m_pktbuf->pktbufglobal_m));/**/
pthread_mutex_lock(&(pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pktbufhead_m));
temp=pktmemc_buf->m_pktbuf->ocurrentbuf;
if(pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_num==0)
{ /*free the lock*/
pktmemc_buf->m_pktbuf->ocurrentbuf = (pktmemc_buf->m_pktbuf->ocurrentbuf+1) % PKT_BUFlink_HEADNUM;
//tmp_packet = pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_buf_c;
//tmp_packet = pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_buf_h;
pthread_mutex_unlock(&(pktmemc_buf->m_pktbuf->pktbufglobal_m));
pthread_mutex_unlock(&(pktmemc_buf->m_pktbuf->pktbuf_array[temp].pktbufhead_m));
count++;
if(count>10)
{
printf(“the Class Thread Count is %d\n“count);
sleep(1);
count=0;
}
continue;
}
/*
release pktbufglobal_mso the capture thread could quickly capture the packet
*/
pthread_mutex_unlock(&(pktmemc_buf->m_pktbuf->pktbufglobal_m));
tmp_packet = pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_buf_c;
memcpy(packettmp_packet2+*((u_short*)(tmp_packet)));
tmp_packet = tmp_packet + 1550;
pktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_num--;
printf(“the %d pool has only %d‘s packet\n“pktmemc_buf->m_pktbuf->ocurrentbufpktmemc_buf->m_pktbuf->pktbuf_array[pktmemc_buf->m_pktbuf->ocurrentbuf].pkt_num);
//sleep();
pthread_mutex_unlock(&(pktmemc_buf->m_pktbuf->pktbuf_array[temp].pktbufhead_m));
/*class the packet in below*/
switch(pktmemc_buf->methods)
{
case 1:
ClassBySsDdP(pktmemc_buf(u_char*)packet);
break;
case 2:
break;
case 3:
break;
default:
break;
}
}
}
void ClassBySsDdP(PktMemC *pktmemc_bufu_char *packet)
{
ip_header *ih;
udp_header *uh;
tcp_header *th;
int ip_len;
int ip_hlen;
int i;
int tcpflag = 0;
int udpflag = 0;
ih = (ip_header *) (packet +16);
- 上一篇:AES算法优化 PDF
- 下一篇:修道士与野人问题
相关资源
- Qt线程间通信,线程控制界面显示
- pthread+多线程编程技术.pdf
- Qt多线程教程.rar
- VC中利用多线程技术实现线程之间的通
- 多线程依次循环打印26个英文字母
- DllMain和多线程死锁 问题
- QT的多线程编程
- 一个shellcode作用是添加Windows用户
- IEEE 1588(PTPv2)精确时钟同步协议抓包
- 文件搜索器多线程的搜索器
- boost asio异步多线程接收demo
- Qt子线程更新数据发到主线程显示.r
- 基于opencv + 多线程的目标跟踪
- delphi多线程访问数据库
- udp 多线程实现多客户端并发,并采用
- Linux网络编程(四)——epoll+多线程实
- 非阻塞套接字的应用___远程计算器
- Qt 使用多线程QThread实现进度条
- 基于汇编实现输入字符串并显示
- 超牛的多线程扫描网站后台
- 2019网络空间安全国赛8080缓冲区溢出漏
- linux下使用原始套接字抓包并发现网络
- e语言-利用易语言多线程支持库实现多
- 非常好用的抓包工具
- Qt多线程资料
- HttpClient工具类
- 多线程map容器互斥代码
- Wireshark抓包全集85种协议、类别的抓包
- linux下多线程socket通信完整源码文件
- 使用pbni封装oci方便pb直接传递句柄使
评论
共有 条评论