ns-3.25中基于tcp-syn半开状态实现dos攻击(一)

在ns-3实现基于tcp syn原理的dos攻击,先了解攻击的最基本原理,然后ns-3中看懂相关功能实现,最后可以在相应的地方添加自己的代码实现攻击了。写本文的主要目的是将实验过程记录下来,以便以后可能会查看。

要实现仿真先编写合适的仿真场景脚本文件,这里我们直接拿现成的来修改,我觉得examples/tcp/tcp-large-transfer.cc就不错。但是看到里面有StartFlow和WriteUntilBufferFull这些函数,深感繁琐(把它们注释掉),因此我们将之前写好的类MyApp(继承自Application)直接拿来作为应用程序使用,这样非常方便。网络拓扑只有三个节点:0--1--2,节点2作为服务器,我们在其上安装PacketSink应用程序用来接收客户端的数据包。节点0和1作为客户端,我们给它们添加socket,创建socket时使用的是TcpSocketBase类的CreateSocket方法(这个主要是为了设置我们在tcp-socket-base.cc和tcp-socket-base.h中添加的用来启动syn攻击的布尔型成员变量),通过socket的SetAttribute方法可以对这个布尔变量进行赋值,从而决定哪些节点实现syn泛洪攻击。这里我们将节点0设置为攻击节点,节点1为正常的客户端节点。

在脚本攻击设置完毕后,我们需要修改相关的源文件,因为攻击的原理是不停的发送syn标志的请求包,所以我们找到tcp-socket-base.cc文件中的DoConnect函数(1000行左右),如果标记攻击的布尔型变量为ture我们就使用循环多次发送syn包,每次发送的时候需要将源端口号和序列号加一,否则会出现错误的包(在wireshark错误的显示重复发送)。正常情况下发完一个syn包需要将状态CLOSED改为SYN_SENT,这里我们为了实现攻击效果,不改变状态,也就是恶意的客户端发送过syn包后状态仍然是CLOSED。正常情况下,当服务器发送syn|ack包给客户端后,客户端如果在CLOSED状态,它会直接发送rst的数据包,这样会直接复位服务器保存的半连接状态,达不到攻击的效果。因此我们在DoForwardUp函数中使用标识攻击的布尔变量不让其发送rst数据包,这样服务器就会在很长一段时间内一直重复发送syn|ack应答包,严重影响服务器的存储和通信资源。

以上已经基本实现了基于tcp syn的dos攻击,但是还有一些小问题,即我们在DoConnect函数中重复发送不同源端口和序列号的syn包时,忽略了一点,只有第一个发出去的包是我们在仿真脚本文件中进行绑定过的,也就是说重复发送的第2至n个syn包的端口没有被netdevice进行绑定,因此当客户端收到服务器发送回来的syn|ack包时不能对这些数据包(第2至n个)对应的端口进行监听,客户端会直接发送rst数据包给服务器。(这个问题的解决可以在tcp-l4-protocol.cc文件中的NoEndPointsFound函数根据标识攻击的布尔型变量进行修改来决定其是否发送rst包)。

至此,我们基于ns-3中tcp syn dos攻击的介绍到这里就接近尾声了,当然这里重复发送源端口++和序列号++的syn包可能不是特别合适,下篇文章我们会在恶意客户端加入ip欺骗,使dos攻击仿真更加切合实际。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值