<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<STYLE>.hmmessage P {
        PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
BODY.hmmessage {
        FONT-SIZE: 10pt; FONT-FAMILY: Tahoma
}
</STYLE>

<META content="MSHTML 6.00.6000.16587" name=GENERATOR></HEAD>
<BODY class=hmmessage bgColor=#ffffff>
<DIV><FONT face="Courier New">You forgot to set the capture filter with 
pcap_compile/pcap_setfilter to udp packets.&nbsp;so you are capturing packets 
which are not udp (or not even ip)&nbsp;and then decoding them as 
udp.</FONT></DIV>
<DIV><FONT face="Courier New"></FONT>&nbsp;</DIV>
<DIV>&nbsp;<FONT face="Courier New">Have a nice day</FONT></DIV>
<DIV><FONT face="Courier New">GV</FONT></DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=essence_z@hotmail.com href="mailto:essence_z@hotmail.com">Ziara .</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=winpcap-users@winpcap.org 
  href="mailto:winpcap-users@winpcap.org">winpcap</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, January 30, 2008 5:13 
  AM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> [Winpcap-users] Retrieve packets 
  using pcap_next_ex</DIV>
  <DIV><BR></DIV>I'm trying retrieve upd packets with pcap_next_ex but I compare 
  the results with this example in the manual using pcap_loop<BR>&nbsp;<BR><A 
  href="http://www.winpcap.org/docs/docs_40_2/html/group__wpcap__tut6.html">http://www.winpcap.org/docs/docs_40_2/html/group__wpcap__tut6.html</A><BR>&nbsp;<BR>and&nbsp; 
  I think something it's wrong, because with pcap_next_ex give me incoherent 
  ports and some ip's, what's happen? thanks<BR>&nbsp;<BR>// 4 bytes IP 
  address<BR>typedef struct ip_address{<BR>&nbsp;u_char byte1;<BR>&nbsp;u_char 
  byte2;<BR>&nbsp;u_char byte3;<BR>&nbsp;u_char byte4;<BR>}ip_address;<BR>// 20 
  bytes IP Header<BR>typedef struct ip_header{<BR>&nbsp;u_char ver_ihl; // 
  Version (4 bits) + Internet header length (4 bits)<BR>&nbsp;u_char tos; // 
  Type of service<BR>&nbsp;u_short tlen; // Total length<BR>&nbsp;u_short 
  identification; // Identification<BR>&nbsp;u_short flags_fo; // Flags (3 bits) 
  + Fragment offset (13 bits)<BR>&nbsp;u_char ttl; // Time to 
  live<BR>&nbsp;u_char proto; // Protocol<BR>&nbsp;u_short crc; // Header 
  checksum<BR>&nbsp;ip_address saddr; // Source address<BR>&nbsp;ip_address 
  daddr; // Destination address<BR>&nbsp;u_int op_pad; // Option + Padding -- 
  NOT NEEDED!<BR>}ip_header;<BR>typedef struct udp_header{<BR>&nbsp;u_short 
  sport;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Source 
  port<BR>&nbsp;u_short 
  dport;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Destination 
  port<BR>&nbsp;u_short 
  len;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
  Datagram length<BR>&nbsp;u_short 
  crc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
  Checksum<BR>}udp_header;<BR>int main()<BR>{<BR>&nbsp;pcap_if_t 
  *alldevs;<BR>&nbsp;pcap_if_t *d;<BR>&nbsp;int inum;<BR>&nbsp;int 
  i=0;<BR>&nbsp;pcap_t *adhandle;<BR>&nbsp;int res;<BR>&nbsp;char 
  errbuf[PCAP_ERRBUF_SIZE];<BR>&nbsp;struct tm *ltime;<BR>&nbsp;char 
  timestr[16];<BR>&nbsp;struct pcap_pkthdr *header;<BR>&nbsp;const u_char 
  *pkt_data;<BR>&nbsp;time_t local_tv_sec;<BR><BR>&nbsp;&nbsp;&nbsp; /* Retrieve 
  the device list on the local machine */<BR>&nbsp;&nbsp;&nbsp; if 
  (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &amp;alldevs, errbuf) == 
  -1)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fprintf(stderr,"Error in pcap_findalldevs: %s\n", 
  errbuf);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  exit(1);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; /* Print the list 
  */<BR>&nbsp;&nbsp;&nbsp; for(d=alldevs; d; d=d-&gt;next)<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d. %s", ++i, 
  d-&gt;name);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (d-&gt;description)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  printf(" (%s)\n", 
  d-&gt;description);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  printf(" (No description available)\n");<BR>&nbsp;&nbsp;&nbsp; 
  }<BR>&nbsp;&nbsp;&nbsp; if(i==0)<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nNo interfaces found! 
  Make sure WinPcap is 
  installed.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  -1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; printf("Enter the interface 
  number (1-%d):",i);<BR>&nbsp;&nbsp;&nbsp; scanf("%d", 
  &amp;inum);<BR>&nbsp;&nbsp;&nbsp; if(inum &lt; 1 || inum &gt; 
  i)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  printf("\nInterface number out of 
  range.\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; /* Jump to the 
  selected adapter */<BR>&nbsp;&nbsp;&nbsp; for(d=alldevs, i=0; i&lt; inum-1 
  ;d=d-&gt;next, i++);<BR>&nbsp;&nbsp;&nbsp; /* Open the device 
  */<BR>&nbsp;&nbsp;&nbsp; if ( (adhandle= 
  pcap_open(d-&gt;name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
  name of the 
  device<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  65536,&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  // 65536 guarantees that the whole packet will be captured on all the link 
  layers<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  PCAP_OPENFLAG_PROMISCUOUS,&nbsp;&nbsp;&nbsp; // promiscuous 
  mode<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  // read 
  timeout<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  // authentication on the remote 
  machine<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
  error 
  buffer<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ) ) == NULL)<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"\nUnable to 
  open the adapter. %s is not supported by WinPcap\n", 
  d-&gt;name);<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; printf("\nlistening 
  on %s...\n", d-&gt;description);<BR>&nbsp;&nbsp;&nbsp; /* At this point, we 
  don't need any more the device list. Free it */<BR>&nbsp;&nbsp;&nbsp; 
  pcap_freealldevs(alldevs);<BR><BR>ip_header *ip; //ip header<BR>udp_header 
  *udp;<BR>u_int ip_len;<BR>u_short sport,dport;<BR><BR>&nbsp;&nbsp;&nbsp; 
  while((res=pcap_next_ex( adhandle, &amp;header, 
  &amp;pkt_data))&gt;=0)<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(res 
  == 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  //Timeout 
  elapsed<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  continue;<BR>ip = (ip_header*)(pkt_data + 14);<BR>ip_len = (ip-&gt;ver_ihl 
  &amp; 0xf) * 4; //Longitud de Ip header<BR>udp = (udp_header *)((u_char *)ip + 
  ip_len);<BR>sport = ntohs( udp-&gt;sport );<BR>dport = ntohs( udp-&gt;dport 
  );<BR>printf("Dir Sourc: %d.%d.%d.%d\n", 
  ip-&gt;saddr.byte1,ip-&gt;saddr.byte2,ip-&gt;saddr.byte3,ip-&gt;saddr.byte4);<BR>printf("Dir 
  Dest: %d.%d.%d.%d\n", 
  ip-&gt;daddr.byte1,ip-&gt;daddr.byte2,ip-&gt;daddr.byte3,ip-&gt;daddr.byte4);<BR>printf("Port 
  Sourc: %d\n", sport);<BR>printf("Port Dest: %d\n", 
  dport);<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; if(res == 
  -1){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Error reading the 
  packets: %s\n", 
  pcap_geterr(adhandle));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  -1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return 0;<BR>}<BR><BR>
  <HR>
  Sigue de cerca las últimas tendencias y lo que más rompe <A 
  href="http://video.msn.com/video.aspx?mkt=es-es" target=_new>MSN Vídeo</A> 
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Winpcap-users 
  mailing 
  list<BR>Winpcap-users@winpcap.org<BR>https://www.winpcap.org/mailman/listinfo/winpcap-users<BR></BLOCKQUOTE></BODY></HTML>