资源简介
调锁调了蛮多时间.单线程序抓包,三个缓冲区,
默认三个线程进行处理.由于为了尽量保证包的顺序,三个线程同时只从一个缓冲区取数据
代码片段和文件信息
/*
* =====================================================================================
*
* 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
- 下一篇:修道士与野人问题
相关资源
- 抓包工具 sniffer
- 编写简单的RMI程序 多线程web 服务器
- ipv6网络抓包程序
- 多线程生产者消费者模式
- 多线程实例:桌面智能弹球小游戏
- WPF多线程演示
- 易语言:多线程传多变量的最稳定方
- Fiddler中文版.zip
- shellcoder编程揭秘
- 排队买票多线程问题
- 北邮 现代交换原理实验 sip电话 抓包
- 网络抓包工具Wireshark 破解版
- 强大的完善的 活动抽奖系统适合各单
- 十字路口红绿灯交通情况模拟
- 截取封包工具
- Http Analyzer 7(http抓包工具)7 7.6.4破解
- Qt 多线程连接数据库——数据库
- 强大的抓包工具:Fiddler_4.6.1.5
- Fiddler5.0汉化版
- 易语言多线程端口扫描源码
- rtmp抓包分析
- POSIX多线程程序设计中文版源码
- 易语言md5定向爆破源码
- 解析抓包软件中tcp包装的数据并转换
- 2000个PNG图标
- 手把手 网络抓包学习视频 跟着pingi
- 使用信号量实现有限缓冲区的生产者
- 多线程扫描工具
- Delphi.High.Performance.Applications.Concurren
- Qt5的多线程小程序,实现按钮开关线
评论
共有 条评论