基于Scapy的传统网络攻击实现

前言

Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。Scapy还是一个功能强大的交互式数据包操作程序。它能够伪造或解码大量协议的数据包,通过线路发送,捕获它们,匹配请求和回复等等。Scapy可以轻松处理大多数经典任务,如扫描,跟踪路由,探测,单元测试,攻击或网络发现。它可以取代hping,arpspoof,arp-sk,arping,甚至是Nmap,tcpdump和tshark的某些部分。

开发环境与工具

开发环境:Python 3,开发工具:Pycharm,开发所需第三方库:Scapy(是一种用于计算机网络的数据包处理工具,由 Philippe Biondi 用 Python 编写。它可以伪造或解码数据包,通过网络发送它们,捕获它们,并匹配请求和响应)。

系统主要功能

传统网络攻击系统主要包含三个功能,一是ARP扫描,可以扫描本局域网活跃的主机数,以及各自的IP地址和对应的MAC地址。二是ARP欺骗功能,通过欺骗局域网内靶机的网关MAC地址,使靶机错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。该功能可以进一步升级为嗅探攻击。第三个功能为DOS攻击,通过向靶机发送大量的TCP SYN报文,消耗系统资源,使得服务器无法提供正常的服务。

系统原理分析

协议工作原理

ARP工作原理

在网络的数据链路层只能看见 MAC 帧,链路层以上的数据都被封装在 MAC 帧中,MAC 帧包含源 MAC 地址和目的MAC 地址,在实际局域网络中传送数据时,根据 MAC 地址寻找目的主机。已知一台主机的 IP 地址,要发送数据时需要找到对方的 MAC 地址,这时就需要用到 ARP。ARP 负责将网络层中的 IP 地址解析为链路层的 MAC 地址。
每台主机都有一个 ARP 高速缓存,保存着本局域网内已知主机和路由器的 IP 地址和 MAC 地址映射表,这些映射关系可更新且有生存周期。当一台主机发送数据时,若目标主机的 MAC 地址在 ARP 缓存表中不存在,会将包含目标 IP 地址信息的 ARP 请求广播给网络中的所有主机,接收返回消息以确定目标 IP 地址的物理地址。收到返回消息后将该 IP 地址和MAC 地址存入本机 ARP 缓存中并保留一定时间,以便下次请求时直接查询 ARP 缓存。

TCP工作原理

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工(full-duplex) 的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
(1)TCP协议的三次握手:TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN执 行ACK确认。TCP三次握手的过程如下:①客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。②服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。③客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。④三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
在这里插入图片描述
(2)TCP协议的四次挥手:①客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号,之后客户端进入FIN_WAIT_1状态。也就是客户端发出连接释放报文段(FIN报文),指定序列号seq = u,主动关闭TCP连接,等待服务器的确认。②第二次挥手:服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = u + 1。接着服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态,客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态。③第三次握手:服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认。服务器的连接释放(FIN)报文段的FIN=1,ACK=1,序列号seq=m,确认序列号ack=u+1。④第四次握手:客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为ACK应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1作为确认序号ack。
在这里插入图片描述

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Holy meat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值