|
-
November 28th, 2010, 02:22 AM
#1
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.
-
November 28th, 2010, 10:23 AM
#2
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.
-
November 28th, 2010, 10:51 AM
#3
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
-
November 28th, 2010, 04:23 PM
#4
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.
-
November 28th, 2010, 04:57 PM
#5
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|