From 777b012ed3381f33d4a369c03499a885226ba587 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Wed, 25 Sep 2024 12:33:40 +0200 Subject: [PATCH 1/2] added module astami --- bin/sippts | 41 +++- src/sippts/astami.py | 504 +++++++++++++++++++++++++++++++++++++++ src/sippts/lib/logos.py | 21 ++ src/sippts/lib/params.py | 196 ++++++++++++++- 4 files changed, 759 insertions(+), 3 deletions(-) create mode 100644 src/sippts/astami.py diff --git a/bin/sippts b/bin/sippts index af77454..5fab1be 100755 --- a/bin/sippts +++ b/bin/sippts @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" @@ -32,8 +32,45 @@ def main(): s.spoof() exit() + elif params[0] == "astami": + ( + cmd, + ip, + host, + rport, + proto, + threads, + timeout, + verbose, + file, + nocolor, + ofile, + random, + local_ip, + user, + pwd, + cmd + ) = params + + from sippts.astami import SipAstAMI - if params[0] == "scan": + s = SipAstAMI() + s.ip = ip + s.host = host + s.rport = rport + s.proto = proto + s.threads = threads + s.timeout = timeout + s.verbose = verbose + s.file = file + s.nocolor = nocolor + s.ofile = ofile + s.random = random + s.localip = local_ip + s.user = user + s.pwd = pwd + s.cmd = cmd + elif params[0] == "scan": ( cmd, ip, diff --git a/src/sippts/astami.py b/src/sippts/astami.py new file mode 100644 index 0000000..b842150 --- /dev/null +++ b/src/sippts/astami.py @@ -0,0 +1,504 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +__author__ = "Jose Luis Verdeguer" +__version__ = "4.1" +__license__ = "GPL" +__copyright__ = "Copyright (C) 2015-2024, SIPPTS" +__email__ = "pepeluxx@gmail.com" + +import random +import re +import socket +import ipaddress +import sys +import time +from IPy import IP +from asterisk.ami import AMIClient, SimpleAction + +try: + import cursor +except: + pass + +from .lib.functions import ( + get_machine_default_ip, + ip2long, + long2ip, + format_time +) +from .lib.color import Color +from .lib.logos import Logo +from itertools import product +from concurrent.futures import ThreadPoolExecutor + + +class SipAstAMI: + def __init__(self): + self.ip = "" + self.host = "" + self.route = "" + self.rport = "5038" + self.proto = "TCP" + self.verbose = "0" + self.file = "" + self.nocolor = "" + self.ofile = "" + self.random = 0 + self.localip = "" + self.timeout = 5 + self.threads = 200 + self.user = "admin" + self.pwd = "amp111" + self.cmd = "" + + self.found = [] + self.ipsfound = [] + self.line = ["-", "\\", "|", "/"] + self.pos = 0 + self.quit = False + self.totaltime = 0 + self.fail = 0 + self.cvelist = [] + self.cve = [] + + self.c = Color() + + def start(self): + if self.verbose == None: + self.verbose = 0 + + supported_protos = ["TCP", "TLS"] + + if self.nocolor == 1: + self.c.ansy() + + self.proto = self.proto.upper() + if self.proto == "TCP|TLS": + self.proto = "ALL" + + # check protocol + if self.proto != "ALL" and self.proto not in supported_protos: + print(f"{self.c.BRED}Protocol {self.proto} is not supported") + print(self.c.WHITE) + sys.exit() + + # my IP address + local_ip = self.localip + if self.localip == "": + try: + local_ip = get_machine_default_ip() + self.localip = local_ip + except: + print(f"{self.c.BRED}Error getting local IP") + print( + f"{self.c.BWHITE}Try with {self.c.BYELLOW}-local-ip{self.cBWHITE} param" + ) + print(self.c.WHITE) + exit() + + logo = Logo("astami") + logo.print() + + # create a list of protocols + protos = [] + if self.proto == "TCP" or self.proto == "ALL": + protos.append("TCP") + if self.proto == "TLS" or self.proto == "ALL": + protos.append("TLS") + + # create a list of ports + ports = [] + for p in self.rport.split(","): + m = re.search(r"([0-9]+)-([0-9]+)", p) + if m: + for x in range(int(m.group(1)), int(m.group(2)) + 1): + ports.append(x) + else: + ports.append(p) + + # create a list of IP addresses + if self.file != "": + try: + with open(self.file) as f: + line = f.readline() + + while line: + error = 0 + line = line.replace("\n", "") + + try: + if self.quit == False: + try: + ip = socket.gethostbyname(line) + self.ip = IP(ip, make_net=True) + except: + try: + self.ip = IP(line, make_net=True) + + except: + if line.find("-") > 0: + val = line.split("-") + start_ip = val[0] + end_ip = val[1] + self.ip = line + + error = 1 + + ips = [] + + if error == 0: + hosts = list( + ipaddress.ip_network(str(self.ip)).hosts() + ) + + if hosts == []: + hosts.append(self.ip) + + last = len(hosts) - 1 + start_ip = hosts[0] + end_ip = hosts[last] + + ipini = int(ip2long(str(start_ip))) + ipend = int(ip2long(str(end_ip))) + + for i in range(ipini, ipend + 1): + if ( + i != self.localip + and long2ip(i)[-2:] != ".0" + and long2ip(i)[-4:] != ".255" + ): + ips.append(long2ip(i)) + + self.prepare_scan(ips, ports, protos, self.ip) + except: + pass + + line = f.readline() + + f.close() + except: + print(f"{self.c.RED}Error reading file {self.file}") + print(self.c.WHITE) + exit() + else: + ips = [] + + for i in self.ip.split(","): + hosts = [] + error = 0 + + try: + if i.find("/") < 1: + i = socket.gethostbyname(i) + i = IP(i, make_net=True) + else: + i = IP(i, make_net=True) + except: + if i.find("-") > 0: + val = i.split("-") + start_ip = val[0] + end_ip = val[1] + + error = 1 + try: + if error == 0: + hlist = list(ipaddress.ip_network(str(i)).hosts()) + + if hlist == []: + hosts.append(i) + else: + for h in hlist: + hosts.append(h) + + last = len(hosts) - 1 + start_ip = hosts[0] + end_ip = hosts[last] + + ipini = int(ip2long(str(start_ip))) + ipend = int(ip2long(str(end_ip))) + iplist = i + + for i in range(ipini, ipend + 1): + if ( + i != self.localip + and long2ip(i)[-2:] != ".0" + and long2ip(i)[-4:] != ".255" + ): + ips.append(long2ip(i)) + + except: + if ips == []: + ips.append(self.ip) + iplist = self.ip + + self.prepare_scan(ips, ports, protos, iplist) + + + def prepare_scan(self, ips, ports, protos, iplist): + max_values = 100000 + + # threads to use + nthreads = self.threads + total = len(list(product(ips, ports, protos))) + if nthreads > total: + nthreads = total + if nthreads < 1: + nthreads = 1 + + print(f"{self.c.BWHITE}[✓] IP/Network: {self.c.GREEN}{str(iplist)}") + print(f"{self.c.BWHITE}[✓] Remote port: {self.c.GREEN}{self.rport}") + if self.proto == "ALL": + print(f"{self.c.BWHITE}[✓] Protocols: {self.c.GREEN}TCP, TLS") + else: + print(f"{self.c.BWHITE}[✓] Protocol: {self.c.GREEN}{self.proto.upper()}") + if self.ofile != "": + print( + f"{self.c.BWHITE}[✓] Saving logs info file: {self.c.CYAN}{self.ofile}" + ) + if self.random == 1: + print(f"{self.c.BWHITE}[✓] Random hosts: {self.c.GREEN}True") + print(f"{self.c.BWHITE}[✓] Used threads: {self.c.GREEN}{str(nthreads)}") + print(f"{self.c.BWHITE}[✓] Username: {self.c.GREEN}{self.user}") + print(f"{self.c.BWHITE}[✓] Password: {self.c.GREEN}{self.pwd}") + print(self.c.WHITE) + + values = product(ips, ports, protos) + values2 = [] + count = 0 + + iter = (a for a in enumerate(values)) + total = sum(1 for _ in iter) + + values = product(ips, ports, protos) + + start = time.time() + + for i, val in enumerate(values): + if self.quit == False: + if count < max_values: + values2.append(val) + count += 1 + + if count == max_values or i + 1 == total: + try: + with ThreadPoolExecutor(max_workers=nthreads) as executor: + if self.quit == False: + if self.random == 1: + random.shuffle(values2) + + for j, val2 in enumerate(values2): + if self.quit == False: + val_ipaddr = val2[0] + val_port = int(val2[1]) + val_proto = val2[2] + + if ( + self.proto == "ALL" + and self.rport == "5060" + and val_proto == "TLS" + ): + val_port = 5061 + + executor.submit( + self.scan_host, + val_ipaddr, + val_port, + val_proto, + ) + try: + cursor.show() + except: + pass + except KeyboardInterrupt: + print(f"{self.c.RED}\nYou pressed Ctrl+C!") + try: + cursor.show() + except: + pass + print(self.c.WHITE) + self.quit = True + + values2.clear() + count = 0 + + end = time.time() + self.totaltime = int(end - start) + + self.found.sort() + self.ipsfound.sort() + self.print() + + + def callback_response(self, response): + return response + + + def scan_host(self, ipaddr, port, proto): + if self.quit == False: + try: + cursor.hide() + except: + pass + print( + f"{self.c.BYELLOW}[{self.line[self.pos]}] Scanning {ipaddr}:{str(port)}/{proto}{' '.ljust(100)}", + end="\r", + ) + self.pos += 1 + if self.pos > 3: + self.pos = 0 + + amiclient = AMIClient(address=ipaddr,port=port) + + try: + if self.verbose == 2: + print(f"\n{self.c.BWHITE}login(username='{self.user}',secret='{self.pwd}')") + + con = amiclient.login(username=self.user,secret=self.pwd, callback=self.callback_response) + + response = con.response + + if self.verbose == 2: + print(f"\n{self.c.WHITE}{response}") + + message = '' + if hasattr(response, 'keys') and isinstance(response.keys, dict): + message = response.keys.get('Message', '') + + rcolor = self.c.BBLUE + + if response.status == "Error": + rcolor = self.c.BRED + else: + rcolor = self.c.BGREEN + + if self.verbose > 0: + print(f"{self.c.BYELLOW}[{self.line[self.pos]}] Scanning {ipaddr}:{str(port)}/TCP ... {rcolor}{message}{self.c.WHITE}{' '.ljust(100)}") + + output = '' + if response.status == "Success": + action = SimpleAction( + 'Command', + Command='core show version' + ) + resp = amiclient.send_action(action) + response = resp.response + + if hasattr(response, 'keys') and isinstance(response.keys, dict): + output = response.keys.get('Output', '') + + line = f"{ipaddr}###{str(port)}###{response.status}###{message}###{output}" + self.found.append(line) + + output = '' + if response.status == "Success" and self.cmd != '': + print(f'{self.c.WHITE}\n\n/--------------------/') + print(f"{self.c.BWHITE}Command: '{self.cmd}'") + + action = SimpleAction( + 'Command', + Command=f'{self.cmd}' + ) + resp = amiclient.send_action(action) + response = resp.response + + if self.verbose == 2: + print(f"{self.c.WHITE}{response}") + + if hasattr(response, 'keys') and isinstance(response.keys, dict): + output = response.keys.get('Output', '') + + if self.verbose < 2: + print(f"{self.c.WHITE}{output}") + + print('/--------------------/') + + except: + if self.verbose == 2: + print(f"{self.c.BYELLOW}[{self.line[self.pos]}] Scanning {ipaddr}:{str(port)}/TCP ... {self.c.RED}Connection Error{self.c.WHITE}{' '.ljust(100)}") + + pass + + amiclient.logoff() + cursor.show() + + + def print(self): + iplen = len("IP address") + polen = len("Port") + relen = len("Response") + velen = len("Version") + + for x in self.found: + (ip, port, status, res, ver) = x.split("###") + if len(ip) > iplen: + iplen = len(ip) + if len(port) > polen: + polen = len(port) + if len(res) > relen: + relen = len(res) + if len(ver) > velen: + velen = len(ver) + + tlen = iplen + polen + relen + velen + 11 + + print(self.c.WHITE) + + print( + f"{self.c.WHITE}+{'-' * (iplen + 2)}+{'-' * (polen + 2)}+{'-' * (relen + 2)}+{'-' * (velen + 2)}+" + ) + + print( + f"{self.c.WHITE}| {self.c.BWHITE}{'IP address'.ljust(iplen)}{self.c.WHITE} | {self.c.BWHITE}{'Port'.ljust(polen)}{self.c.WHITE} | {self.c.BWHITE}{'Response'.ljust(relen)}{self.c.WHITE} | {self.c.BWHITE}{'Version'.ljust(velen)}{self.c.WHITE} |" + ) + + print( + f"{self.c.WHITE}+{'-' * (iplen + 2)}+{'-' * (polen + 2)}+{'-' * (relen + 2)}+{'-' * (velen + 2)}+" + ) + + if self.ofile != "": + f = open(self.ofile, "a+") + + if len(self.found) == 0: + print(f"{self.c.WHITE}| {self.c.WHITE}{'Nothing found'.ljust(tlen - 2)} |") + else: + for x in self.found: + (ip, port, status, res, ver) = x.split("###") + + rcolor = self.c.BBLUE + + if status == "Error": + rcolor = self.c.RED + + print( + f"{self.c.WHITE}| {self.c.BGREEN}{ip.ljust(iplen)}{self.c.WHITE} | {self.c.BMAGENTA}{port.ljust(polen)}{self.c.WHITE} | {rcolor}{res.ljust(relen)}{self.c.WHITE} | {self.c.BYELLOW}{ver.ljust(velen)}{self.c.WHITE} |" + ) + + if self.ofile != "": + f.write(f"{ip}:{port} => {res} ({self.user}/{self.pwd}) - {ver}\n") + + print( + self.c.WHITE + + "+" + + "-" * (iplen + 2) + + "+" + + "-" * (polen + 2) + + "+" + + "-" * (relen + 2) + + "+" + + "-" * (velen + 2) + + "+" + ) + + print(self.c.WHITE) + + print( + f"{self.c.BWHITE}Time elapsed: {self.c.YELLOW}{str(format_time(self.totaltime))}{self.c.WHITE}" + ) + print(self.c.WHITE) + + if self.ofile != "": + f.close() + + self.found.clear() + diff --git a/src/sippts/lib/logos.py b/src/sippts/lib/logos.py index 945cfd4..91ba46c 100644 --- a/src/sippts/lib/logos.py +++ b/src/sippts/lib/logos.py @@ -557,3 +557,24 @@ def get_logo(self, color='', local_version='', local_version_status='', local_cv |___/___|_| |_| |_| |___/ |_| \\___/_/ \\_\\_| \\__,_|\\_,_|_|_|_| .__/ |_| ''' + + if self.script == 'astami': + if rnd == 1: + return ''' +┏┓ • ┓ ┏┓┳┳┓┳ +┣┫┏╋┏┓┏┓┓┏┃┏ ┣┫┃┃┃┃ +┛┗┛┗┗ ┛ ┗┛┛┗ ┛┗┛ ┗┻ + ''' + elif rnd == 2: + return ''' +╔═╗┌─┐┌┬┐┌─┐┬─┐┬┌─┐┬┌─ ╔═╗╔╦╗╦ +╠═╣└─┐ │ ├┤ ├┬┘│└─┐├┴┐ ╠═╣║║║║ +╩ ╩└─┘ ┴ └─┘┴└─┴└─┘┴ ┴ ╩ ╩╩ ╩╩ + ''' + elif rnd == 3: + return ''' + _ _ _ _ _ __ __ ___ + /_\\ __| |_ ___ _ _(_)__| |__ /_\\ | \\/ |_ _| + / _ \\ (_-< _/ -_) '_| (_-< / / / _ \\| |\\/| || | + /_/ \\_\\/__/\\__\\___|_| |_/__/_\\_\\ /_/ \\_\\_| |_|___| + ''' diff --git a/src/sippts/lib/params.py b/src/sippts/lib/params.py index bca23cd..a701c18 100644 --- a/src/sippts/lib/params.py +++ b/src/sippts/lib/params.py @@ -26,7 +26,7 @@ BWHITE = "\033[1;37;20m" WHITE = "\033[0;37;20m" -local_version = "4.0.15" +local_version = "4.1.0" def get_sippts_args(): @@ -163,6 +163,144 @@ def get_sippts_args(): "-h", "--help", help="Show this help", dest="help", action="count" ) + ################ + # Asterisk AMI # + ################ + parser_astami = subparsers.add_parser( + "astami", + formatter_class=argparse.RawTextHelpFormatter, + help="Asterisk AMI pentest", + add_help=False, + description=RED + + Logo("astami").get_logo() + + YELLOW + + """ + Module """ + + BYELLOW + + """astami""" + + YELLOW + + """ is a module to scan and audit the Asterisk AMI service.""" + + WHITE, + epilog=""" +Usage examples: +""" + + YELLOW + + """ Searching for AMI services and devices with default ports (5038/tcp) on the local network +""" + + WHITE + + """ sippts astami -i 192.168.0.0/24 +""" + ) + + target = parser_astami.add_argument_group("Target") + target.add_argument( + "-i", + metavar="IP|HOST", + type=str, + help="Host/IP address/network (ex: mysipserver.com | 192.168.0.10 | 192.168.0.0/24)", + dest="ipaddr", + ) + target.add_argument( + "-f", + metavar="FILE", + type=str, + help="File with several IPs or network ranges", + dest="file", + default="", + ) + target.add_argument( + "-r", + metavar="REMOTE_PORT", + type=str, + help="Ports to scan. Ex: 5038 | 5038,5039 | 5030-5060 | 5038,5039,5070-5080 (default: 5038)", + dest="rport", + default="5038", + ) + target.add_argument( + "-p", + metavar="PROTOCOL", + type=str.upper, + help="Protocol: tcp|tls|all (default: tcp)", + dest="proto", + choices=["TCP", "TLS", "ALL"], + default="tcp", + ) + target.add_argument( + "-c", + metavar="COMMAND", + type=str, + help="Send command to AMI", + dest="cmd", + default="", + ) + + auth = parser_astami.add_argument_group("Auth") + auth.add_argument( + "-user", + metavar="AUTH_USER", + type=str, + help="Authentication user (default: admin)", + dest="user", + default="admin", + ) + auth.add_argument( + "-pass", + metavar="AUTH_PASS", + type=str, + help="Authentication password (default: amp111)", + dest="pwd", + default="amp111", + ) + + log = parser_astami.add_argument_group("Log") + log.add_argument("-v", help="Increase verbosity", dest="verbose", action="count") + log.add_argument( + "-vv", help="Increase more verbosity", dest="more_verbose", action="count" + ) + log.add_argument( + "-nocolor", help="Show result without colors", dest="nocolor", action="count" + ) + log.add_argument( + "-o", + metavar="FILE", + type=str, + help="Save data into a log file", + dest="ofile", + default="", + ) + + other = parser_astami.add_argument_group("Other options") + other.add_argument( + "-th", + metavar="THREADS", + type=int, + help="Number of threads (default: 200)", + dest="threads", + default=200, + ) + other.add_argument( + "-t", + metavar="TIMEOUT", + type=int, + help="Sockets timeout (default: 5)", + dest="timeout", + default=5, + ) + other.add_argument( + "-random", help="Randomize target hosts", dest="random", action="count" + ) + other.add_argument( + "-local-ip", + metavar="IP", + type=str, + help="Set local IP address (by default try to get it)", + dest="localip", + default="", + ) + other.add_argument( + "-h", "--help", help="Show this help", dest="help", action="count" + ) + ################ # scan command # ################ @@ -3129,6 +3267,11 @@ def get_sippts_args(): modulepath + "sipsniff.py", "sipsniff.py", ) + download_file( + giturl + "src/sippts/astami.py", + modulepath + "astami.py", + "astami.py", + ) download_file( giturl + "src/sippts/wssend.py", modulepath + "wssend.py", "wssend.py" ) @@ -3194,6 +3337,57 @@ def get_sippts_args(): SPOOF = args.spoof return COMMAND, BASIC, DIGEST, LEAK, SPOOF + elif COMMAND == "astami": + if args.help == 1: + parser_astami.print_help() + exit() + if not args.ipaddr and not args.file: + parser_astami.print_help() + print(RED) + print("Param error!") + print( + f"{BWHITE}{COMMAND}:{WHITE} Mandatory params: {GREEN}-i {WHITE} or {GREEN}-f " + ) + print(f"{WHITE}Use {CYAN}sippts {COMMAND} -h/--help{WHITE} for help") + exit() + + IPADDR = args.ipaddr + HOST = args.ipaddr + PORT = args.rport + PROTO = args.proto + THREADS = args.threads + TIMEOUT = args.timeout + VERBOSE = args.verbose + MORE_VERBOSE = args.more_verbose + if MORE_VERBOSE == 1: + VERBOSE = 2 + FILE = args.file + NOCOLOR = args.nocolor + OFILE = args.ofile + RANDOM = args.random + LOCALIP = args.localip + USER = args.user + PWD = args.pwd + CMD = args.cmd + + return ( + COMMAND, + IPADDR, + HOST, + PORT, + PROTO, + THREADS, + TIMEOUT, + VERBOSE, + FILE, + NOCOLOR, + OFILE, + RANDOM, + LOCALIP, + USER, + PWD, + CMD + ) elif COMMAND == "scan": if args.help == 1: parser_scan.print_help() From fd87325daaf6f50981eab3789afde904d560154a Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Wed, 25 Sep 2024 12:34:08 +0200 Subject: [PATCH 2/2] version 4.1.0 --- setup.py | 7 ++++--- src/sippts/arpspoof.py | 2 +- src/sippts/rtcpbleed.py | 2 +- src/sippts/rtpbleed.py | 2 +- src/sippts/rtpbleedflood.py | 2 +- src/sippts/rtpbleedinject.py | 2 +- src/sippts/sipdigestcrack.py | 2 +- src/sippts/sipdigestleak.py | 2 +- src/sippts/sipdump.py | 2 +- src/sippts/sipenumerate.py | 2 +- src/sippts/sipexten.py | 2 +- src/sippts/sipflood.py | 2 +- src/sippts/sipinvite.py | 2 +- src/sippts/sippcapdump.py | 2 +- src/sippts/sipping.py | 2 +- src/sippts/siprcrack.py | 2 +- src/sippts/sipscan.py | 10 +++++----- src/sippts/sipsend.py | 2 +- src/sippts/sipsniff.py | 2 +- src/sippts/wssend.py | 2 +- version | 2 +- 21 files changed, 28 insertions(+), 27 deletions(-) diff --git a/setup.py b/setup.py index 2a779e5..c7ccf51 100755 --- a/setup.py +++ b/setup.py @@ -9,8 +9,8 @@ if __name__ == "__main__": setup(scripts=scripts, name='SIPPTS', - author='Jose Luis Verdeguer - Pepelux', - version='4.0', + author='Jose Luis Verdeguer aka Pepelux', + version='4.1', install_requires=[ 'netifaces', 'requests', @@ -18,7 +18,8 @@ 'scapy', 'pyshark', 'websocket-client', - 'rel' + 'rel', + 'asterisk-ami' ], extra_requires=[ 'cursor', diff --git a/src/sippts/arpspoof.py b/src/sippts/arpspoof.py index 875ea25..ffa17a5 100644 --- a/src/sippts/arpspoof.py +++ b/src/sippts/arpspoof.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/rtcpbleed.py b/src/sippts/rtcpbleed.py index f697bf5..2dbc4ab 100644 --- a/src/sippts/rtcpbleed.py +++ b/src/sippts/rtcpbleed.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/rtpbleed.py b/src/sippts/rtpbleed.py index adfc3e9..b2b25dc 100644 --- a/src/sippts/rtpbleed.py +++ b/src/sippts/rtpbleed.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/rtpbleedflood.py b/src/sippts/rtpbleedflood.py index eb4b787..6d7b8a0 100644 --- a/src/sippts/rtpbleedflood.py +++ b/src/sippts/rtpbleedflood.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/rtpbleedinject.py b/src/sippts/rtpbleedinject.py index 4e20c31..47bf115 100644 --- a/src/sippts/rtpbleedinject.py +++ b/src/sippts/rtpbleedinject.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipdigestcrack.py b/src/sippts/sipdigestcrack.py index f523ec1..ee995c6 100644 --- a/src/sippts/sipdigestcrack.py +++ b/src/sippts/sipdigestcrack.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipdigestleak.py b/src/sippts/sipdigestleak.py index 660c769..3382aeb 100644 --- a/src/sippts/sipdigestleak.py +++ b/src/sippts/sipdigestleak.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipdump.py b/src/sippts/sipdump.py index 904b5ea..b0cedd8 100644 --- a/src/sippts/sipdump.py +++ b/src/sippts/sipdump.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipenumerate.py b/src/sippts/sipenumerate.py index 380616c..3615aa2 100644 --- a/src/sippts/sipenumerate.py +++ b/src/sippts/sipenumerate.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipexten.py b/src/sippts/sipexten.py index c6fcc8b..0200bec 100644 --- a/src/sippts/sipexten.py +++ b/src/sippts/sipexten.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipflood.py b/src/sippts/sipflood.py index ce755e5..cb037d2 100644 --- a/src/sippts/sipflood.py +++ b/src/sippts/sipflood.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipinvite.py b/src/sippts/sipinvite.py index 5f4cdd2..4aaae59 100644 --- a/src/sippts/sipinvite.py +++ b/src/sippts/sipinvite.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sippcapdump.py b/src/sippts/sippcapdump.py index b3dc7b4..97cdc46 100644 --- a/src/sippts/sippcapdump.py +++ b/src/sippts/sippcapdump.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipping.py b/src/sippts/sipping.py index a173cae..b2848d4 100644 --- a/src/sippts/sipping.py +++ b/src/sippts/sipping.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/siprcrack.py b/src/sippts/siprcrack.py index 3fb7caf..80fe691 100644 --- a/src/sippts/siprcrack.py +++ b/src/sippts/siprcrack.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipscan.py b/src/sippts/sipscan.py index 60ad571..7ca2424 100644 --- a/src/sippts/sipscan.py +++ b/src/sippts/sipscan.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" @@ -236,8 +236,9 @@ def start(self): print(self.c.WHITE) exit() else: + ips = [] + for i in self.ip.split(","): - ips = [] hosts = [] error = 0 @@ -291,13 +292,12 @@ def start(self): f"{self.c.GREEN}\n [-] ... Pong {str(long2ip(i))}{self.c.WHITE}" ) ips.append(long2ip(i)) - - self.prepare_scan(ips, ports, protos, iplist) except: if ips == []: ips.append(self.ip) iplist = self.ip - self.prepare_scan(ips, ports, protos, iplist) + + self.prepare_scan(ips, ports, protos, iplist) def prepare_scan(self, ips, ports, protos, iplist): max_values = 100000 diff --git a/src/sippts/sipsend.py b/src/sippts/sipsend.py index 338bf1e..0663d67 100644 --- a/src/sippts/sipsend.py +++ b/src/sippts/sipsend.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/sipsniff.py b/src/sippts/sipsniff.py index c78ca45..e6fcfc0 100644 --- a/src/sippts/sipsniff.py +++ b/src/sippts/sipsniff.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/src/sippts/wssend.py b/src/sippts/wssend.py index 09daa0a..0c466cc 100644 --- a/src/sippts/wssend.py +++ b/src/sippts/wssend.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- __author__ = "Jose Luis Verdeguer" -__version__ = "4.0" +__version__ = "4.1" __license__ = "GPL" __copyright__ = "Copyright (C) 2015-2024, SIPPTS" __email__ = "pepeluxx@gmail.com" diff --git a/version b/version index af253c1..ee74734 100644 --- a/version +++ b/version @@ -1 +1 @@ -4.0.15 +4.1.0