diff --git a/CyberScan.py b/CyberScan.py index 9bb7609..2bf1a22 100644 --- a/CyberScan.py +++ b/CyberScan.py @@ -1,5 +1,5 @@ -#!/usr/bin/python -# -*- coding utf-8 -*- +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License. @@ -21,169 +21,137 @@ import platform import argparse import logging +# Suppress Scapy warnings logging.getLogger("scapy.runtime").setLevel(logging.ERROR) import time import socket import pygeoip -from scapy import * -from scapy.all import * +# scapy and helper libs +try: + # Try to use an installed scapy (preferred) + from scapy.all import * + SCAPY_AVAILABLE = True +except Exception: + # Fallback: if a local scapy package exists, add it to path but don't import + # immediately (the bundled copy in this repo may be Python2-only). + SCAPY_AVAILABLE = False + SCAPY_PATH = os.path.join(os.path.dirname(__file__), 'scapy') + if os.path.isdir(SCAPY_PATH) and SCAPY_PATH not in sys.path: + sys.path.insert(0, SCAPY_PATH) + + # Provide minimal stubs so the rest of the script (e.g., -h) can run. + def srp(*a, **k): + raise RuntimeError('scapy is not available') + + def sr(*a, **k): + raise RuntimeError('scapy is not available') + + def rdpcap(*a, **k): + return [] + + def hexdump(*a, **k): + return '' + + class _Layer: pass + IP = ICMP = TCP = UDP = _Layer + from libs.colorama import * from libs import FileUtils - if platform.system() == 'Windows': - from libs.colorama.win32 import * + from libs.colorama.win32 import * -__version__ = '1.1.1' -__description__ = '''\ - ___________________________________________ +_version_ = '1.1.1' +_description_ = f''' + ___________________________________________ - CyberScan | v.''' + __version__ + ''' - Author: BEN ALI Mohamed - ___________________________________________ + CyberScan | v.{_version_} + Author: BEN ALI Mohamed + ___________________________________________ ''' +def write(string): + # simple wrapper to ensure flushed output + print(string, flush=True) + def header(): - MAYOR_VERSION = 1 - MINOR_VERSION = 1 - REVISION = 1 - VERSION = { - "MAYOR_VERSION": MAYOR_VERSION, - "MINOR_VERSION": MINOR_VERSION, - "REVISION": REVISION - } - - PROGRAM_BANNER = open(FileUtils.buildPath('banner.txt')).read().format(**VERSION) - message = Style.BRIGHT + Fore.RED + PROGRAM_BANNER + Style.RESET_ALL - write(message) + VERSION = {"MAYOR_VERSION": 1, "MINOR_VERSION": 1, "REVISION": 1} + try: + banner_path = FileUtils.buildPath('banner.txt') + with open(banner_path, 'r', encoding='utf-8') as f: + program_banner = f.read().format(**VERSION) + except Exception: + program_banner = f"CyberScan | v.{_version_}\n" + message = program_banner + write(message) def usage(): - print (''' \033[92m CyberScan v.1.1.1 http://github/medbenali/CyberScan + print(''' \033[92m CyberScan v.1.1.1 http://github/medbenali/CyberScan It is the end user's responsibility to obey all applicable laws. It is just for server testing script. Your ip is visible. \n - ___________________________________________ - - CyberScan | v.1.1.1 - Author: BEN ALI Mohamed - ___________________________________________ - + ___________________________________________ + + CyberScan | v.1.1.1 + Author: BEN ALI Mohamed + ___________________________________________ - \n \033[0m''') - -def write(string): - if platform.system() == 'Windows': - sys.stdout.write(string) - sys.stdout.flush() - sys.stdout.write('\n') - sys.stdout.flush() - else: - sys.stdout.write(string + '\n') - sys.stdout.flush() - sys.stdout.flush() -def geo_ip(host): +\n \033[0m''') - try: - - rawdata = pygeoip.GeoIP('GeoLiteCity.dat') - data = rawdata.record_by_name(host) - country = data['country_name'] - city = data['city'] - longi = data['longitude'] - lat = data['latitude'] - time_zone = data['time_zone'] - area_code = data['area_code'] - country_code = data['country_code'] - region_code = data['region_code'] - dma_code = data['dma_code'] - metro_code = data['metro_code'] - country_code3 = data['country_code3'] - zip_code = data['postal_code'] - continent = data['continent'] - - print '[*] IP Address: ',host - print '[*] City: ',city - print '[*] Region Code: ',region_code - print '[*] Area Code: ',area_code - print '[*] Time Zone: ',time_zone - print '[*] Dma Code: ',dma_code - print '[*] Metro Code: ',metro_code - print '[*] Latitude: ',lat - print '[*] Longitude: ',longi - print '[*] Zip Code: ',zip_code - print '[*] Country Name: ',country - print '[*] Country Code: ',country_code - print '[*] Country Code3: ',country_code3 - print '[*] Continent: ',continent - - except : - print "[*] Please verify your ip !" - - - -def arp_ping(host): - print '[*] Starting CyberScan Ping ARP for %s' %(host) - ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=host), timeout=2) - ans.summary(lambda (s,r): r.sprintf("%Ether.src% %ARP.psrc%")) +def geo_ip(host): + try: + rawdata = pygeoip.GeoIP('GeoLiteCity.dat') + data = rawdata.record_by_name(host) + if not data: + print('[*] No GeoIP data found for', host) + return + print(f"[*] IP Address: {host}") + print(f"[*] City: {data.get('city')}") + print(f"[*] Region Code: {data.get('region_code')}") + print(f"[*] Country Name: {data.get('country_name')}") + except Exception as e: + print("[*] Please verify your ip !", str(e)) def icmp_ping(host): - print '[*] Starting CyberScan Ping ICMP for %s' %(host) - ans, unans =srp(IP(dst=host)/ICMP()) - ans.summary(lambda (s,r): r.sprint("%IP.src% is alive")) + print(f'[*] Starting CyberScan Ping ICMP for {host}') + # The tuple unpacking in lambda must be removed in Python 3 + ans, unans = srp(IP(dst=host)/ICMP(), verbose=0) + ans.summary(lambda s, r: r.sprintf("%IP.src% is alive")) def tcp_ping(host,dport): - ans, unans = sr(IP(dst=host)/TCP(dport,flags="S")) - ans.summary(lambda (s,r): r.sprintf("%IP.src% is alive")) + # The tuple unpacking in lambda must be removed in Python 3 + ans, unans = sr(IP(dst=host)/TCP(dport=int(dport),flags="S"), verbose=0) + ans.summary(lambda s, r: r.sprintf("%IP.src% is alive")) def udp_ping(host,port=0): - print '[*] Starting CyberScan Ping UDP for %s' %(host) - ans, unans = sr(IP(dst=host)/UDP(dport=port)) - ans.summary(lambda(s, r): r.sprintf("%IP.src% is alive")) + print(f'[*] Starting CyberScan Ping UDP for {host}') + # The tuple unpacking in lambda must be removed in Python 3 + ans, unans = sr(IP(dst=host)/UDP(dport=port), verbose=0) + ans.summary(lambda s, r: r.sprintf("%IP.src% is alive")) def superscan(host,start_port,end_port): - print '[*] CyberScan Port Scanner' + print('[*] CyberScan Port Scanner') open_ports = [] common_ports = { - '21': 'FTP', - '22': 'SSH', - '23': 'TELNET', - '25': 'SMTP', - '53': 'DNS', - '69': 'TFTP', - '80': 'HTTP', - '109': 'POP2', - '110': 'POP3', - '123': 'NTP', - '137': 'NETBIOS-NS', - '138': 'NETBIOS-DGM', - '139': 'NETBIOS-SSN', - '143': 'IMAP', - '156': 'SQL-SERVER', - '389': 'LDAP', - '443': 'HTTPS', - '546': 'DHCP-CLIENT', - '547': 'DHCP-SERVER', - '993': 'IMAP-SSL', - '995': 'POP3-SSL', - '2082': 'CPANEL', - '2083': 'CPANEL', - '2086': 'WHM/CPANEL', - '2087': 'WHM/CPANEL', - '3306' :'MYSQL', - '8443': 'PLESK', - '10000': 'VIRTUALMIN/WEBIN' - - + '21': 'FTP', '22': 'SSH', '23': 'TELNET', '25': 'SMTP', '53': 'DNS', + '69': 'TFTP', '80': 'HTTP', '109': 'POP2', '110': 'POP3', '123': 'NTP', + '137': 'NETBIOS-NS', '138': 'NETBIOS-DGM', '139': 'NETBIOS-SSN', '143': 'IMAP', + '156': 'SQL-SERVER', '389': 'LDAP', '443': 'HTTPS', '546': 'DHCP-CLIENT', + '547': 'DHCP-SERVER', '993': 'IMAP-SSL', '995': 'POP3-SSL', '2082': 'CPANEL', + '2083': 'CPANEL', '2086': 'WHM/CPANEL', '2087': 'WHM/CPANEL', '3306' :'MYSQL', + '8443': 'PLESK', '10000': 'VIRTUALMIN/WEBIN' } starting_time=time.time() if(flag): - print "[*] Scanning For Most Common Ports On %s" % (host) + print(f"[*] Scanning For Most Common Ports On {host}") else: - print "[*] Scanning %s From Port %s To %s: " % (host,start_port,end_port) - print "[*] Starting CyberScan 1.01 at %s" %(time.strftime("%Y-%m-%d %H:%M %Z")) + print(f"[*] Scanning {host} From Port {start_port} To {end_port}: ") + + print(f"[*] Starting CyberScan 1.01 at {time.strftime('%Y-%m-%d %H:%M %Z')}") + def check_port(host,port,result= 1): try: sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) @@ -192,7 +160,7 @@ def check_port(host,port,result= 1): if r ==0: result = r sock.close() - except Exception, e: + except Exception as e: # Python 3 exception syntax pass return result @@ -203,58 +171,65 @@ def get_service(port): else: return 0 try: - print "[*] Scan In Progress ..." - print "[*] Connecting To Port : ", + print("[*] Scan In Progress ...") + + # Print without newline and ensure immediate flush + print("[*] Connecting To Port : ", end=' ', flush=True) if flag: for p in sorted(common_ports): - sys.stdout.flush() + # Use print with end=' ' and flush=True for the real-time update effect p = int(p) - print p, + print(p, end=' ', flush=True) response = check_port(host,p) if response ==0: open_ports.append(p) + + # Write backspaces to delete the printed port number on the same line + sys.stdout.write('\b' * (len(str(p)) + 1)) # +1 for the space ' ' in print(p, end=' ') + sys.stdout.flush() - sys.stdout.write('\b' * len(str(p))) - - else: for p in range(start_port,end_port+1): - sys.stdout.flush() - print p, + # Use print with end=' ' and flush=True for the real-time update effect + print(p, end=' ', flush=True) response = check_port(host,p) if response ==0: open_ports.append(p) + + # Write backspaces only if it's not the last port, to maintain the rolling effect if not p == end_port: - sys.stdout.write('\b' * len(str(p))) + # +1 for the space ' ' in print(p, end=' ') + sys.stdout.write('\b' * (len(str(p)) + 1)) + sys.stdout.flush() - print "\n[*] Scanning Completed at %s" %(time.strftime("%Y-%m-%d %H:%M %Z")) + print(f"\n[*] Scanning Completed at {time.strftime('%Y-%m-%d %H:%M %Z')}") ending_time = time.time() total_time = ending_time - starting_time - if total_time <=60: - print "[*] CyberScan done: 1IP address (1host up) scanned in %.2f seconds" %(total_time) - + + if total_time <= 60: + print(f"[*] CyberScan done: 1IP address (1host up) scanned in {total_time:.2f} seconds") else: total_time = total_time / 60 - print "[*] CyberScan done: 1IP address (1host up) scanned in %.2f Minutes" %(total_time) + print(f"[*] CyberScan done: 1IP address (1host up) scanned in {total_time:.2f} Minutes") if open_ports: - print "[*] Open Ports: " + print("[*] Open Ports: ") for i in sorted(open_ports): service = get_service(i) if not service: service= "Unknown service" - print "\t%s %s: Open" % (i,service) + print(f"\t{i} {service}: Open") else: - print "[*] Sorry, No Open Ports Found.!!" + print("[*] Sorry, No Open Ports Found.!!") except KeyboardInterrupt: - print "\n[*] You Pressed Ctrl+C. Exiting" + print("\n[*] You Pressed Ctrl+C. Exiting") sys.exit(1) @@ -263,12 +238,12 @@ def pcap_analyser_eth(file): i=0 for pkt in pkts: i += 1 - print "-" * 40 - print "[*] Packet : " + str(i) - print "[+] ### [ Ethernet ] ###" - print "[*] Mac Destination : " + pkt.dst - print "[*] Mac Source : " + pkt.src - print "[*] Ethernet Type : " + str(pkt.type) + print("-" * 40) + print(f"[*] Packet : {i}") + print("[+] ### [ Ethernet ] ###") + print(f"[*] Mac Destination : {pkt.dst}") + print(f"[*] Mac Source : {pkt.src}") + print(f"[*] Ethernet Type : {pkt.type}") def pcap_analyser_ip(file): pkts = rdpcap(file) @@ -277,154 +252,148 @@ def pcap_analyser_ip(file): if pkt.haslayer(IP): i += 1 - print "-" * 40 - print "[*] Packet : " + str(i) - print "[+] ###[ IP ] ###" + print("-" * 40) + print(f"[*] Packet : {i}") + print("[+] ###[ IP ] ###") IPpkt = pkt[IP] srcIP = IPpkt.fields['src'] dstIP = IPpkt.fields['dst'] - print "[*] IP Source : " + srcIP - print "[*] IP Destination : " + dstIP + print(f"[*] IP Source : {srcIP}") + print(f"[*] IP Destination : {dstIP}") verIP = IPpkt.version - print "[*] IP Version : " ,verIP + print("[*] IP Version : ", verIP) ihlIP = IPpkt.ihl - print "[*] IP Ihl : " ,ihlIP + print("[*] IP Ihl : ", ihlIP) tosIP = IPpkt.tos - print "[*] IP Tos : " ,tosIP + print("[*] IP Tos : ", tosIP) lenIP = IPpkt.len - print "[*] IP Len : " ,lenIP + print("[*] IP Len : ", lenIP) idIP = IPpkt.id - print "[*] IP Id : " ,idIP + print("[*] IP Id : ", idIP) flagsIP = IPpkt.flags - print "[*] IP Flags : " ,flagsIP + print("[*] IP Flags : ", flagsIP) fragIP = IPpkt.frag - print "[*] IP Frag : " ,fragIP + print("[*] IP Frag : ", fragIP) ttlIP = IPpkt.ttl - print "[*] IP Ttl : " ,ttlIP + print("[*] IP Ttl : ", ttlIP) protoIP = IPpkt.proto - print "[*] IP Protocol : " ,protoIP + print("[*] IP Protocol : ", protoIP) chksumIP = IPpkt.chksum - print "[*] IP Chksum : " ,chksumIP + print("[*] IP Chksum : ", chksumIP) optionsIP = IPpkt.options - print "[*] IP Options : " ,optionsIP - print "[*] IP Dump : " - print hexdump(IPpkt) + print("[*] IP Options : ", optionsIP) + print("[*] IP Dump : ") + print(hexdump(IPpkt)) def pcap_analyser_tcp(file): pkts = rdpcap(file) - i=0 + i = 0 SYN = 0x02 - FIN = 0X01 + FIN = 0x01 RST = 0x04 - PSH = 0X08 - ACK = 0X10 + PSH = 0x08 + ACK = 0x10 URG = 0x20 - + for pkt in pkts: - if pkt.haslayer(TCP): i += 1 - print "-" * 40 - print "[*] Packet : " + str(i) - print "[+] ###[ TCP ] ###" + print("-" * 40) + print(f"[*] Packet : {i}") + print("[+] ###[ TCP ] ###") TCPpkt = pkt[TCP] sportTCP = TCPpkt.sport - print "[*] TCP Source Port : " ,sportTCP + print("[*] TCP Source Port : ", sportTCP) dportTCP = TCPpkt.dport - print "[*] TCP Destination Port : " ,dportTCP + print("[*] TCP Destination Port : ", dportTCP) seqTCP = TCPpkt.seq - print "[*] TCP Seq : " ,seqTCP + print("[*] TCP Seq : ", seqTCP) ackTCP = TCPpkt.ack - print "[*] TCP Ack : " ,ackTCP + print("[*] TCP Ack : ", ackTCP) dataofsTCP = TCPpkt.dataofs - print "[*] TCP Dataofs : " ,dataofsTCP + print("[*] TCP Dataofs : ", dataofsTCP) reservedTCP = TCPpkt.reserved - print "[*] TCP Reserved : " ,reservedTCP + print("[*] TCP Reserved : ", reservedTCP) flagsTCP = TCPpkt.flags - print "[*] TCP Flags : " ,flagsTCP + print("[*] TCP Flags : ", flagsTCP) windowTCP = TCPpkt.window - print "[*] TCP Window : " ,windowTCP + print("[*] TCP Window : ", windowTCP) chksumTCP = TCPpkt.chksum - print "[*] TCP Chksum : " ,chksumTCP + print("[*] TCP Chksum : ", chksumTCP) urgptrTCP = TCPpkt.urgptr - print "[*] TCP Urgptr : " ,urgptrTCP + print("[*] TCP Urgptr : ", urgptrTCP) optionsTCP = TCPpkt.options - print "[*] TCP Options : " ,optionsTCP - nbrsyn=0 - nbrrst=0 - nbrack=0 - nbrfin=0 - nbrurg=0 - nbrpsh=0 - FlagsTCP=pkt[TCP].flags - if FlagsTCP==SYN: - nbrsun=1 - print "[*] TCP SYN FLAGS : " ,nbrsyn - elif FlagsTCP==RST: - nbrrst=1 - print "[*] TCP RST FLAGS : " ,nbrrst - elif FlagsTCP==ACK: - nbrack=1 - print "[*] TCP ACK FLAGS : " ,nbrack - elif FlagsTCP==FIN: - nbrfin=1 - print "[*] TCP FIN FLAGS : " ,nbrfin - elif FlagsTCP==URG: - nbrurg=1 - print "[*] TCP URG FLAGS : " ,nbrurg - elif FlagsTCP==PSH: - nbrpsh=1 - print "[*] TCP PSH FLAGS : " ,nbrpsh - print "[*] TCP Dump : " - print hexdump(TCPpkt) + print("[*] TCP Options : ", optionsTCP) + + # Interpret flags using bitwise checks (more robust than equality) + nbrsyn = 1 if (flagsTCP & SYN) != 0 else 0 + nbrrst = 1 if (flagsTCP & RST) != 0 else 0 + nbrack = 1 if (flagsTCP & ACK) != 0 else 0 + nbrfin = 1 if (flagsTCP & FIN) != 0 else 0 + nbrurg = 1 if (flagsTCP & URG) != 0 else 0 + nbrpsh = 1 if (flagsTCP & PSH) != 0 else 0 + + if nbrsyn: + print("[*] TCP SYN FLAGS : ", nbrsyn) + if nbrrst: + print("[*] TCP RST FLAGS : ", nbrrst) + if nbrack: + print("[*] TCP ACK FLAGS : ", nbrack) + if nbrfin: + print("[*] TCP FIN FLAGS : ", nbrfin) + if nbrurg: + print("[*] TCP URG FLAGS : ", nbrurg) + if nbrpsh: + print("[*] TCP PSH FLAGS : ", nbrpsh) + + print("[*] TCP Dump : ") + print(hexdump(TCPpkt)) def pcap_analyser_udp(file): pkts = rdpcap(file) - i=0 + i = 0 for pkt in pkts: - if pkt.haslayer(UDP): i += 1 - print "-" * 40 - print "[*] Packet : " + str(i) - print "[+] ###[ UDP ] ###" + print("-" * 40) + print(f"[*] Packet : {i}") + print("[+] ###[ UDP ] ###") UDPpkt = pkt[UDP] sportUDP = UDPpkt.sport - print "[*] UDP Source Port : " ,sportUDP + print("[*] UDP Source Port : ", sportUDP) dportUDP = UDPpkt.dport - print "[*] UDP Destination Port : " ,dportUDP + print("[*] UDP Destination Port : ", dportUDP) lenUDP = UDPpkt.len - print "[*] UDP Len : " ,lenUDP + print("[*] UDP Len : ", lenUDP) chksumUDP = UDPpkt.chksum - print "[*] UDP Chksum : " ,chksumUDP - print "[*] UDP Dump : " - print hexdump(UDPpkt) + print("[*] UDP Chksum : ", chksumUDP) + print("[*] UDP Dump : ") + print(hexdump(UDPpkt)) def pcap_analyser_icmp(file): pkts = rdpcap(file) - i=0 + i = 0 for pkt in pkts: - if pkt.haslayer(ICMP): i += 1 - print "-" * 40 - print "[*] Packet : " + str(i) - print "[+] ###[ ICMP ] ###" + print("-" * 40) + print(f"[*] Packet : {i}") + print("[+] ###[ ICMP ] ###") ICMPpkt = pkt[ICMP] typeICMP = ICMPpkt.type - print "[*] ICMP Type : " ,typeICMP - codeICMP = ICMPpkt.code - print "[*] ICMP Code : " ,codeICMP + print("[*] ICMP Type : ", typeICMP) + codeICMP = ICMPpkt.code + print("[*] ICMP Code : ", codeICMP) chksumICMP = ICMPpkt.chksum - print "[*] ICMP Chksum : " ,chksumICMP + print("[*] ICMP Chksum : ", chksumICMP) idICMP = ICMPpkt.id - print "[*] ICMP Id : " ,idICMP + print("[*] ICMP Id : ", idICMP) seqICMP = ICMPpkt.seq - print "[*] ICMP Seq : " ,seqICMP - print "[*] ICMP Dump : " - print hexdump(ICMPpkt) + print("[*] ICMP Seq : ", seqICMP) + print("[*] ICMP Dump : ") + print(hexdump(ICMPpkt)) def main(): @@ -435,11 +404,13 @@ def main(): global eport global file global flag - flag=0 - - try: + flag = 0 - parser = argparse.ArgumentParser(version=__version__,description=__description__,formatter_class=argparse.RawTextHelpFormatter,epilog='''\ + # Construct the argument parser + parser = argparse.ArgumentParser( + description=_description_, + formatter_class=argparse.RawTextHelpFormatter, + epilog=('''\ levels with ip adress: scan : scan ports arp : ping arp @@ -450,91 +421,77 @@ def main(): levels with pcap file: eth : extract ethernet headers - ip : extract ip headers + ip : extract ip headers tcp : extract tcp headers udp : extract udp headers - icmp : extract icmp headers - - ''') + icmp: extract icmp headers - parser.add_argument("-s","--serveur", dest="serveur",help="attack to serveur ip") - parser.add_argument("-p","--level",dest="level",help="stack to level") - parser.add_argument("-d","--sport",dest="sport",help="start port to scan") - parser.add_argument("-t","--eport",dest="eport",help="end port to scan") - parser.add_argument("-f", "--file", dest="file", - help="read pcap file") - + ''') + ) - args = parser.parse_args() - serveur = args.serveur - file = args.file - level = args.level - sport = args.sport - eport = args.eport - - - if file is not None or serveur is not None: + parser.add_argument('-v', '--version', action='version', version=_version_) + parser.add_argument('-s', '--serveur', dest='serveur', help='attack to serveur ip') + parser.add_argument('-p', '--level', dest='level', help='stack to level') + parser.add_argument('-d', '--sport', dest='sport', help='start port to scan') + parser.add_argument('-t', '--eport', dest='eport', help='end port to scan') + parser.add_argument('-f', '--file', dest='file', help='read pcap file') - header() - usage() - - if file and level == "eth": + try: + args = parser.parse_args() + serveur = args.serveur + file = args.file + level = args.level + sport = args.sport + eport = args.eport + + if file is not None or serveur is not None: + header() + usage() + + # pcap file based operations + if file and level == 'eth': pcap_analyser_eth(file) - elif file and level == "ip": + elif file and level == 'ip': pcap_analyser_ip(file) - elif file and level == "tcp": + elif file and level == 'tcp': pcap_analyser_tcp(file) - elif file and level == "udp": - pcap_analyser_udp(file) - elif file and level == "icmp": - pcap_analyser_icmp(file) - elif serveur is not None and level == "arp": - arp_ping(serveur) - elif serveur is not None and level == "icmp": - icmp_ping(serveur) - - elif serveur is not None and level == "tcp" and sport is not None: - port = sport - tcp_ping(serveur,port) - - elif serveur is not None and level == "scan" and sport is not None and eport is not None: - start_port = int(sport) - end_port = int(eport) - flag = 0 - superscan(serveur,start_port,end_port) - - elif serveur is not None and level == "scan" and sport is None and eport is None: - start_port = int(0) - end_port = int(0) - flag=1 - superscan(serveur,start_port,end_port) - - elif serveur is not None and level == "udp": - udp_ping(serveur,port=0) - - elif serveur is not None and level == "geoip": + elif file and level == 'udp': + pcap_analyser_udp(file) + elif file and level == 'icmp': + pcap_analyser_icmp(file) + + # live network based operations + elif serveur is not None and level == 'arp': + arp_ping(serveur) + elif serveur is not None and level == 'icmp': + icmp_ping(serveur) + elif serveur is not None and level == 'tcp' and sport is not None: + port = sport + tcp_ping(serveur, port) + elif serveur is not None and level == 'scan' and sport is not None and eport is not None: + start_port = int(sport) + end_port = int(eport) + flag = 0 + superscan(serveur, start_port, end_port) + elif serveur is not None and level == 'scan' and sport is None and eport is None: + # scan most common ports + start_port = 0 + end_port = 0 + flag = 1 + superscan(serveur, start_port, end_port) + elif serveur is not None and level == 'udp': + udp_ping(serveur, port=0) + elif serveur is not None and level == 'geoip': geo_ip(serveur) + else: + print('''usage: CyberScan.py [-h] [-s SERVEUR] [-p LEVEL] [-d SPORT] [-t EPORT] + [-f FILE] +use cyberscan -h to help ''') - - - else: - - print '''usage: CyberScan.py [-h] [-s SERVEUR] [-p LEVEL] [-d SPORT] [-t EPORT] - [-f FILE] -use cyberscan -h to help ''' - except KeyboardInterrupt: - print "\n[*] You Pressed Ctrl+C. Exiting" - sys.exit(1) + print('\n[*] You Pressed Ctrl+C. Exiting') + sys.exit(1) - if __name__ == '__main__': - main() - - - - - - - + main()