home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / w00w00 / sectools / fragrouter / Libnet-0.99b / test / UDP / udp+data.c < prev   
Encoding:
C/C++ Source or Header  |  1999-07-26  |  4.3 KB  |  151 lines

  1. /*
  2.  *  $Id: udp+data.c,v 1.1.1.1 1999/05/18 15:33:43 dugsong Exp $
  3.  *
  4.  *  libnet
  5.  *  UDP + payload Packet assembly tester
  6.  *
  7.  *  Copyright (c) 1998, 1999 Mike D. Schiffman <mike@infonexus.com>
  8.  *                           route|daemon9 <route@infonexus.com>
  9.  *  All rights reserved.
  10.  *
  11.  * Redistribution and use in source and binary forms, with or without
  12.  * modification, are permitted provided that the following conditions
  13.  * are met:
  14.  * 1. Redistributions of source code must retain the above copyright
  15.  *    notice, this list of conditions and the following disclaimer.
  16.  * 2. Redistributions in binary form must reproduce the above copyright
  17.  *    notice, this list of conditions and the following disclaimer in the
  18.  *    documentation and/or other materials provided with the distribution.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  21.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  24.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30.  * SUCH DAMAGE.
  31.  *
  32.  */
  33.  
  34. #if (HAVE_CONFIG_H)
  35. #include "../../include/config.h"
  36. #endif
  37. #include "../libnet_test.h"
  38.  
  39. int
  40. main(int argc, char **argv)
  41. {
  42.     int sock, c;
  43.     u_long src_ip, dst_ip;
  44.     u_short src_prt, dst_prt;
  45.     u_char *cp, *buf;
  46.     u_char *payload = "hello world";
  47.     int payload_s = strlen(payload);
  48.  
  49.     printf("UDP + payload packet building/writing test\n");
  50.  
  51.     src_ip  = 0;
  52.     dst_ip  = 0;
  53.     src_prt = 0;
  54.     dst_prt = 0;
  55.     while((c = getopt(argc, argv, "d:s:")) != EOF)
  56.     {
  57.         switch (c)
  58.         {
  59.             /*
  60.              *  We expect the input to be of the form `ip.ip.ip.ip.port`.  We
  61.              *  point cp to the last dot of the IP address/port string and
  62.              *  then seperate them with a NULL byte.  The optarg now points to
  63.              *  just the IP address, and cp points to the port.
  64.              */
  65.             case 'd':
  66.                 if (!(cp = strrchr(optarg, '.')))
  67.                 {
  68.                     usage(argv[0]);
  69.                 }
  70.                 *cp++ = 0;
  71.                 dst_prt = (u_short)atoi(cp);
  72.                 if (!(dst_ip = name_resolve(optarg, 1)))
  73.                 {
  74.                     fprintf(stderr, "Bad destination IP address: %s\n", optarg);
  75.                     exit(1);
  76.                 }
  77.                 break;
  78.             case 's':
  79.                 if (!(cp = strrchr(optarg, '.')))
  80.                 {
  81.                     usage(argv[0]);
  82.                 }
  83.                 *cp++ = 0;
  84.                 src_prt = (u_short)atoi(cp);
  85.                 if (!(src_ip = name_resolve(optarg, 1)))
  86.                 {
  87.                     fprintf(stderr, "Bad source IP address: %s\n", optarg);
  88.                     exit(1);
  89.                 }
  90.                 break;
  91.         }
  92.     }
  93.     if (!src_ip || !src_prt || !dst_ip || !dst_prt)
  94.     {
  95.         usage(argv[0]);
  96.         exit(EXIT_FAILURE);
  97.     }
  98.  
  99.     buf = malloc(UDP_H + IP_H + payload_s);
  100.     if (!buf)
  101.     {
  102.         perror("No memory for packet");
  103.         exit(EXIT_FAILURE);
  104.     }
  105.  
  106.     sock = open_raw_sock(IPPROTO_RAW);
  107.     if (sock == -1)
  108.     {
  109.         perror("No socket");
  110.         exit(EXIT_FAILURE);
  111.     }
  112.     
  113.     build_ip(UDP_H + payload_s,
  114.             0,
  115.             242,
  116.             0,
  117.             64,
  118.             IPPROTO_UDP,
  119.             src_ip,
  120.             dst_ip,
  121.             NULL,
  122.             0,
  123.             buf);
  124.  
  125.     build_udp(1025, 22, payload, payload_s, buf + IP_H);
  126.  
  127.     do_checksum(buf, IPPROTO_UDP, UDP_H + payload_s);
  128.  
  129.     c = write_ip(sock, buf, UDP_H + IP_H + payload_s);
  130.     if (c < UDP_H + IP_H + payload_s)
  131.     {
  132.         fprintf(stderr, "write_ip\n");
  133.     }
  134.     printf("Completed, wrote %d bytes\n", c);
  135.  
  136.     free(buf);
  137.  
  138.     return (c == -1 ? EXIT_FAILURE : EXIT_SUCCESS);
  139. }
  140.  
  141.  
  142. void
  143. usage(u_char *name)
  144. {
  145.     fprintf(stderr,
  146.         "usage: %s -s source_ip:source_port -d destination_ip:destination_port\n",
  147.         name);
  148. }
  149.  
  150. /* EOF */
  151.