Libnet
FreeBSD libnet_pblock_find() problem Mar 01 2005 02:30AM
Victor Lima (sena urbi com br) (2 replies)
Re: FreeBSD libnet_pblock_find() problem Mar 01 2005 08:53PM
Mike Schiffman (mike infonexus com) (1 replies)
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

[ reply ]
Re: FreeBSD libnet_pblock_find() problem Mar 03 2005 07:21PM
Mustafa Abu Sedera (tifa_80 hotmail com)
Re: FreeBSD libnet_pblock_find() problem Mar 01 2005 07:16PM
Frédéric Raynal (frederic raynal security-labs org)


 

Privacy Statement
Copyright 2010, SecurityFocus