tcpdump mailing list archives

Re: capturing on both interfaces simultaneously


From: abhinav narain <abhinavnarain10 () gmail com>
Date: Sat, 10 Dec 2011 23:37:42 -0500

I got it to work.
Thanks for replying on the thread

Abhinav

On Sat, Dec 10, 2011 at 8:15 PM, abhinav narain
<abhinavnarain10 () gmail com>wrote:

Actually, I did better now ... but I don't know what should be done to
call the corresponding dispatch
If someone can give me a hint


  char  *device0="phy0";
  char  *device1="phy1";
  pcap0 = pcap_open_live(device0, BUFSIZ, 1, -1, errbuf);
  pcap1 = pcap_open_live(device1, BUFSIZ, 1, -1, errbuf);

for(;;)
   {

   /* If you include STDIN_FILENO, be sure to read from it when you get
      traffic from it, or select will return every time it is called,
      since there will still be traffic waiting there.
   */

   FD_ZERO(&fd_wait);
   //FD_SET(STDIN_FILENO, &fd_wait);
   FD_SET(pcap_fileno(pcap0), &fd_wait);
   FD_SET(pcap_fileno(pcap1), &fd_wait);

   st.tv_sec  = 1;
   st.tv_usec = 0;   /* 1000 = 1 second */

   t=select(FD_SETSIZE, &fd_wait, NULL, NULL, &st);
   printf("t is %d\n",t);
   switch(t)
     {
     case -1:      /* Something went really wrong */
       printf("Argh!\n\n");
       exit(1);

     case  0:      /* We timed out, no trafffic */
       printf( " Time out ! \n");
       break;

     default:      /* We got traffic */
       pcap_dispatch(pcap0,-1, (void *) packet_callback, NULL);
       pcap_dispatch(pcap1,-1, (void *) packet_callback2, NULL);
     }
   // Put your service routine here.. is called when select times out or
when a packet is processed
   }





On Sat, Dec 10, 2011 at 7:12 PM, abhinav narain <abhinavnarain10 () gmail com
wrote:

Two threads are too large on this.

I was unable to find how to set the set of interfaces to be restricted to
2 (the ones i want) and call the same callback on return from dispatch.

This code is not right, but I am clueless to proceed

Any direction will be good.
<code>
  fd_set rfds;
  char * device="phy0";
  char * device1="phy1";
  handle1 = pcap_open_live(device, BUFSIZ, 1, 0, errbuf);
  handle2 = pcap_open_live(device1, BUFSIZ, 1, 0, errbuf);

  fd = pcap_get_selectable_fd(handle1);
  pcap_compile(handle1, &fcode, "type mgt subtype beacon", 1, 0);
  pcap_setfilter(handle1, &fcode);

  /*


  fd = pcap_get_selectable_fd(handle2);


  pcap_compile(handle2, &fcode, "type mgt subtype beacon", 1, 0);


  pcap_setfilter(handle2, &fcode);


  */

  while (retval == 0) {
    FD_ZERO(&rfds);
    FD_SET(fd, &rfds);
    tv.tv_sec = 1; /* timeout 1 sec */
    tv.tv_usec = 0;
    retval = select(fd + 1, &rfds, NULL, NULL, &tv);

    if(pcap_dispatch(handle1,-1,callback1,(u_char *)NULL) < 0 ){
      printf("error");
    }
    if(pcap_dispatch(handle2, -1,callback1,(u_char *)NULL) < 0 ){
      printf("error");
    }

  }

</code>



-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.


Current thread: