CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 5 of 5

Thread: WinPcap

  1. #1
    Join Date
    May 2009
    Posts
    7

    WinPcap

    Hey so I have been trying for a fairly long time to get WinPcap to work with visual C++ 2010. I followed the online users manual, linked to the library directory and added the proper includes and header files to their respected destinations. Sadly it still wont compile the following code:

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    #include <pcap/pcap.h>
    
    
    int main ()
    {
    pcap_t *fp;
    char errbuf[PCAP_ERRBUF_SIZE];
    u_char packet[100];
    int i;
    
        
        /* Open the output device */
        if ( (fp= pcap_open(argv[1],            // name of the device
                            100,                // portion of the packet to capture (only the first 100 bytes)
                            PCAP_OPENFLAG_PROMISCUOUS,  // promiscuous mode
                            1000,               // read timeout
                            NULL,               // authentication on the remote machine
                            errbuf              // error buffer
                            ) ) == NULL)
        {
            fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]);
            return;
        }
    
        /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */
        packet[0]=1;
        packet[1]=1;
        packet[2]=1;
        packet[3]=1;
        packet[4]=1;
        packet[5]=1;
        
        /* set mac source to 2:2:2:2:2:2 */
        packet[6]=2;
        packet[7]=2;
        packet[8]=2;
        packet[9]=2;
        packet[10]=2;
        packet[11]=2;
        
        /* Fill the rest of the packet */
        for(i=12;i<100;i++)
        {
            packet[i]=(u_char)i;
        }
    
        /* Send down the packet */
        if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
        {
            printf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp));
            return;
        }
    
        return 0;
    }
    This code produces the following error(s).

    Code:
    1>------ Build started: Project: test, Configuration: Debug Win32 ------
    1>  main.cpp
    1>c:\program files\microsoft visual studio 10.0\vc\include\pcap\pcap.h(47): fatal error C1083: Cannot open include file: 'sys/time.h': No such file or directory
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    Now the ideal solution to my problem would be a step by step procedure of how to get a functional WinPcap project. Preferably from someone who has worked with WinPcap and Visual C++ 2010 as I am new to both and am quickly realizing that WinPcap is much trickier to set up then most libraries I have worked with in the past. It seems like this is a common problem and will probably be writing a tutorial on setting these libraries up with different IDE's and compilers as I have yet to find an in depth one of any relevance to the problems I am having.

  2. #2
    Join Date
    Apr 2007
    Posts
    162

    Re: WinPcap

    The error message is pretty clear, VS can't find sys/time.h.
    Change the line in pcap.h to the correct path.
    Last edited by zapper222; November 28th, 2010 at 10:25 AM.

  3. #3
    Join Date
    Nov 2003
    Posts
    1,902

    Re: WinPcap

    First thing I would do is go look at line 47:
    Code:
    #if defined(WIN32)
      #include <pcap-stdinc.h>
    #elif defined(MSDOS)
      #include <sys/types.h>
      #include <sys/socket.h>  /* u_int, u_char etc. */
    #else /* UN*X */
      #include <sys/types.h>
      #include <sys/time.h> /*line 47*/
    #endif /* WIN32/MSDOS/UN*X */
    So you need to define "WIN32" in project settings (C/C++ -> Preprocessor -> Preprocessor Definitions). Most of the wizard generated projects have this already.

    gg

  4. #4
    Join Date
    May 2009
    Posts
    7

    Re: WinPcap

    Hey Codeplug that got rid of the time.h error but more popped up. I played around with the code a bit more making it more like the original example and it now looks like this:

    Code:
    #include "stdafx.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <pcap.h>
    
    int main (int argc, char **argv)
    {
    pcap_t *fp;
    char errbuf[PCAP_ERRBUF_SIZE];
    u_char packet[100];
    int i;
    
    	/* Check the validity of the command line */
        if (argc != 2)
        {
            printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]);
            return;
        }
        
        /* Open the output device */
        if ( (fp= pcap_open(argv[1],            // name of the device
                            100,                // portion of the packet to capture (only the first 100 bytes)
                            PCAP_OPENFLAG_PROMISCUOUS,  // promiscuous mode
                            1000,               // read timeout
                            NULL,               // authentication on the remote machine
                            errbuf              // error buffer
                            ) ) == NULL)
        {
            fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]);
            return;
        }
    
        /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */
        packet[0]=1;
        packet[1]=1;
        packet[2]=1;
        packet[3]=1;
        packet[4]=1;
        packet[5]=1;
        
        /* set mac source to 2:2:2:2:2:2 */
        packet[6]=2;
        packet[7]=2;
        packet[8]=2;
        packet[9]=2;
        packet[10]=2;
        packet[11]=2;
        
        /* Fill the rest of the packet */
        for(i=12;i<100;i++)
        {
            packet[i]=(u_char)i;
        }
    
        /* Send down the packet */
        if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
        {
            fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp));
            return;
        }
    
        return 0;
    }
    This code produces the following error(s):

    Code:
    1>------ Build started: Project: test2, Configuration: Debug Win32 ------
    1>  test2.cpp
    1>c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(18): error C2561: 'main' : function must return a value
    1>          c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(7) : see declaration of 'main'
    1>c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(24): error C2065: 'PCAP_OPENFLAG_PROMISCUOUS' : undeclared identifier
    1>c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(22): error C3861: 'pcap_open': identifier not found
    1>c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(31): error C2561: 'main' : function must return a value
    1>          c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(7) : see declaration of 'main'
    1>c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(60): error C2561: 'main' : function must return a value
    1>          c:\documents and settings\hp_administrator\my documents\c++ workspace\socket workspace\test2\test2\test2.cpp(7) : see declaration of 'main'
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    So things that I have done since I last posted, I started a totally new project and this time used one of the wizard created templates for a terminal application. Which ensured that WIN32 was added as a preprocessor definition. Added the appropriate directory entries under VC++ Directories --> Include Directories and Library Directories and added the names of the .lib files as additional dependencies. For some reason it still seems to be having a problem with pcap_open and PCAP_OPENFLAG_PROMISCUOUS.

  5. #5
    Join Date
    Nov 2003
    Posts
    1,902

    Re: WinPcap

    http://www.winpcap.org/docs/docs_412...pcapsamps.html

    Sample source says you need WPCAP and HAVE_REMOTE as well.

    gg

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured