Wireshark-dev: [Wireshark-dev] memory leak while using libwireshark, please help me
From: lipeng5555lipeng <lipeng5555@xxxxxxx>
Date: Thu, 28 Nov 2013 17:23:16 +0800
|
When I use libwires to dissect something,there may accur a memory leak
Cpp is my test program,is it right?please help me |
Attachment:
valgrind_memory_leak.rar
Description: Binary data
#pragma warning(disable : 4786)
#pragma warning(disable : 4805)
#include "Scan_Dissect_Pkt_Struct.h"
#include <signal.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define MAX_PACKGE_LENGTH 65536//1540
#define MIN_PACKGE_LENGTH 18
/***********************glibµÄÍ·Îļþ*****************************/
#include <glib.h>
#include <glib/gprintf.h>
#include <time.h>
/***********************epanµÄÍ·Îļþ*****************************/
#include <epan/epan.h>
#include <epan/packet.h>
#include <epan/addr_resolv.h>
#include <epan/epan_dissect.h>
#include <epan/tap.h>
/////////////////////////////////add by ljm on 20130317
#ifdef XJ_DISSECT_PACKET_LINUX_DEF
#include <wsutil/privileges.h>
#endif
//////////////////////////////////
//#include "vld.h"
bool g_binitepan = false;
bool g_xj_process_policies_called = false;
int g_nlibpCapFileSize = -1;
int g_nlibcurpos = -1;
char* g_plibpCapFileContent = NULL;
PACKET_STRUCT g_Packet;
bool g_bExit;
typedef int BOOL;
typedef unsigned int UINT;
//#define DATA_LEN 193
#define DATA_LEN 73
/*
guchar data[DATA_LEN] =
{
0x00, 0xc3, 0x53, 0x1c, 0x00, 0x00, 0x1e, 0x06, 0x6c, 0x05, 0x0a, 0x64, 0x64, 0x4b, 0x0a, 0x64,
0x64, 0x01, 0x00, 0x66, 0xff, 0xc0, 0x00, 0x89, 0x9a, 0xf7, 0x8e, 0xfc, 0xf3, 0xd5, 0x50, 0x18,
0x20, 0x00, 0xda, 0x20, 0x00, 0x00, 0x03, 0x00, 0x00, 0x9b, 0x02, 0xf0, 0x80, 0x01, 0x00, 0x01,
0x00, 0x61, 0x81, 0x8d, 0x30, 0x81, 0x8a, 0x02, 0x01, 0x03, 0xa0, 0x81, 0x84, 0xa3, 0x81, 0x81,
0xa0, 0x7f, 0xa1, 0x05, 0x80, 0x03, 0x52, 0x50, 0x54, 0xa0, 0x76, 0x8a, 0x05, 0x41, 0x69, 0x6e,
0x33, 0x30, 0x84, 0x03, 0x06, 0x78, 0x00, 0x86, 0x02, 0x00, 0xee, 0x8c, 0x06, 0x01, 0x31, 0xd2,
0x4e, 0x2a, 0x9d, 0x8a, 0x16, 0x50, 0x4c, 0x31, 0x30, 0x30, 0x31, 0x36, 0x4d, 0x45, 0x41, 0x53,
0x2f, 0x4c, 0x4c, 0x4e, 0x30, 0x24, 0x64, 0x73, 0x41, 0x69, 0x6e, 0x84, 0x04, 0x01, 0x00, 0xc0,
0x00, 0xa2, 0x1a, 0xa2, 0x09, 0xa2, 0x07, 0x87, 0x05, 0x08, 0x39, 0xb8, 0xbd, 0x53, 0x84, 0x03,
0x03, 0x00, 0x40, 0x91, 0x08, 0x52, 0x83, 0x0f, 0x4a, 0x35, 0x87, 0x93, 0x0a, 0xa2, 0x1a, 0xa2,
0x09, 0xa2, 0x07, 0x87, 0x05, 0x08, 0x39, 0xdb, 0xd4, 0x47, 0x84, 0x03, 0x03, 0x00, 0x40, 0x91,
0x08, 0x52, 0x83, 0x0f, 0x4a, 0x42, 0x54, 0x60, 0x0a, 0x84, 0x02, 0x02, 0x40, 0x84, 0x02, 0x02,
0x40
};
*/
const guchar xjdata[DATA_LEN] =
{
0x7E, 0x6D, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
0x00, 0x3B, 0x5F, 0x15, 0x00, 0x00, 0x40, 0x11, 0xF1, 0x51, 0x73, 0xAB, 0x4F, 0x08, 0xDB, 0x8D,
0x8C, 0x0A, 0x9B, 0x90, 0x00, 0x35, 0x00, 0x27, 0xEF, 0x4D, 0x43, 0x07, 0x01, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x74, 0x04, 0x73, 0x69, 0x6E, 0x61, 0x03, 0x63, 0x6F,
0x6D, 0x02, 0x63, 0x6E, 0x00, 0x00, 0x01, 0x00, 0x01
};
void sig_handler(int nsig)
{
switch(nsig)
{
case SIGINT:
case SIGTERM:
{
printf("ÊÕµ½Í˳öÐźÅ:%d, ³ÌÐò×¼±¸×¼±¸Í˳ö...", nsig);
g_bExit = true;//ÈÃÖ÷Ïß³ÌÍ˳ö£¬²¢ÊÍ·Å×ÊÔ´
}
return;
default:
break;
}
}
/********************¹¹½¨Ó¦ÓÃÐÒéÀàÐÍ,²¢±ê¼Ç¶ÔÓ¦µÄ½ÚµãÐòºÅ******************/
int get_ether_type(XJ_DISSECT_PKT* pxj_dissect_pkt)
{
xj_pkt_ether_type_enum pkt_eher_type = PKT_ETHER_TYPE_UNKOWN;
XJ_PROTO_NODE* pxj_proto_node_bottom = NULL;
int nLayerNO;//ÓÐЧ²ãµÄ²ãºÅ
for(nLayerNO = pxj_dissect_pkt->prototreelist_size-1; nLayerNO >=0; nLayerNO--)//Öð²ãѰÕÒ
{
pxj_proto_node_bottom = &pxj_dissect_pkt->pprototreelist[nLayerNO];
pxj_dissect_pkt->prototreelist_app_seq = nLayerNO;
if(pxj_proto_node_bottom->node_name == NULL)//MMS±¨ÎÄ
{
continue;
}
if(strcmp(pxj_proto_node_bottom->node_name, "MMS") == 0)
{
pkt_eher_type = PKT_ETHER_TYPE_IEC61850_MMS;
break;
}
else if(strcmp(pxj_proto_node_bottom->node_name, "IEC61850 Sampled Values")== 0)
{
pkt_eher_type = PKT_ETHER_TYPE_IEC61850_SMV;
break;
}
else if(strcmp(pxj_proto_node_bottom->node_name, "GOOSE")== 0)
{
pkt_eher_type = PKT_ETHER_TYPE_IEC61850_GOOSE;
break;
}
else if(NULL != strstr(pxj_proto_node_bottom->node_name, "COTP"))//¼ÌÐø¿ª·Å
{
pkt_eher_type = PKT_ETHER_TYPE_COTP;
break;
}
else if(NULL != strstr(pxj_proto_node_bottom->node_name, "TPKT"))//¼ÌÐø¿ª·Å add by yinzhehong 20130321
{
pkt_eher_type = PKT_ETHER_TYPE_TPKT;
break;
}
else if(strcmp(pxj_proto_node_bottom->node_name, "Address Resolution Protocol")== 0)
{
pkt_eher_type = PKT_ETHER_TYPE_ARP;
break;
}
else if(strcmp(pxj_proto_node_bottom->node_name, "Transmission Control Protocol")== 0)
{
pkt_eher_type = PKT_ETHER_TYPE_TCP;
break;
}
else if(strcmp(pxj_proto_node_bottom->node_name, "Precision Time Protocol (IEEE1588)")== 0)
{
pkt_eher_type = PKT_ETHER_TYPE_IEC61850_PTP_1588;
break;
}
else if(NULL != strstr(pxj_proto_node_bottom->node_name, "User Datagram Protocol"))
{
pkt_eher_type = PKT_ETHER_TYPE_UDP;
}
}
pxj_dissect_pkt->ether_type = pkt_eher_type;
return nLayerNO;
}
//ÉêÇëÊý¾ÝÍ·¿Õ¼ä*/
wtap_pkthdr * pwtap_phdr_init()
{
wtap_pkthdr * pwtap_phdr = (wtap_pkthdr *)g_malloc0(sizeof(wtap_pkthdr));
pwtap_phdr->interface_id = 0;
pwtap_phdr->caplen = 0;
pwtap_phdr->len = 0;
pwtap_phdr->pkt_encap = 1;
pwtap_phdr->pack_flags = 0;
pwtap_phdr->drop_count = 0;
pwtap_phdr->opt_comment = NULL;
return pwtap_phdr;
}
/*********»ñÈ¡wirshark½á¹¹ÖÐͬ¼¶×Ó½Úµã¸öÊý***************/
int get_proto_node_same_level_size(_proto_node *pnode)
{
if(pnode == NULL)
{
return 0;
}
int listsize = 1;//ĬÈÏ1¸ö
_proto_node *pnode_level = pnode->next;
while(pnode_level != NULL)
{
listsize ++;
pnode_level = pnode_level->next;
}
return listsize;
}
//²éÑ¯ÌØÕ÷×Ö·û³öÏÖµÄλÖÃ
int GetProtocolNum(const char *buf,int n_buffer_length,char c_char)
{
int nposition = -1;
for(int i = 0; i < n_buffer_length; i++)
{
if(*buf == c_char)
{
nposition = i;
break;
}
buf++;
}
return nposition;
}
/***************Êä³ö¸÷¼¶×Ó½Úµã*************************/
void output_nodetree_field_info(_proto_node *pnode, XJ_PROTO_NODE* pxj_node, bool btoplevel)
{
pxj_node->length = pnode->finfo->length;//³¤¶È
pxj_node->start_pos = pnode->finfo->start;//ÆðʼλÖÃ
pxj_node->node_type = (xj_pkt_ether_type_enum) pnode->finfo->hfinfo->type;//ÀàÐÍ
gchar label_str[ITEM_LABEL_LENGTH] = "";
gchar *label_ptr = NULL;
gint label_length = ITEM_LABEL_LENGTH;
memset(label_str, 0, ITEM_LABEL_LENGTH);
field_info* fi = pnode->finfo;
if (fi->rep)
{
label_ptr = fi->rep->representation;
}
else
{ /* no, make a generic label */
label_ptr = label_str;
proto_item_fill_label(fi, label_str);
}
label_length = strlen(label_ptr);
/* if(label_length > 0)
{
pxj_node->node_desc = (char*) calloc((label_length+1),sizeof(char));
memcpy(pxj_node->node_desc,label_ptr,label_length);
pxj_node->node_name_detail = (char*) calloc((label_length+1),sizeof(char));
memcpy(pxj_node->node_name_detail,label_ptr,label_length);
}*/
int nstart = 0;
if(btoplevel)
{
nstart = GetProtocolNum(label_ptr, label_length, ',');
}
else
{
nstart = GetProtocolNum(label_ptr, label_length, ':');
}
if(nstart == -1)
{
nstart = 0;
}
else
{
nstart +=2;//È¥³ý£ººÍ¿Õ¸ñ
}
if(nstart != 0)//node_name_desc
{
pxj_node->node_name_detail = new char[nstart];//(char*) calloc(nstart,sizeof(char));
memset(pxj_node->node_name_detail, 0, nstart);
memcpy(pxj_node->node_name_detail, label_ptr, nstart-2);
}
label_length -= nstart;
if(label_length < 0)
{
label_length += nstart;
}
pxj_node->node_desc = new char[label_length+1];//(char*) calloc((label_length+1),sizeof(char));
memset(pxj_node->node_desc, 0, label_length+1);
memcpy(pxj_node->node_desc, &label_ptr[nstart], label_length);//¿½±´ÃèÊö
if(fi->hfinfo->name)//¿½±´Ãû³Æ
{
label_length = strlen(fi->hfinfo->name) + 1;
if(label_length > 0)
{
pxj_node->node_name = new char[label_length + 1];//(char*) calloc(label_length+1,sizeof(char));
memset(pxj_node->node_name, 0, (label_length + 1));
memcpy(pxj_node->node_name, fi->hfinfo->name, label_length);
}
}
proto_node *pchildnode = pnode->first_child;//¿½±´×Ó½Úµã
int nchildnodelistsize = get_proto_node_same_level_size(pchildnode);
if(nchildnodelistsize == 0)//ÎÞ×ӽڵ㣬ֱ½Ó·µ»Ø
{
return;
}
pxj_node->pchildlist = new XJ_PROTO_NODE[nchildnodelistsize];//(XJ_PROTO_NODE*) calloc(nchildnodelistsize,sizeof(XJ_PROTO_NODE));//
memset(pxj_node->pchildlist, 0, nchildnodelistsize*sizeof(XJ_PROTO_NODE));
pxj_node->childlist_size = nchildnodelistsize;
for(int j = 0; j < nchildnodelistsize; j++)
{
if(pchildnode == NULL)
{
break;
}
pxj_node->pchildlist[j].parent_node = pxj_node;
output_nodetree_field_info(pchildnode, &pxj_node->pchildlist[j], false);
pchildnode = pchildnode->next;
}
}
/********½«wirshark½âÎö³öÀ´µÄ½á¹¹×ª³ÉÊä³ö½á¹¹*******/
void wirsharkpkt2xjpkt(epan_dissect_t* edt, XJ_DISSECT_PKT* pxj_dissect_pkt)
{
_proto_node *pnode = NULL;
pnode = edt->tree->first_child;//Ö¡ÃèÊöÄÚÈݲ㣬²»Êä³ö
if(pnode == NULL)
{
return;
}
pnode = pnode->next; //Õýʽ½âÎöµÄ±¨ÎIJã
int nlistsize = get_proto_node_same_level_size(pnode);
if(nlistsize <= 0)//ÎÞЧ
{
return;
}
pxj_dissect_pkt->pprototreelist = new XJ_PROTO_NODE[nlistsize];//(XJ_PROTO_NODE*) calloc(nlistsize, sizeof(XJ_PROTO_NODE));//
memset(pxj_dissect_pkt->pprototreelist, 0, nlistsize*sizeof(XJ_PROTO_NODE));
pxj_dissect_pkt->prototreelist_size = nlistsize;
for(int i = 0; i < nlistsize; i++)
{
if(pnode == NULL)
{
break;
}
output_nodetree_field_info(pnode, &pxj_dissect_pkt->pprototreelist[i], true);//Ñ»·Êä³ö¸÷²ã½âÎö½á¹û
pnode = pnode->next;
}
get_ether_type(pxj_dissect_pkt);//»ñÈ¡±¨ÎÄÀàÐÍ
pxj_dissect_pkt->port_src = edt->pi.srcport; //Ô´¶Ë¿Ú
pxj_dissect_pkt->port_dst = edt->pi.destport;//Ä¿±ê¶Ë¿Ú
}
/********½«wirshark½âÎö³öÀ´µÄMMS±¨ÎĽṹת³ÉÊä³ö½á¹¹*******/
void wirsharkpkt2xjpkt_mms(epan_dissect_t* edt,XJ_DISSECT_PKT* pxj_dissect_pkt)
{
_proto_node *pnode,*pnde_copystart;
pnode = edt->tree->first_child;//Ö¡ÃèÊöÄÚÈݲ㣬²»Êä³ö
pnde_copystart = NULL;
int listsize = 0;//ĬÈÏ1¸ö
while(pnode != NULL)
{
listsize ++;
pnode = pnode->next;
if(listsize == 4)//Ìø¹ýTCP²ã
{
pnde_copystart = pnode;
}
}
if(pnde_copystart == NULL)
return;
pxj_dissect_pkt->pprototreelist = new XJ_PROTO_NODE[listsize-4];//(XJ_PROTO_NODE*) calloc(listsize-4, sizeof(XJ_PROTO_NODE));//
memset(pxj_dissect_pkt->pprototreelist,0,(listsize-4)* sizeof(XJ_PROTO_NODE));
pxj_dissect_pkt->prototreelist_size = listsize-4;
for(int i = 0; i < pxj_dissect_pkt->prototreelist_size; i++)
{
if(pnde_copystart == NULL)
break;
output_nodetree_field_info(pnde_copystart,&pxj_dissect_pkt->pprototreelist[i],true);//Ñ»·Êä³ö¸÷²ã½âÎö½á¹û
pnde_copystart = pnde_copystart->next;
}
get_ether_type(pxj_dissect_pkt);//»ñÈ¡±¨ÎÄÀàÐÍ
//MACµØÖ·
unsigned char* pdata;
if(edt->pi.dl_src.len == 6)
{
pdata = (unsigned char*)edt->pi.dl_src.data;
g_sprintf(pxj_dissect_pkt->mac_src,"%02x-%02x-%02x-%02x-%02x-%02x",
*pdata,*(pdata+1), *(pdata+2), *(pdata+3), *(pdata+4), *(pdata+5));
}
if(edt->pi.dl_dst.len == 6)
{
pdata = (unsigned char*)edt->pi.dl_dst.data;
g_sprintf(pxj_dissect_pkt->mac_dst,"%02x-%02x-%02x-%02x-%02x-%02x",
*pdata, *(pdata+1), *(pdata+2), *(pdata+3), *(pdata+4), *(pdata+5));
}
if(edt->pi.net_src.len == 4)
{
pdata = (unsigned char*)edt->pi.net_src.data;
g_sprintf(pxj_dissect_pkt->ip_src,"%d.%d.%d.%d",
*pdata, *(pdata+1), *(pdata+2), *(pdata+3));
}
if(edt->pi.net_dst.len == 4)
{
pdata = (unsigned char*)edt->pi.net_dst.data;
g_sprintf(pxj_dissect_pkt->ip_dst,"%d.%d.%d.%d",
*pdata, *(pdata+1), *(pdata+2), *(pdata+3));
}
pxj_dissect_pkt->port_src = edt->pi.srcport; //Ô´¶Ë¿Ú
pxj_dissect_pkt->port_dst = edt->pi.destport;//Ä¿±ê¶Ë¿Ú
}
/*****ÊͷŸ÷¸öËùÓÐ×Ó½Úµã******/
int xj_cleanup_packet_node(XJ_PROTO_NODE* pxj_node)
{
if(NULL == pxj_node)
{
return 0;
}
//ɾ³ý½Úµã×ÔÉí¸÷¸öÊôÐÔ
if(NULL != pxj_node->node_name)
{
delete[] pxj_node->node_name;
pxj_node->node_name = NULL;
}
if(NULL != pxj_node->node_name_detail)
{
delete[] pxj_node->node_name_detail;
pxj_node->node_name_detail = NULL;
}
if(NULL != pxj_node->node_desc)
{
delete[] pxj_node->node_desc;
pxj_node->node_desc = NULL;
}
/*
if(pxj_node->childlist_size == 0 || pxj_node->pchildlist== NULL)
return 0;
*/
//Ñ»·É¾³ý×Ó½Úµã
for(int k = 0; k < pxj_node->childlist_size; k++)
{
xj_cleanup_packet_node(&pxj_node->pchildlist[k]);//µÝ¹éµ÷ÓÃ
}
if (NULL != pxj_node->pchildlist)
{
delete[] pxj_node->pchildlist;
pxj_node->pchildlist = NULL;
}
pxj_node->childlist_size = 0;
return 0;
}
/*****ÊͷŽâÎöºóµÄÐÒéÊ÷******/
int xj_cleanup_packet(XJ_DISSECT_PKT* pxj_dissect_pkt)
{
if(NULL == pxj_dissect_pkt)
{
printf("[xj_cleanup_packet]pxj_dissect_pkt is null point£¡\n");
return -1;
}
if(NULL == pxj_dissect_pkt->pprototreelist)
{
if (pxj_dissect_pkt != NULL)
{
delete pxj_dissect_pkt;
pxj_dissect_pkt = NULL;
}
return -1;
}
//printf("[xj_cleanup_packet]pprototreelist size is %d", pxj_dissect_pkt->prototreelist_size);
for(int i = 0; i < pxj_dissect_pkt->prototreelist_size; i++)
{
xj_cleanup_packet_node(&pxj_dissect_pkt->pprototreelist[i]);
}
if (NULL != pxj_dissect_pkt->pprototreelist)
{
delete[] pxj_dissect_pkt->pprototreelist;
pxj_dissect_pkt->pprototreelist = NULL;
}
if (NULL != pxj_dissect_pkt)
{
delete pxj_dissect_pkt;
pxj_dissect_pkt = NULL;
//printf("[xj_cleanup_packet]release pxj_dissect_pkt memory success£¡\n");
}
return 0;
}
XJ_DISSECT_PKT* xj_dissect_packet()
{
#ifdef XJ_DISSECT_PACKET_LINUX_DEF
if (!g_xj_process_policies_called)
{
init_process_policies();//³õʼ»¯±¾µØÈ¨ÏÞ
g_xj_process_policies_called = true;
}
#endif
if(!g_binitepan)//È«¾Ö±äÁ¿£¬Èçδע²á³õʼ»¯£¬ÏÈ×¢²á³õʼ»¯£¬¶à´Îµ÷Óã¬Ö»Ðè³õʼ»¯Ò»´Î
{
epan_init(register_all_protocols, register_all_protocol_handoffs,
NULL, NULL, NULL, NULL, NULL, NULL);//×¢²á½âÎöÆ÷
cleanup_dissection();//clean up environment
init_dissection();//init dissect environment
g_binitepan = true;
//tap_queue_init(&edt);//¶ÓÁÐ
}
frame_data *fdata;
epan_dissect_t *edt;
wtap_pkthdr pseudo_header;
pseudo_header.interface_id = 0;
pseudo_header.caplen = 0;
pseudo_header.len = -1;
pseudo_header.pkt_encap = 1;
pseudo_header.pack_flags = 0;
pseudo_header.drop_count = 0;
pseudo_header.opt_comment = NULL;
fdata = (frame_data*)g_new(frame_data, 1);
memset(fdata, 0, sizeof(frame_data));
fdata->pfd = NULL;
fdata->num = 1;
fdata->interface_id = 0;
fdata->pkt_len = DATA_LEN;
fdata->cap_len = DATA_LEN;
fdata->cum_bytes = 0;
fdata->file_off = 0;
fdata->subnum = 0;
fdata->lnk_t = WTAP_ENCAP_ETHERNET;
fdata->flags.encoding = PACKET_CHAR_ENC_CHAR_ASCII;
fdata->flags.visited = 0;
fdata->flags.marked = 0;
fdata->flags.ref_time = 0;
fdata->color_filter = NULL;
fdata->abs_ts.secs = 0;
fdata->abs_ts.nsecs = 0;
fdata->opt_comment = NULL;
nstime_t elapsed_time; /* Elapsed time */
nstime_t first_ts;
nstime_t prev_dis_ts;
nstime_t prev_cap_ts;
guint32 cum_bytes = 0;
nstime_set_zero(&elapsed_time);
nstime_set_zero(&first_ts);
nstime_set_zero(&prev_dis_ts);
nstime_set_zero(&prev_cap_ts);
edt = epan_dissect_new(TRUE, TRUE);
//frame_data_set_before_dissect(fdata, &elapsed_time, &first_ts, &prev_dis_ts, &prev_cap_ts);//½âÎöǰµÄÉèÖã¬ÉèÖÃʱ¼ä´Á
epan_dissect_run(edt, &pseudo_header, xjdata, fdata, NULL);
epan_dissect_free(edt);
//frame_data_cleanup(fdata);
frame_data_destroy(fdata);
g_free(fdata);
//cleanup_dissection();
printf("successful call xj_dissect_packet...\n");
return NULL;
}
void MySleep(UINT nmilliseconds)
{
#ifdef OS_WINDOWS
//Sleep(nmilliseconds);
#endif
#ifdef OS_LINUX
timeval tm;
tm.tv_sec = nmilliseconds / 1000;
tm.tv_usec = (nmilliseconds % 1000) * 1000;
int nret=select(0, 0, 0, 0, &tm);
#endif
}
int main(int argc, char *argv[])
{
XJ_DISSECT_PKT* pXjstruct = NULL;
while (!g_bExit)
{
pXjstruct = xj_dissect_packet();
xj_cleanup_packet(pXjstruct);//ÊÍ·Å×ÊÔ´
MySleep(50);
}
if (g_binitepan)
{
cleanup_dissection();
epan_cleanup();
}
return 0;
}
/*
//¸ù¾ÝÊý¾Ý°üÀàÐÍ£¬½âÎöÊý¾Ý°ü
int main(int argc, char *argv[])
{
char chErrorMsg[1024] = "";
char* pkt_data = NULL;//º¬±¨ÎÄÍ·
TS_PCAP_PKTHDR pktheader;
TS_PCAP_HEADER ts_cap_header;
g_bExit = false;
#ifdef OS_LINUX
//Ôö¼ÓÊÕµ½¶ÔÍâ½çÐźŵĴ¦Àí
//¶ÔSIGTERM´¦Àí
signal(SIGTERM, sig_handler);
//¶ÔSIGINT´¦Àí
signal(SIGINT, sig_handler);
#else
signal(SIGINT, sig_handler);
#endif
if(argc < 2)
{
printf("please input test filename... \n");
return -1;
}
else
{
FILE* pCapfile;
pCapfile = fopen(argv[1], "rw");
if (NULL == pCapfile)
{
memset(chErrorMsg, '\0', 1024);
sprintf(chErrorMsg, "open %s failed,reason:%s(errno:%d)",
argv[1], strerror(errno), errno);
printf("%s\n", chErrorMsg);
return -2;
}
printf("open file %s succeed.\n", argv[1]);
fseek(pCapfile, 0, SEEK_END);
g_nlibpCapFileSize = ftell(pCapfile);
//fclose(pCapfile);
//pCapfile = fopen(argv[1], "rb");
printf("file size is %d \n", g_nlibpCapFileSize);
fseek(pCapfile, 0, SEEK_SET);
g_plibpCapFileContent = new char[g_nlibpCapFileSize+1];
memset(g_plibpCapFileContent, '\0', g_nlibpCapFileSize+1);
int nReadSize = fread(g_plibpCapFileContent, sizeof(char), g_nlibpCapFileSize, pCapfile);
fclose(pCapfile);//¹Ø±ÕÎļþ
g_plibpCapFileContent[g_nlibpCapFileSize] = '\0';
printf("read file %s succeed,last char is %c.\n",
argv[1], g_plibpCapFileContent[g_nlibpCapFileSize+1]);
g_nlibcurpos = sizeof(TS_PCAP_HEADER);
memcpy(&ts_cap_header, g_plibpCapFileContent, g_nlibcurpos);
unsigned int npktoffset = 0;
CAPMSGGININFO * pCapPackage = NULL;
double fFirstPackageT = 0.0f; //µÚһ֡ʱ¼ä
double fPrePackageT = 0.0f; //ÉÏһ֡ʱ¼ä
double fPackageT = 0.0f;
int nseq = 1;
unsigned int nmmscount = 0;//MMS±¨Îļ¶Êý
while (!g_bExit)
{
while((pkt_data = Libpcap_next_cap(&pktheader, npktoffset))!= NULL)
{
printf("cap %d seq from pcap msg...\n", npktoffset);
pCapPackage = LoadePacketMsg(nseq, &pktheader, pkt_data);//ÖÆ×÷±¨ÎÄ£¬TCP±¨ÎÄÁ´Â··ÖÎö¡¢¹ý³Ì²ãµÄ±¨ÎÄ(SMV,GOOSE,1588)ÖÆ×÷
pCapPackage->npkt_offset_incapfile = npktoffset;
fPackageT = pktheader.ts.GmtTime + pktheader.ts.us/1000000.0;
if(nseq == 1)//µÚÒ»Ö¡
{
fFirstPackageT = fPackageT;
fPrePackageT = fPackageT;//0.0f;
}
pCapPackage->ftime_delta = fPackageT - fPrePackageT; //ÓëÉÏÒ»Ö¡µÄʱ¼ä²î
pCapPackage->ftime_relative = fPackageT - fFirstPackageT;//ÓëµÚÒ»Ö¡±¨ÎĵÄʱ¼ä²î
//ÖÆ×÷½çÃæÏÔʾÓõĽṹ-£¬Ö»½âÎö102¶Ë¿Ú±¨ÎÄ,ÇÒÐÄÌø±¨ÎIJ»½âÎö
if(pCapPackage->napptype == ETHER_TYPE_TCP && (pCapPackage->ndst_port == 102 || pCapPackage->nsrc_port == 102)
&& (pCapPackage->ncap_len > 90))//66½öÐÄÌø +7 COPT+TPKTµÄÍ·
{
nmmscount++;
printf("call xj_dissect_packet now.. \n");
xj_dissect_packet(pCapPackage->csourceinfo+16, pCapPackage->nsourceinfo_length-16, nmmscount, 0, 0, 0, 0);
xj_cleanup_packet(pCapPackage->pxj_dissect_pkt);//ÊÍ·Å×ÊÔ´
pCapPackage->pxj_dissect_pkt = NULL;
}
nseq++;//ÐòºÅ+1
fPrePackageT = fPackageT;//¼Ç¼ÉÏһ֡ʱ¼ä
if (pCapPackage != NULL)
{
delete pCapPackage;
pCapPackage = NULL;
}
}
MySleep(100);
npktoffset = 0;
nmmscount = 0;
nseq = 0;
}
if (g_plibpCapFileContent != NULL)
{
delete[] g_plibpCapFileContent;
g_plibpCapFileContent = NULL;
}
if (g_binitepan)
{
epan_cleanup();
}
}
return 0;
}
*/
Attachment:
Makefile_debug
Description: Binary data
#if !defined(_SCAN_DISSECT_STRUCT_H)
#define _SCAN_DISSECT_STRUCT_H
#include <map>
#include <string.h>
#include <errno.h>
#define PCAP_MAGIC 0xa1b2c3d4
/**
* @brief Êý¾Ý°ü½âÎö½Ó¿Ú
* @use wirsharkÊý¾Ý°ü½âÎö·â×°½Ó¿Ú½á¹¹¶¨Òå
* @author ÒüÕãºé
* @version ver1.0
* @date 2012/10/17
*/
/* field types ¸÷¸ö½ÚµãÀàÐÍ*/
enum xj_pkt_field_type_enum {
PKT_FT_NONE, /* used for text labels with no value */
PKT_FT_PROTOCOL,
PKT_FT_BOOLEAN, /* TRUE and FALSE come from <glib.h> */
PKT_FT_UINT8,
PKT_FT_UINT16,
PKT_FT_UINT24, /* really a UINT32, but displayed as 3 hex-digits if FD_HEX*/
PKT_FT_UINT32,
PKT_FT_UINT64,
PKT_FT_INT8,
PKT_FT_INT16,
PKT_FT_INT24, /* same as for UINT24 */
PKT_FT_INT32,
PKT_FT_INT64,
PKT_FT_FLOAT,
PKT_FT_DOUBLE,
PKT_FT_ABSOLUTE_TIME,
PKT_FT_RELATIVE_TIME,
PKT_FT_STRING,
PKT_FT_STRINGZ, /* for use with proto_tree_add_item() */
PKT_FT_UINT_STRING, /* for use with proto_tree_add_item() */
/*FT_UCS2_LE, */ /* Unicode, 2 byte, Little Endian */
PKT_FT_ETHER,
PKT_FT_BYTES,
PKT_FT_UINT_BYTES,
PKT_FT_IPv4,
PKT_FT_IPv6,
PKT_FT_IPXNET,
PKT_FT_FRAMENUM, /* a UINT32, but if selected lets you go to frame with that number */
PKT_FT_PCRE, /* a compiled Perl-Compatible Regular Expression object */
PKT_FT_GUID, /* GUID, UUID */
PKT_FT_OID, /* OBJECT IDENTIFIER */
PKT_FT_EUI64,
PKT_FT_NUM_TYPES /* last item number plus one */
};
/* ETHER_TYPE ¸÷¸ö½ÚµãÀàÐÍ*/
enum xj_pkt_ether_type_enum
{
PKT_ETHER_TYPE_UNKOWN =0,
PKT_ETHER_TYPE_IEC61850_MMS =1,
PKT_ETHER_TYPE_IEC61850_GOOSE =2,
PKT_ETHER_TYPE_IEC61850_SMV =3,
PKT_ETHER_TYPE_IEC61850_SMV_91 =4,
PKT_ETHER_TYPE_IEC61850_PTP_1588=5,
PKT_ETHER_TYPE_ARP =6,
PKT_ETHER_TYPE_IP =7,
PKT_ETHER_TYPE_TCP =8,
PKT_ETHER_TYPE_UDP =9,
PKT_ETHER_TYPE_COTP =13,
PKT_ETHER_TYPE_TCP_FIN =14,//ÊÍ·ÅTCPÁ´½Ó
PKT_ETHER_TYPE_TCP_SYN_REQ =15,//ÇëÇó
PKT_ETHER_TYPE_TCP_SYN_RESP =16,//½ÓÊÜÁ´½Ó
PKT_ETHER_TYPE_TCP_RST =17,//ÖØÖÃÁ´½Ó
PKT_PKT_ETHER_TYPE_TCP_PSH =18,//ÓÐÓ¦ÓÃÊý¾Ý£¬½ÓÊÕ·½ÐèÒª¾¡¿ì´¦Àí
PKT_ETHER_TYPE_TCP_ACK =19,//±£³ÖÁ¬½Ó
PKT_ETHER_TYPE_TCP_URG =20,//½ô¼±Êý¾Ý
PKT_ETHER_TYPE_TPKT =21,//add by yinzhehong 20130321
};
typedef struct _xj_proto_node
{
struct _xj_proto_node *parent_node; //¸¸½Úµã
struct _xj_proto_node *pchildlist; //×Ó½Úµã¸ùÖ¸Õë
int childlist_size; //×Ó½Úµã¸öÊý
int start_pos; //ÔÚÔ´Êý¾ÝÖÐµÄÆðʼλÖÃ
int length; //< Êý¾ÝÕ¼Óó¤¶È
void* pkt_usrview; //¹©ÍⲿӦÓÃʹÓÃ
char *node_name; //½ÚµãÃû³Æ
char *node_name_detail; //½ÚµãÃû³ÆÏêϸÃèÊö
char *node_desc; //½ÚµãÃèÊö
int errortype; //½Úµã´íÎóÀàÐÍ
xj_pkt_ether_type_enum node_type; //½ÚµãÀàÐÍ 0:Õý³£½Úµã 1:±äλ½Úµã 2:Òì³£½Úµã
} XJ_PROTO_NODE;
/**************ת»¯ºóµÄÊý¾Ý°ü*******************/
typedef struct _xj_dissect_pkt
{
xj_pkt_ether_type_enum ether_type; //±¨ÎÄÀàÐÍ
int pkt_length; //±¨Îij¤¶È
void* pkt_data; //ÔʼÊý¾ÝÖ¡¶ÔÓ¦Ö¸Õë
int utc_s; //utcÃë
int utc_ms; //utcºÁÃë
XJ_PROTO_NODE * pprototreelist; //ÐÒéÊ÷
int prototreelist_size; //ÐÒéÊ÷²ã´Î
int prototreelist_app_seq; //ÓÐЧӦÓòãµÄ²ãºÅ
char mac_src[18]; //·¢ËͶËMACµØÖ·
char mac_dst[18]; //½ÓÊÕ¶ËMACµØÖ·
char ip_src[18]; //·¢ËͶËIPµØÖ·
char ip_dst[18]; //½ÓÊÕ¶ËIPµØÖ·
int port_src; //·¢ËͶ˶˿Ú
int port_dst; //½ÓÊն˶˿Ú
}XJ_DISSECT_PKT;
typedef struct _TS_PCAP_HEADER {
unsigned int Magic;
unsigned short MajorVersion; /* Ö÷°æ±¾ºÅ */
unsigned short MinorVersion; /* ¸±°æ±¾ºÅ */
unsigned int ThisZone; /* ÇøÓòʱ¼ä£¬32λ£¬Î´Óã¬Ä¬ÈÏΪ0 */
unsigned int Sigfigs; /*¾«È·Ê±¼ä´Á£¬32λ £¬Î´Óã¬Ä¬ÈÏΪ0Öµ*/
unsigned int SnapLen; /* Ëù×¥»ñµÄÊý¾Ý°ü×î´ó³¤¶È*/
unsigned int Network; /* Á´Â·²ãÀàÐÍ */
_TS_PCAP_HEADER()
{
Magic = PCAP_MAGIC;
MajorVersion = 2;
MinorVersion = 4;
ThisZone = 0;
Sigfigs = 0;
SnapLen = 0x00010000;
Network = 1;
}
}TS_PCAP_HEADER;
/**********ʱ¼ä´Á***********/
typedef struct _TS_TIMEVAL
{
unsigned int GmtTime;//Ãë¼ÆÊ± 1970ÄêºóµÄÃë
unsigned int us; //΢Ãë¼ÆÊ± ¿ÉÊÜÍ·½á¹¹ÖеÄSigfigsÏÞÖÆ£¬¾«¶ÈΪ΢Ãë»òÕßÄÉÃë
_TS_TIMEVAL()
{
GmtTime = 0;
us = 0;
}
}TS_TIMEVAL;
/**********°üÍ·****************/
typedef struct _TS_PCAP_PKTHDR{
TS_TIMEVAL ts; /* time stamp */
unsigned int caplen; /* length of portion present */
unsigned int len; /* length this packet (off wire) */
_TS_PCAP_PKTHDR()
{
caplen = 0;
len = 0;
}
}TS_PCAP_PKTHDR;
//½á¹¹¶¨Òå ½âÎöÍê³ÉºóµÄÎļþ¸ÅÒª£¬Ò»°ãΪͳ¼ÆÐÅÏ¢
typedef struct CAPPARSERINFO
{
char cparserfilename[256]; //capÎļþÃû³Æ
char crecoriedname[64]; //¼Ç¼װÖÃ
char crecorportname[64]; //¼Ç¼¶Ë¿ÚÃû³Æ
int crecordframetype; //¼Ç¼Êý¾ÝÀàÐÍ£ºÊ¹ÓÃͬӦÓñ¨ÎÄÀàÐÍ
int napppackages; //¼Ç¼×ܰüÊý
int nappmmspackages; //mms°üÊý
int nappgoosepackages; //goose°üÊý
int napp92packages; //9-2°üÊý
int napp91packages; //9-1°üÊý
int napparppackages; //arp°üÊý
int nappbroadcastpackages; //¹ã²¥°üÊýÄ¿
int nappotherpackages; //ÆäËüÓ¦Óðü
int nconnects; //ÓÐЧÁ¬½ÓÊý£ºÖ¸Á½¸öiedÖ®¼ä´æÔÚ61850±¨ÎĽ»»¥£¬º¬¹ã²¥
char cstarttimestamp[64]; //¼¿ªÊ¼Ê±¼ä 1970ÄêÒÔºóµÄÃë º¬ºÁÃë
char cendtimestamp[64]; //¼Ç¼½áÊøÊ±¼ä 1970ÄêÒÔºóµÄÃë º¬ºÁÃë
unsigned long lTotalCapLenth; //±¾Îļþ×Ö½ÚÊý
double ftime_lastpk_2_first; //×îºóÒ»Ö¡±¨ÎÄÓë²ÉÑùÎļþÖеÚÒ»Ö¡µÄʱ¼ä²î
int ntime1588packages; //1588
int napptcppackages; //TCP
int nappudppackages; //UDP
//³õʼ»¯
CAPPARSERINFO()
{
memset(cparserfilename,'\0',sizeof(cparserfilename));
memset(crecoriedname,'\0',sizeof(crecoriedname));
memset(crecorportname,'\0',sizeof(crecorportname));
crecordframetype = 10;//»ìºÏ
napppackages = 0;
nappmmspackages = 0;
nappgoosepackages = 0;
napp92packages = 0;
napp91packages = 0;
napparppackages = 0;
nappbroadcastpackages = 0;
nappotherpackages = 0;
ntime1588packages = 0;
napptcppackages = 0;
nappudppackages = 0;
nconnects = 0;
memset(cstarttimestamp,'\0',sizeof(cstarttimestamp));
memset(cendtimestamp,'\0',sizeof(cendtimestamp));
lTotalCapLenth = 0;
ftime_lastpk_2_first = 0.0;
}
}_CAPPARSERINFO;
struct CAPMSGGININFO;
//ÁÐ±í¶¨Òå
typedef std::map <int, CAPMSGGININFO*> MAP_CAPMSGINFO;//ÐÅÏ¢°ü°üÍ·
typedef struct CAPMSGGININFO
{
CAPMSGGININFO* pPreCapMsg; //ͬһÁ´Â·ÖеÄÉÏÒ»Ö¡
void* pcapconnect; //±¨ÎÄËùÊôÁ´Â·£¬ÒòΪ±¨ÎĽṹûÓÐÉùÃ÷£¬´æÒ»¸övoid*Ö¸Õë
int nseq; //±àºÅ£¬½çÃæ×ÔÓÃ
int nnum; //ÔÚÎļþÖеļǼÐòºÅ
int nlen; //±¨Îij¤¶È
int ncap_len; //±¨ÎļǼ³¤¶È
char* csourceinfo; //ÔʼÊý¾Ý
int nsourceinfo_length; //ÔʼÊý¾Ý³¤¶È
unsigned int nseconds_utc_tmstamp;//±¨ÎÄʱ±ê´Á£¬1970ÄêºóµÄÃë
unsigned int nus_tmstamp; //±¨ÎÄʱ±ê´Á nseconds_utc_tmstamp.΢Ãë
double ftime_delta; //ÓëÉÏÒ»Ö¡±¨ÎĵÄʱ¼ä²î 1970ÄêÒÔºóµÄÃë º¬ºÁÃë
double ftime_delta_capconnect; //±¾Á´Â·ÖÐÓëÉÏÒ»Ö¡µÄʱ¼ä²î 1970ÄêÒÔºóµÄÃë º¬ºÁÃë
double ftime_relative; //Óë¼Ç¼ÎļþÖеĵÚÒ»Ö¡±¨ÎÄ»òÕß»ù׼ʱ¼äµÄʱ¼ä²î,µ¥Î»ºÁÃë
double ftime_relative_capconnect;//Óë±¾Á´Â·ÖеĵÚÒ»Ö¡±¨ÎÄ»òÕß»ù׼ʱ¼äµÄʱ¼ä²î,µ¥Î»ºÁÃë
char csrc_mac[32]; //±¨ÎÄ·¢ËͶËmacµØÖ··û 00:1f:16:24:f2:0c
char cdst_mac[32]; //±¨ÎĽÓÊÕ¶ËmacµØÖ·
int nsrc_port; //±¨ÎÄ·¢ËͶ˿ںÅ
int ndst_port; //±¨ÎĽÓÊն˿ںÅ
int napptype; //Ó¦Óò㱨ÎÄÀàÐÍ mms=1,goose=2,9-2=3,9-1=4,ÆäËü=0£¬ÔÚ³£Á¿ÖÐÔ¤¶¨Òå
int napptpye_type; //Ó¦Óò㱨ÎÄϸ·ÖµÄÀàÐÍ£¬±ÈÈçMMSµÄ·þÎñÀàÐ͵È
//Èç¹ûֵΪ0x88ba ÔñΪ²ÉÑù
int napp_id; //smv¡¢gooseµÄÓ¦ÓñàºÅ
char csrc_ip[18]; //±¨ÎÄ·¢ËͶËipµØÖ··û 100.100.150.103
char cdst_ip[18]; //±¨ÎĽÓÊÕ¶ËipµØÖ·
char ccontent[128]; //±¨ÎĸÅÒªÄÚÈÝ£º´ý¶¨
int nHeadChkgood; //±¨ÎÄͷУÑéÊÇ·ñÕýÈ·£¬1£ºÕýÈ· 0£ºÒì³£
int nAppConetentGood; //Ó¦Óò㱨ÎÄÊÇ·ñÕýÈ· 1£º±êʶÕýÈ· 0£ºÒì³£
// char ciedname[64]; //±¨ÎĶÔÓ¦µÄiedµÄÃû×Ö
void* pparserdstruct; //Ó¦ÓÃÊý¾Ýèå½âÎöºóµÄÏêϸ֡
void* pap_analyzed_info; //±¨ÎÄ·ÖÎö½á¹û
void* pap_anlyzed_info_connect;//±¨ÎÄ·ÖÎöÉÏÏÂÎÄ
bool berroranalyzedgoose; //GOOSE´íÎó
bool beventanalyzedgoose; //GOOSEʼþ¡¢MMSÖеı¨¸æ
bool berroranalyzedsmv; //SMV´íÎó
bool berroranalyzedmms; //MMS´íÎó
int n1588seqid; //1588ÖеÄÐòºÅ
int n1588portid; //1588ÖеĶ˿ںÅ
XJ_DISSECT_PKT* pxj_dissect_pkt; //½âÎöºóµÄÊý¾Ý°ü
bool blastcotpunit; //¶àÖ¡´«ÊäµÄ×îºóÒ»Ö¡ add by yinzhehong 20130315
bool btcppsh; //TCPÊÇ·ñÓÐÓ¦Óñ¨ÎÄ´«Êä
MAP_CAPMSGINFO map_cotplist; //¶àÖ¡´«Êäʱ¶ÓÁÐ
char* csourceinfo_cotp; //¶àÖ¡±¨ÎÄ´«Êäʱ´ó³¤Ö¡
int nsourceinfo_cotp_length; //¶àÖ¡±¨ÎÄ´«Êäʱ´ó³¤Ö¡³¤¶È
unsigned int npkt_offset_incapfile; //±¨ÎÄÔÚÎļþÖеÄλÖÃ
//³õʼ»¯
CAPMSGGININFO()
{
pPreCapMsg = NULL;
n1588portid = 0;
n1588seqid = 0;
pcapconnect = NULL;
nseq = 0;
nnum = -1;
nlen = 0;
ncap_len = 0;
napp_id = -1;
ftime_relative = 0.0;
ftime_relative_capconnect = 0.0;
ftime_delta = 0.0;
ftime_delta_capconnect = 0.0;
memset(csrc_mac,'\0',sizeof(csrc_mac));
memset(cdst_mac,'\0',sizeof(cdst_mac));
nsrc_port = 0;
ndst_port = 0;
napptype = 0;
napptpye_type = 0;
memset(csrc_ip,'\0',sizeof(csrc_ip));
memset(cdst_ip,'\0',sizeof(cdst_ip));
memset(ccontent,'\0',sizeof(ccontent));
nHeadChkgood = 1;
nAppConetentGood = 1;
// memset(ciedname,'\0',sizeof(ciedname));
pparserdstruct = NULL;
pap_analyzed_info = NULL;
pap_anlyzed_info_connect = NULL;
berroranalyzedgoose = false;
berroranalyzedsmv = false;
berroranalyzedmms = false;
csourceinfo = NULL;
nsourceinfo_length = 0;
pxj_dissect_pkt = NULL;
blastcotpunit = false;
btcppsh = false;
csourceinfo_cotp = NULL;
nsourceinfo_cotp_length = 0;
beventanalyzedgoose = false;
nseconds_utc_tmstamp = 0;
nus_tmstamp = 0;
npkt_offset_incapfile= 0;
}
}_CAPMSGGININFO;
enum ETHER_TYPE
{
IEC61850_ETHER_TYPE_UNKOWN =0,
IEC61850_ETHER_TYPE_MMS =1,
IEC61850_ETHER_TYPE_GOOSE =2,
IEC61850_ETHER_TYPE_SMV =3,
IEC61850_ETHER_TYPE_SMV_91 =4,
IEC61850_ETHER_TYPE_PTP_1588=5,
ETHER_TYPE_ARP =6,
ETHER_TYPE_IP =7,
ETHER_TYPE_TCP =8,
ETHER_TYPE_UDP =9,
ETHER_TYPE_COTP =13,
ETHER_TYPE_TCP_FIN =14,//ÊÍ·ÅTCPÁ´½Ó
ETHER_TYPE_TCP_SYN_REQ =15,//ÇëÇó
ETHER_TYPE_TCP_SYN_RESP =16,//½ÓÊÜÁ´½Ó
ETHER_TYPE_TCP_RST =17,//ÖØÖÃÁ´½Ó
ETHER_TYPE_TCP_PSH =18,//ÓÐÓ¦ÓÃÊý¾Ý£¬½ÓÊÕ·½ÐèÒª¾¡¿ì´¦Àí
ETHER_TYPE_TCP_ACK =19,//±£³ÖÁ¬½Ó
ETHER_TYPE_TCP_URG =20,//½ô¼±Êý¾Ý
ETHER_TYPE_TPKT =21,//add by yinzhehong 20130321
};
typedef struct PACKET_STRUCT{
//µ¥Ö¡±¨ÎÄÄÚÈÝÆðʼµØÖ·
void *pPacket;
//µ¥Ö¡±¨Îij¤¶È
int nLen;
unsigned int nAppid;
ETHER_TYPE nEthType;
PACKET_STRUCT()
{
pPacket = 0;
nLen = 0;
nAppid = 0;
nEthType = IEC61850_ETHER_TYPE_UNKOWN;
}
}PACKET_STRUCT;
#endif
- Prev by Date: Re: [Wireshark-dev] [Wireshark-commits] rev 53619: /trunk/ /trunk/: NEWS
- Next by Date: Re: [Wireshark-dev] [Wireshark-commits] rev 53619: /trunk/ /trunk/: NEWS
- Previous by thread: Re: [Wireshark-dev] [Wireshark-commits] rev 53620: /trunk/epan/dissectors/ /trunk/epan/dissectors/: packet-fc.c packet-fc.h packet-fcp.c
- Next by thread: Re: [Wireshark-dev] [Wireshark-commits] buildbot failure in Wireshark (development) on OSX-10.5-x86
- Index(es):