Ethereal-dev: [Ethereal-dev] Filters do not match
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Soft Boy <etherealfilter@xxxxxxxxx>
Date: Wed, 24 Mar 2004 06:43:06 -0800 (PST)
Hi, I am trying to make a tool by slightly modifying ethereal. As an experiment I have changed the function main() as shown below. The main function basically calls the APIs used to compile the dfilter, create dissector and run dfilter code. It has an ARP packet and a read filter 'arp', passed as an command line argument, which should match this packet. Similarly, filters 'ip' and 'tcp' should not match this packet. However, what I am getting is always NO match. Am I missing anything here ?? Makefile have no change except that I have disbaled the compiler optimization. Any help will be appriciated. thanks and regards, SoftBoy int main(int argc, char *argv[]) { int opt; extern char *optarg; gboolean arg_error = FALSE; gboolean passed = TRUE; gchar *rfilter = NULL; #ifdef HAVE_PCAP_OPEN_DEAD struct bpf_program fcode; #endif dfilter_t *rfcode = NULL; frame_data fdata; epan_dissect_t *edt=NULL; struct wtap_pkthdr whdr; union wtap_pseudo_header pseudo_header; cb_args_t args; int err; struct pcap_pkthdr hdr; struct pcap_pkthdr *phdr=&hdr; guchar data[64]={ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0c, 0x29, 0x15, 0x9d, 0xa7, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x01, 0xc0, 0xa8, 0x3e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x3e, 0x03 }; guchar *pd=&data; hdr.ts.tv_sec = 0; hdr.ts.tv_usec = 0; hdr.len = 42; hdr.caplen = 42; /* Register all dissectors; we must do this before checking for the "-G" flag, as the "-G" flag dumps information registered by the dissectors, and we must do it before we read the preferences, in case any dissectors register preferences. */ epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs); /* Now get our args */ while ((opt = getopt(argc, argv, "a:b:c:d:Df:F:hi:lLnN:o:pqr:R:s:St:T:vw:Vxy:z:")) != -1) { switch (opt) { case 'd': /* Decode as rule */ if (!add_decode_as(optarg)) exit(1); break; case 'h': /* Print help and exit */ print_usage(TRUE); exit(0); break; case 'S': /* show packets in real time */ decode = TRUE; break; case 'T': /* printing Type */ if (strcmp(optarg, "text") == 0) print_format = PR_FMT_TEXT; else if (strcmp(optarg, "pdml") == 0) print_format = PR_FMT_PDML; else if (strcmp(optarg, "ps") == 0) print_format = PR_FMT_PS; else { fprintf(stderr, "tethereal: Invalid -T parameter.\n"); fprintf(stderr, "It must be \"ps\", \"text\" or \"pdml\".\n"); exit(1); } break; case 'v': /* Show version and exit */ printf("t" PACKAGE " " VERSION #ifdef CVSVERSION " (" CVSVERSION ")" #endif "\n%s\n%s\n", comp_info_str->str, runtime_info_str->str); exit(0); break; default: case '?': /* Bad flag - print usage message */ arg_error = TRUE; break; } } /* If no capture filter or read filter has been specified, and there are still command-line arguments, treat them as the tokens of a capture filter (if no "-r" flag was specified) or a read filter (if a "-r" flag was specified. */ if (optind < argc) { rfilter = get_args_as_string(argc, argv, optind); } if (rfilter != NULL) { if (!dfilter_compile(rfilter, &rfcode)) { fprintf(stderr, "tethereal: %s\n", dfilter_error_msg); epan_cleanup(); #ifdef HAVE_PCAP_OPEN_DEAD { pcap_t *p; p = pcap_open_dead(DLT_EN10MB, MIN_PACKET_SIZE); if (p != NULL) { if (pcap_compile(p, &fcode, rfilter, 0, 0) != -1) { fprintf(stderr, " Note: That display filter code looks like a valid capture filter;\n" " maybe you mixed them up?\n"); } pcap_close(p); } } #endif exit(2); } } cfile.rfcode = rfcode; /* Initialize all data structures used for dissection. */ init_dissection(); ld.linktype = WTAP_ENCAP_UNKNOWN; ld.pdh = NULL; /* Convert from libpcap to Wiretap format. If that fails, ignore the packet (wtap_process_pcap_packet has written an error message). */ pd = wtap_process_pcap_packet(ld.linktype, phdr, pd, &pseudo_header, &whdr, &err); if (pd == NULL) { return -1; } args.cf = &cfile; args.pdh = ld.pdh; if (cfile.rfcode) { fill_in_fdata(&fdata, &cfile, &whdr, 0); edt = epan_dissect_new(TRUE, TRUE); epan_dissect_prime_dfilter(edt, cfile.rfcode); epan_dissect_run(edt, &pseudo_header, pd, &fdata, NULL); passed = dfilter_apply_edt(cfile.rfcode, edt); } printf("The filter has %s passed", (passed?"":"NOT")); if (edt != NULL) epan_dissect_free(edt); if (cfile.rfcode) clear_fdata(&fdata); epan_cleanup(); return 0; } --- Soft Boy <etherealfilter@xxxxxxxxx> wrote: > > Libethereal is work in progress to put the > > dissection and display filter stuff into a > library. > > While the library exists by now, the API > > a) probably needs cleanup and > > b) should be usable anyway. > > Where are the APIs ? Is there any doc/readme or can > you please refer to me particular C files ?? > > > > Can I build libethereal using the > > > ethereal.0.10.2 which I have downloaded ?? > > > > No, libethereal (under unix) exists in current cvs > > only. > > If you want to test, take a look at the web pages > -> > > development on how to download via cvs or the > > nightly > > source snapshots. > Thanks. > I took ethereal0.10.2 and compiled epan only. It > gave > me 3 archives: libethereal, libdfilter, and > libftypes. > I guess these do not have the dissectors. Do we have > any makefile to archive the dissector code in > library > ?? > > regards, > soft boy > > __________________________________ > Do you Yahoo!? > Yahoo! Mail - More reliable, more storage, less spam > http://mail.yahoo.com > > _______________________________________________ > Ethereal-dev mailing list > Ethereal-dev@xxxxxxxxxxxx > http://www.ethereal.com/mailman/listinfo/ethereal-dev __________________________________ Do you Yahoo!? Yahoo! Finance Tax Center - File online. File on time. http://taxes.yahoo.com/filing.html
- Follow-Ups:
- Re: [Ethereal-dev] Filters do not match
- From: Guy Harris
- Re: [Ethereal-dev] Filters do not match
- References:
- Re: [Ethereal-dev] Display filter working
- From: Soft Boy
- Re: [Ethereal-dev] Display filter working
- Prev by Date: Re: [Ethereal-dev] samr patch and kerberos update
- Next by Date: [Ethereal-dev] Can't autogen on OS X
- Previous by thread: Re: [Ethereal-dev] Display filter working
- Next by thread: Re: [Ethereal-dev] Filters do not match
- Index(es):