<html><div style='background-color:'><DIV class=RTE>
<P><STRONG>I have this problem when I complie this code:</STRONG></P>
<P>#include &lt;stdlib.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#define LINE_LEN 1000<BR>#include &lt;pcap.h&gt;<BR>#include &lt;process.h&gt;</P>
<P><BR>FILE *stream;<BR>int packet_number=0;</P>
<P><BR>int main(int argc, char **argv)<BR>{&nbsp;</P>
<P>pcap_if_t *d;</P>
<P><BR>int i=0;<BR>pcap_t *adhandle;<BR>u_int netmask;<BR>char packet_filter[] = "ip and udp";<BR>struct bpf_program fcode;</P>
<P>&nbsp;</P>
<P><BR>&nbsp;stream = fopen( "fprintf.out", "w" );<BR>&nbsp;pcap_if_t *alldevs;<BR>&nbsp;pcap_t *fp;<BR>&nbsp;u_int inum;<BR>&nbsp;char errbuf[PCAP_ERRBUF_SIZE];<BR>&nbsp;int res;<BR>&nbsp;struct pcap_pkthdr *header;<BR>&nbsp;const u_char *pkt_data;<BR>&nbsp;</P>
<P><BR>&nbsp;if(argc &lt; 3)<BR>&nbsp;{<BR>&nbsp;&nbsp;printf("\nNo adapter selected: printing the device list:\n");<BR>&nbsp;&nbsp;/* The user didn't provide a packet source: Retrieve the local device list */<BR>&nbsp;&nbsp;if(pcap_findalldevs(&amp;alldevs, errbuf) == -1)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);<BR>&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/* Print the list */<BR>&nbsp;&nbsp;for(d=alldevs; d; d=d-&gt;next)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("%d. %s\n&nbsp;&nbsp;&nbsp; ", ++i, d-&gt;name);</P>
<P>&nbsp;&nbsp;&nbsp;if (d-&gt;description)<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(" (%s)\n", d-&gt;description);<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(" (No description available)\n");<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (i==0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("\nNo interfaces found! Make sure WinPcap is installed.\n");<BR>&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;printf("Enter the interface number (1-%d):",i);<BR>&nbsp;&nbsp;scanf("%d", &amp;inum);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (inum &lt; 1 || inum &gt; i)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("\nInterface number out of range.\n");</P>
<P>&nbsp;&nbsp;&nbsp;/* Free the device list */<BR>&nbsp;&nbsp;&nbsp;pcap_freealldevs(alldevs);<BR>&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/* Jump to the selected adapter */<BR>&nbsp;&nbsp;for (d=alldevs, i=0; i&lt; inum-1 ;d=d-&gt;next, i++);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/* Open the adapter */<BR>&nbsp;&nbsp;if ((fp = pcap_open_live(d-&gt;name,&nbsp;// name of the device<BR>&nbsp;&nbsp;&nbsp;65536,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// portion of the packet to capture. <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 65536 grants that the whole packet will be captured on all the MACs.<BR>&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// promiscuous mode (nonzero means promiscuous)<BR>&nbsp;&nbsp;&nbsp;1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// read 
timeout<BR>&nbsp;&nbsp;&nbsp;errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// error buffer<BR>&nbsp;&nbsp;&nbsp;)) == NULL)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nError opening adapter\n");<BR>&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;else <BR>&nbsp;{<BR>&nbsp;&nbsp;/* Do not check for the switch type ('-s') */<BR>&nbsp;&nbsp;if ((fp = pcap_open_live(argv[2],&nbsp;// name of the device<BR>&nbsp;&nbsp;&nbsp;65536,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// portion of the packet to capture. <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 65536 grants that the whole packet will be captured on all the MACs.<BR>&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// promiscuous mode (nonzero means promiscuous)<BR>&nbsp;&nbsp;&nbsp;1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// read 
timeout<BR>&nbsp;&nbsp;&nbsp;errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// error buffer<BR>&nbsp;&nbsp;&nbsp;)) == NULL)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nError opening adapter\n");<BR>&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><FONT color=#0066cc>&nbsp;/* Without this part of code, I can make a capture without problem*/</FONT></P>
<P><FONT color=#0066cc>&nbsp;/* I just add with this part of code, the declarations at the top:<EM>u_int netmask;, char packet_filter[] = "ip and udp";......*/</EM></FONT></P>
<P><FONT color=#0066cc></FONT><BR>&nbsp;&nbsp;<FONT color=#ff3333>&nbsp; if (d-&gt;addresses != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Retrieve the mask of the first address of the interface */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; netmask=((struct sockaddr_in *)(d-&gt;addresses-&gt;netmask))-&gt;sin_addr.S_un.S_addr;<BR>&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If the interface is without an address we suppose to be in a C class network */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; netmask=0xffffff; </FONT></P>
<P><BR><FONT color=#ff3333>&nbsp;&nbsp;&nbsp; //compile the filter<BR>&nbsp;&nbsp;&nbsp; if (pcap_compile(adhandle, &amp;fcode, "ip and tcp", 1, netmask) &lt; 0)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Free the device list */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcap_freealldevs(alldevs);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; //set the filter<BR>&nbsp;&nbsp;&nbsp; if (pcap_setfilter(adhandle, &amp;fcode) &lt; 0)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"\nError setting the filter.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Free the device list 
*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcap_freealldevs(alldevs);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;</FONT></P>
<P><BR>&nbsp;/* Read the packets */<BR>&nbsp;while((res = pcap_next_ex( fp, &amp;header, &amp;pkt_data)) &gt;= 0)<BR>&nbsp;{</P>
<P>&nbsp;&nbsp;if(res == 0)<BR>&nbsp;&nbsp;&nbsp;/* Timeout elapsed */<BR>&nbsp;&nbsp;&nbsp;continue;</P>
<P><BR>&nbsp;&nbsp;struct tm *ltime;<BR>&nbsp;&nbsp;char timestr[16];<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; /* convert the timestamp to readable format */<BR>&nbsp;&nbsp;&nbsp; ltime=localtime(&amp;header-&gt;ts.tv_sec);<BR>&nbsp;&nbsp;&nbsp; strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);</P>
<P>&nbsp;packet_number=packet_number+1;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; printf("%d ; %s:%.6d; %d; ",packet_number, timestr, header-&gt;ts.tv_usec, header-&gt;len);</P>
<P>/* Print the packet */<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;for (i=1; (i &lt; header-&gt;caplen + 1 ) ; i++)<BR>&nbsp;&nbsp;{</P>
<P>&nbsp;&nbsp;&nbsp;printf("%.2x ", pkt_data[i-1]);<BR>&nbsp;&nbsp;&nbsp;if ( (i % LINE_LEN) == 0) printf("\n");<BR>&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;printf("\n\n");&nbsp;<BR>&nbsp;&nbsp;</P>
<P>fprintf(stream,"%d ;%s:%.6d; %d; ",packet_number, timestr, header-&gt;ts.tv_usec, header-&gt;len);</P>
<P>for (i=1; (i &lt; header-&gt;caplen + 1 ) ; i++)<BR>{<BR>fprintf( stream, "%.2x ",pkt_data[i-1] );<BR>}<BR>fprintf( stream, "\n\n" );<BR>&nbsp;}</P>
<P><BR>&nbsp;if(res == -1)<BR>&nbsp;{<BR>&nbsp;&nbsp;printf("Error reading the packets: %s\n", pcap_geterr(fp));<BR>&nbsp;&nbsp;return -1;<BR>&nbsp;}</P>
<P>system( "type fprintf.out" );<BR>fclose( stream );<BR>&nbsp;pcap_close(fp);<BR>&nbsp;return 0;<BR>}<BR>}<BR></P>
<P>&nbsp;</P>
<P><BR>&nbsp;</P></DIV>
<DIV></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #a0c6e5 2px solid; MARGIN-RIGHT: 0px"><FONT style="FONT-SIZE: 11px; FONT-FAMILY: tahoma,sans-serif">
<HR color=#a0c6e5 SIZE=1>

<DIV></DIV>From:&nbsp;&nbsp;<I>Vasily Borovyak &lt;vbor@isd.dp.ua&gt;</I><BR>Reply-To:&nbsp;&nbsp;<I>winpcap-users@winpcap.org</I><BR>To:&nbsp;&nbsp;<I>winpcap-users@winpcap.org</I><BR>Subject:&nbsp;&nbsp;<I>Re: [Winpcap-users] Problems with Tutorial "Filtering the traffic"</I><BR>Date:&nbsp;&nbsp;<I>Tue, 14 Mar 2006 18:31:13 +0200</I><BR>&gt;Hello Benjamin.<BR>&gt;<BR>&gt;The error is somewhere in your code.<BR>&gt;Provide us the main code parts so we can help you to find the bug.<BR>&gt;<BR>&gt;<BR>&gt;<BR>&gt;Benjamin Amaudric wrote:<BR>&gt;&gt;Hi !!<BR>&gt;&gt;&nbsp;&nbsp;I have a problem when I try to apply a filter.<BR>&gt;&gt;&nbsp;&nbsp;I can make a capture without problem with the code of "/Opening <BR>&gt;&gt;an adapter and capturing the packets/", but when I add the code of <BR>&gt;&gt;"/Filtering the traffic/", Windows gives me this answer:<BR>&gt;&gt;&nbsp;&nbsp;*instruction 
at "0X1000aaca" uses memory address "0xccccccea8". <BR>&gt;&gt;Memory can't be read.*<BR>&gt;&gt;** Can you help me?<BR>&gt;<BR>&gt;--<BR>&gt;Best regards. Vasily Borovyak &lt;vbor@isd.dp.ua&gt;<BR>&gt;<BR>&gt;_______________________________________________<BR>&gt;Winpcap-users mailing list<BR>&gt;Winpcap-users@winpcap.org<BR>&gt;https://www.winpcap.org/mailman/listinfo/winpcap-users<BR></FONT></BLOCKQUOTE></div><br clear=all><hr>Windows Live Mail <a href="http://g.msn.com/8HMBFRFR/2734??PS=47575" target="_top">: découvrez et testez la version bêta !</a> </html>