Re: FreeBSD libnet_pblock_find() problem

Mike Schiffman <[email protected]> Tue, 1 Mar 2005 12:53:34 -0800
Newsgroups gmane.comp.security.libnet
Message-ID <[email protected]>
Try initializing the ptag values:

libnet_ptag_t udp, ip;

udp = ip = LIBNET_PTAG_INITIALIZER;

On Feb 28, 2005, at 6:30 PM, Victor Lima wrote:

> Hello list,
>
>     Im trying to build an application that will forge UDP packets 
> based on
>  information retrieved by libpcap. The box that I'm using is a FreeBSD
>  5.3-REL with ports retrieved from the instalation CD. The libnet 
> version
>  is: libnet-devel-1.1.2.1.
>
>  The problem lies somewhere in this code ( or maybe its a bug in libnet
>  itself ) :
>
>  -----------------------
>
> void
> echo_server ( const unsigned char *packet ) {
>  int                    c;
>  char                   errbuf[LIBNET_ERRBUF_SIZE], src[15], dst[15],
>                         *payload = NULL;
>  libnet_t               *lnet;
>  libnet_ptag_t          udp, ip;
>  struct ip              *ip_hdr;
>  struct udphdr          *udp_hdr;
>
>         ip_hdr  = ( struct ip *) ( packet + size_eth );
>         udp_hdr = ( struct udphdr *) ( packet + size_eth + size_ip );
>         payload = ( char *) ( packet + size_eth + size_ip + size_udp );
>
>         /* the code break somewhere here... */
>         if( (lnet = libnet_init( LIBNET_RAW4, NULL, errbuf )) == NULL 
> ) {
>                 fprintf( stderr, "%s: libnet_init() failed: %s\n", 
> prefix,
>                                   errbuf);
>                 exit( EXIT_FAILURE );
>         }
>
>         udp = libnet_build_udp( ntohs( udp_hdr->uh_dport ),
>                                 ntohs( udp_hdr->uh_sport ),
>                                 LIBNET_UDP_H + strlen( payload ),
>                                 0,
>                                 payload,
>                                 strlen(payload),
>                                 lnet,
>                                 udp );
>
>         if( udp == -1 ) {
>               fprintf (stderr, "%s: libnet_build_udp() failed: %s\n",
>                                 prefix, libnet_geterror(lnet));
>                 goto bad;
>         }
>         /* to here */
>
>         ip = libnet_build_ipv4( LIBNET_IPV4_H + LIBNET_UDP_H +
>                                 strlen( payload ), 0,
>                                 ip_hdr->ip_id,
>                                 0,
>                                 64,
>                                 IPPROTO_UDP,
>                                 0,
>                                 libnet_name2addr4(lnet, (char *)
> inet_ntop(AF_INET, &ip_hdr->ip_dst, dst, sizeof(dst)), LIBNET_RESOLVE),
>                                 libnet_name2addr4(lnet, (char *)
> inet_ntop(AF_INET, &ip_hdr->ip_src, src, sizeof(src)), LIBNET_RESOLVE),
>                                 NULL,
>                                 0,
>                                 lnet,
>                                 ip );
>         if ( ip == -1 ) {
>                 fprintf( stderr, "%s: libnet_build_ipv4() failed: 
> %s\n",
>                                  prefix, libnet_geterror(lnet));
>                 goto bad;
>         }
>         if( (c = libnet_write(lnet)) == -1 ) {
>             fprintf(stderr, "%s: libnet_write() failed: %s\n", prefix,
>                             libnet_geterror(lnet));
>             goto bad;
>         }
>         return;
> bad:
>         libnet_destroy( lnet );
>         exit( EXIT_FAILURE );
> }
>
> -----------------------
>
>         Whenever I run it, it first blocks on libpcap listening for
>  packets, after it recieves one it sends the packet to echo_server, 
> where
>  the appropriate headers are pointed to the correct places in the 
> packet,
>  so that I can build a response based on the received information. The
>  code compiles with no problem except that when I run it, 
> libnet_build_udp
>  returns -1 and the following error message appears:
>
> ---
> libnet_pblock_find() - couldn't find protocol block
> ---
>          Ive googled a bit, and found a few misleading answers none 
> that
>  solved my problem, so I came here. Hope you guys can help me...
>
>  thanks in advance,
>
> -- 
> Victor Lima
>
>
--
Mike Schiffman, CISSP
http://www.packetfactory.net/schiffman
Doveryay No Proveryay