[Icescan-cvs] IceScan/icesockets cpcapreader.h,1.16,1.17
Status: Alpha
Brought to you by:
darkkey
From: Alexander B. <da...@us...> - 2009-04-07 14:15:52
|
Update of /cvsroot/icescan/IceScan/icesockets In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv11281/icesockets Modified Files: cpcapreader.h Log Message: 0.0.7rc1 release Index: cpcapreader.h =================================================================== RCS file: /cvsroot/icescan/IceScan/icesockets/cpcapreader.h,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** cpcapreader.h 15 Mar 2009 18:59:19 -0000 1.16 --- cpcapreader.h 7 Apr 2009 13:39:55 -0000 1.17 *************** *** 23,29 **** int link_type; public: ! cpcapreader(int iface, bool block, bool promisc = false, char *filter_exp = NULL){ p = init_pcap(iface, promisc); --- 23,31 ---- int link_type; + pcap_dumper_t* pdt; + public: ! cpcapreader(int iface, bool block, bool promisc = false, const char *filter_exp = NULL, icestring outdump = ""){ p = init_pcap(iface, promisc); *************** *** 35,43 **** pcap_filter(p, filter_exp); /// get LINK TYPE OF THE INTERFACE link_type = pcap_datalink(p); } ! cpcapreader(icestring dumpfile){ char errbuf[PCAP_ERRBUF_SIZE]; --- 37,50 ---- pcap_filter(p, filter_exp); + if(outdump != "") + pdt = pcap_dump_open(p, outdump.c_str()); + else + pdt = NULL; + /// get LINK TYPE OF THE INTERFACE link_type = pcap_datalink(p); } ! cpcapreader(icestring dumpfile, const char *filter_exp = NULL, icestring outdump = ""){ char errbuf[PCAP_ERRBUF_SIZE]; *************** *** 46,49 **** --- 53,64 ---- err_fatal(errbuf); } + + if(filter_exp) + pcap_filter(p, filter_exp); + + if(outdump != ""){ + pdt = pcap_dump_open(p, outdump.c_str()); + }else + pdt = NULL; } *************** *** 278,283 **** --- 293,309 ---- return res; } + + void close_dumps(){ + if(pdt){ + pcap_dump_flush(pdt); + pcap_dump_close(pdt); + pdt = NULL; + } + } + ~cpcapreader(){ + close_dumps(); + close_pcap(p); } *************** *** 469,472 **** --- 495,501 ---- if(!p) return NULL; + if(pdt) + pcap_dump((u_char*)pdt, &head, (const u_char*) p); + *caplen = head.caplen; *len = head.len; *************** *** 516,519 **** --- 545,551 ---- }else return NULL; + if(pdt) + pcap_dump((u_char*)pdt, &head, (const u_char*)p); + //DBGOUTPUT(offset); *************** *** 545,553 **** ! bool pcap_filter(pcap_t *p, char *filter_exp){ struct bpf_program fp; /* The compiled filter expression */ ! if (pcap_compile(p, &fp, filter_exp, 0, 0) == -1) { return false; } --- 577,585 ---- ! bool pcap_filter(pcap_t *p, const char *filter_exp){ struct bpf_program fp; /* The compiled filter expression */ ! if (pcap_compile(p, &fp, (char *)filter_exp, 0, 0) == -1) { return false; } |