Skip to content

Commit efc26ed

Browse files
committed
v1.1.3
1 parent aee6570 commit efc26ed

File tree

3 files changed

+96
-67
lines changed

3 files changed

+96
-67
lines changed

CHANGELOG.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,9 @@ I modified the entire script, leaving the functions in a class, better structuri
5151
## [v1.1.2] - 2020-10-21
5252

5353
- Formatting results
54-
- Added loading bar
54+
- Added loading bar
55+
56+
## [v1.1.3] - 2020-10-21
57+
58+
- Formatting results
59+
- Bug fixes

astsu.py

+86-65
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,32 @@
88
from threading import Thread
99
from modules import service_detection,os_detection
1010
from progress.bar import ChargingBar
11+
from colorama import Fore
1112
import rpycolors
1213

1314
old_print = print
1415
print = rpycolors.Console().print
1516

17+
white = Fore.WHITE
18+
black = Fore.BLACK
19+
red = Fore.RED
20+
reset = Fore.RESET
21+
blue = Fore.BLUE
22+
cyan = Fore.CYAN
23+
yellow = Fore.YELLOW
24+
green = Fore.GREEN
25+
magenta = Fore.MAGENTA
26+
27+
OPEN_PORT = 80
28+
1629
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
1730

31+
1832
clear = lambda:os.system('cls' if os.name == 'nt' else 'clear')
1933

20-
__version__ = "v1.1.2"
34+
__version__ = "v1.1.3"
2135

22-
def print_figlet():
36+
def print_figlet(sleep=True):
2337
clear()
2438
print(textwrap.dedent(
2539
f'''
@@ -38,10 +52,11 @@ def print_figlet():
3852
'''
3953
))
4054

41-
try:
42-
time.sleep(4.5)
43-
except KeyboardInterrupt:
44-
pass
55+
if sleep:
56+
try:
57+
time.sleep(4.5)
58+
except KeyboardInterrupt:
59+
pass
4560

4661
class Scanner:
4762
def __init__(self,target=None,my_ip=None,protocol=None,timeout=5,interface=None):
@@ -120,15 +135,15 @@ def handle_port_response(self,ports_saved,response,port):
120135
open_or_filtered = ports_saved['open/filtered']
121136

122137
if response[port] == "Closed":
123-
print(f"[[red]-[/red]]Port: {port} - Closed")
138+
logging.warning(f"Port: {port} - Closed")
124139
elif response[port] == "Open":
125-
print(f"[[green]+[/green]]Port: {port} - Open")
140+
logging.info(f"Port: {port} - Open")
126141
open_ports.append(port)
127142
elif response[port] == "Filtered":
128-
print(f"[[cyan]*[/cyan]]Port: {port} - Filtered")
143+
logging.warning(f"Port: {port} - Filtered")
129144
filtered_ports.append(port)
130145
elif response[port] == "Open/Filtered":
131-
print(f"[[green]+[/green]]Port: {port} - Open/Filtered")
146+
logging.info(f"Port: {port} - Open/Filtered")
132147
open_or_filtered.append(port)
133148
else:
134149
pass
@@ -139,8 +154,8 @@ def handle_port_response(self,ports_saved,response,port):
139154
open_or_filtered
140155
)
141156

142-
def common_scan(self,stealth=None):
143-
print_figlet()
157+
def common_scan(self,stealth=None,sv=None):
158+
# print_figlet()
144159

145160
if not self.protocol:
146161
protocol = "TCP"
@@ -153,12 +168,12 @@ def common_scan(self,stealth=None):
153168
open_or_filtered = []
154169

155170
if stealth:
156-
print("[[cyan]*[/cyan]]Starting - Stealth TCP Port Scan\n")
171+
logging.info("Starting - Stealth TCP Port Scan\n")
157172
else:
158173
if protocol == "TCP":
159-
print("[[cyan]*[/cyan]]Starting - TCP Connect Port Scan\n")
174+
logging.info("Starting - TCP Connect Port Scan\n")
160175
elif protocol == "UDP":
161-
print("[[cyan]*[/cyan]]Starting - UDP Port Scan\n")
176+
logging.info("Starting - UDP Port Scan\n")
162177
else:
163178
pass
164179

@@ -178,16 +193,17 @@ def common_scan(self,stealth=None):
178193
if open_ports or filtered_ports or open_or_filtered:
179194
total = len(open_ports) + len(filtered_ports) + len(open_or_filtered)
180195

181-
print(f"\n[[green]+[/green]]Founded {total} ports!")
196+
print("")
197+
logging.info(f"Founded {total} ports!")
182198

183199
for port in open_ports:
184-
print(f"[[green]+[/green]]Port: {port} - Open")
200+
logging.info(f"Port: {port} - Open")
185201
for port in filtered_ports:
186-
print(f"[[/cyan]*[/cyan]]Port: {port} - Filtered")
202+
logging.warning(f"Port: {port} - Filtered")
187203
for port in open_or_filtered:
188-
print(f"[[green]+[/green]]Port: {port} - Open/Filtered")
204+
logging.info(f"Port: {port} - Open/Filtered")
189205

190-
def range_scan(self,start,end=None,stealth=None):
206+
def range_scan(self,start,end=None,stealth=None,sv=None):
191207
open_ports = []
192208
filtered_ports = []
193209
open_or_filtered = []
@@ -196,13 +212,13 @@ def range_scan(self,start,end=None,stealth=None):
196212
if not protocol:
197213
protocol = "TCP"
198214

199-
print_figlet()
215+
# print_figlet()
200216
if protocol == "TCP" and stealth:
201-
print("[[cyan]*[/cyan]]Starting - TCP Stealth Port Scan\n")
217+
logging.info("Starting - TCP Stealth Port Scan\n")
202218
elif protocol == "TCP" and not stealth:
203-
print("[[cyan]*[/cyan]]Starting - TCP Connect Port Scan\n")
219+
logging.info("Starting - TCP Connect Port Scan\n")
204220
elif protocol == "UDP":
205-
print("[[cyan]*[/cyan]]Starting - UDP Port Scan\n")
221+
logging.info("Starting - UDP Port Scan\n")
206222
else:
207223
pass
208224

@@ -222,15 +238,15 @@ def range_scan(self,start,end=None,stealth=None):
222238
if open_ports or filtered_ports or open_or_filtered:
223239
total = len(open_ports) + len(filtered_ports) + len(open_or_filtered)
224240

225-
print_figlet()
226-
print(f"[[green]+[/green]]Founded {total} ports!")
241+
# print_figlet()
242+
logging.info(f"Founded {total} ports!")
227243

228244
for port in open_ports:
229-
print(f"[[green]+[/green]]Port: {port} - Open")
245+
logging.info(f"Port: {port} - Open")
230246
for port in filtered_ports:
231-
print(f"[[cyan]*[/cyan]]Port: {port} - Filtered")
247+
logging.warning(f"Port: {port} - Filtered")
232248
for port in open_or_filtered:
233-
print(f"[[green]+[/green]]Port: {port} - Open/Filtered")
249+
logging.info(f"Port: {port} - Open/Filtered")
234250
else:
235251
scan = self.port_scan(stealth)
236252

@@ -246,25 +262,24 @@ def range_scan(self,start,end=None,stealth=None):
246262
if open_ports or filtered_ports or open_or_filtered:
247263
total = len(open_ports) + len(filtered_ports) + len(open_or_filtered)
248264

249-
print_figlet()
250-
print(f"[[green]+[/green]]Founded {total} ports!")
265+
# print_figlet()
266+
logging.info(f"Founded {total} ports!")
251267

252268
for port in open_ports:
253-
print(f"[[green]+[/green]]Port: {port} - Open")
269+
logging.info(f"Port: {port} - Open")
254270
for port in filtered_ports:
255-
print(f"[[cyan]*[/cyan]]Port: {port} - Filtered")
271+
logging.debug(f"Port: {port} - Filtered")
256272
for port in open_or_filtered:
257-
print(f"[[green]+[/green]]Port: {port} - Open/Filtered")
273+
logging.info(f"Port: {port} - Open/Filtered")
258274

259275
def os_scan(self):
260-
print_figlet()
261-
262276
target_os = os_detection.scan(self.target)
263277

264278
if target_os:
265-
print(f"[[green]+[/green]]Target OS: {target_os}")
279+
print("")
280+
logging.info(f"Target OS: {target_os}")
266281
else:
267-
print("[[red]-[/red]]Error when scanning OS")
282+
logging.warning("[[red]-[/red]]Error when scanning OS")
268283

269284
def send_icmp(self,target, result, index):
270285
# print(f"[+]Sending ICMP request to {target}")
@@ -280,16 +295,16 @@ def discover_net(self,ip_range=24):
280295
protocol = self.protocol
281296
base_ip = self.my_ip
282297

283-
print_figlet()
298+
# print_figlet()
284299

285300
if not protocol:
286301
protocol = "ICMP"
287302
else:
288303
if protocol != "ICMP":
289-
print(f"[[red]![/red]]Warning: {protocol} is not supported by discover_net function! Changed to ICMP")
304+
logging.warning(f"Warning: {protocol} is not supported by discover_net function! Changed to ICMP")
290305

291306
if protocol == "ICMP":
292-
print("[[red]+[/red]]Starting - Discover Hosts Scan")
307+
logging.info("Starting - Discover Hosts Scan")
293308

294309
base_ip = base_ip.split('.')
295310
base_ip = f"{str(base_ip[0])}.{str(base_ip[1])}.{str(base_ip[2])}.0/{str(ip_range)}"
@@ -317,15 +332,16 @@ def discover_net(self,ip_range=24):
317332
hosts_found = [i for i in results if i is not None]
318333

319334
if not hosts_found:
320-
print('[[red]-[/red]]Not found any host')
335+
logging.warn('[[red]-[/red]]Not found any host')
321336
else:
322-
print(f'\n[[green]+[/green]]{len(hosts_found)} hosts founded')
337+
print("")
338+
logging.info(f'{len(hosts_found)} hosts founded')
323339
for host in hosts_found:
324-
print(f'[[green]+[/green]]Host found: {host}')
340+
logging.info(f'Host found: {host}')
325341

326342
return True
327343
else:
328-
print("[[red]-[/red]]Invalid protocol for this scan")
344+
logging.critical("[[red]-[/red]]Invalid protocol for this scan")
329345

330346
return False
331347

@@ -335,21 +351,39 @@ def arguments():
335351
parser.add_argument('-sC',"--scan-common",help="Scan common ports",action="count")
336352
parser.add_argument('-sA',"--scan-all",help="Scan all ports",action="count")
337353
parser.add_argument('-sO',"--scan-os",help="Scan OS",action="count")
338-
parser.add_argument('-sP',"--scan-port",help="Scan defined port",nargs='+',type=int)
354+
parser.add_argument('-sP',"--scan-port",help="Scan defined port")
355+
parser.add_argument('-sV',"--scan-service",help="Try to detect service running")
339356
parser.add_argument('-d',"--discover",help="Discover hosts in the network",action="count")
340357
parser.add_argument('-p',"--protocol",help="Protocol to use in the scans. ICMP,UDP,TCP.",type=str,choices=['ICMP','UDP','TCP'],default=None)
341358
parser.add_argument('-i',"--interface",help="Interface to use",default=None)
342359
parser.add_argument('-t',"--timeout",help="Timeout to each request",default=5,type=int)
343360
parser.add_argument('-st',"--stealth",help="Use Stealth scan method (TCP)",action="count")
361+
parser.add_argument('-v',"--verbose",action="count")
344362
parser.add_argument('Target',nargs='?',default=None)
345363

346364
args = parser.parse_args()
347365

366+
if not args.discover and not args.Target:
367+
sys.exit(parser.print_help())
368+
369+
if not args.scan_common and not args.scan_all and not args.scan_os and not args.scan_port and not args.discover:
370+
sys.exit(parser.print_help())
371+
348372
return (args, parser)
349373

350374
if __name__ == '__main__':
351375
args, parser = arguments()
352376

377+
del logging.root.handlers[:]
378+
379+
logging.addLevelName(logging.CRITICAL, f"[{red}!!{reset}]")
380+
logging.addLevelName(logging.WARNING, f"[{red}!{reset}]")
381+
logging.addLevelName(logging.INFO, f"[{cyan}*{reset}]")
382+
logging.addLevelName(logging.DEBUG, f"[{cyan}**{reset}]")
383+
logging.basicConfig(format="%(levelname)s%(message)s", level=logging.DEBUG if args.verbose else logging.INFO)
384+
385+
print_figlet()
386+
353387
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
354388
s.connect(("8.8.8.8",80))
355389
ip = s.getsockname()[0]
@@ -358,35 +392,22 @@ def arguments():
358392
scanner = Scanner(target=args.Target,my_ip=ip,protocol=args.protocol,timeout=args.timeout,interface=args.interface)
359393

360394
if args.scan_common:
361-
if not args.Target:
362-
sys.exit(parser.print_help())
363-
364-
scanner.common_scan(stealth=args.stealth)
395+
scanner.common_scan(stealth=args.stealth,sv=args.scan_service)
365396

366397
elif args.scan_all:
367-
if not args.Target:
368-
sys.exit(parser.print_help())
369-
370-
scanner.range_scan(start=0,end=65535,stealth=args.stealth)
371-
372-
elif args.scan_os:
373-
if not args.Target:
374-
sys.exit(parser.print_help())
375-
376-
scanner.os_scan()
398+
scanner.range_scan(start=0,end=65535,stealth=args.stealth,sv=args.scan_service)
377399

378400
elif args.scan_port:
379-
if not args.Target:
380-
sys.exit(parser.print_help())
381-
382401
try:
383-
scanner.range_scan(start=args.scan_port[0],end=args.scan_port[1],stealth=args.stealth)
402+
scanner.range_scan(start=int(args.scan_port.split(',')[0]),end=int(args.scan_port.split(',')[1]),stealth=args.stealth,sv=args.scan_service)
384403
except:
385-
scanner.range_scan(start=args.scan_port,stealth=args.stealth)
404+
scanner.range_scan(start=args.scan_port,stealth=args.stealth,sv=args.scan_service)
386405

387406
elif args.discover:
388407
scanner.discover_net()
389408

390409
else:
391410
parser.print_help()
392411

412+
if args.scan_os:
413+
scanner.os_scan()

requirements.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
scapy>=2.4.3
2-
nmap_vscan>=1.1.0
2+
nmap_vscan>=1.1.0
3+
progress>=1.5
4+
rpycolors>=0.0.5
5+
colorama>=0.4.4

0 commit comments

Comments
 (0)