结合渗透测试最常见就是单个域名扫指纹,自动子域名查找、获取所有子域名的IP,自动C段IP查找相同子域名,利用有效IP扫端口。

常见端口库扫描


  1. service_list = {
  2. 21:"FTP",
  3. 22:"ssh",
  4. 25:"SMTP",
  5. 80:"web",
  6. 139:"Samba",
  7. 143:"IMAP",
  8. 161:"SNMP",
  9. 389:"Ldap目录访问协议",
  10. 443:"https",
  11. 445:"Microsoft SMB",
  12. 465:"SMTP SSL",
  13. 513:"rlogin",
  14. 546:"DHCP failover",
  15. 873:"rsync",
  16. 993:"IMAPS",
  17. 1080:"socks proxy",
  18. 1194:"OpenVPN",
  19. 1352:"Lotus domino",
  20. 1433:"MSSQL",
  21. 1521:"Oracle default",
  22. 2049:"Nfs",
  23. 2181:"ZooKeeper",
  24. 2375:"Docker",
  25. 3306:"MySQL",
  26. 3389:"Remote Desktop",
  27. 4440:"rundeck",
  28. 4848:"GlassFish控制台",
  29. 5000:"SysBase/DB2",
  30. 5432:"PostgreSQL",
  31. 5632:"pcanywhere",
  32. 5900:"vnc",
  33. 5984:"Apache CouchDB",
  34. 6082:"varnish",
  35. 6984:"Apache CouchDB SSL",
  36. 6379:"Redis",
  37. 7001:"weblogic_Server isten port",
  38. 7002:"Server Listen SSL Port",
  39. 8069:"zabbix",
  40. 8080:"web,jboss,tomcat etc..",
  41. 8089:"Jboss/Tomcat/Resin",
  42. 8083:"influxDB Web admin",
  43. 8086:"influxdb HTTP API",
  44. 8095:"Atlassian Crowd",
  45. 8161:"activemq",
  46. 8888:"Jupyter Notebook",
  47. 8983:"solr",
  48. 9000:"fastcgi",
  49. 9043:"VMware ESXI vsphere",
  50. 9080:"websphere http",
  51. 9083:"Hive default",
  52. 9090:"websphere admin",
  53. 9200:"Elsaticsearch http",
  54. 9300:"Elsaticsearch Node1",
  55. 10000:"HiveServer2",
  56. 11211:"memcached",
  57. 27017:"MongoDB",
  58. 50000:"SAP command excute",
  59. 50060:"hadoop web",
  60. 50070:"hadoop default",
  61. 60000:"HBase Master",
  62. 60010:"hbase.master.info.bindAddress",
  63. }

利用文章

在线端口扫描服务

python自带库端口扫描

考虑CDN

国外的公有云厂商IP地址公开列表:

利用Python原始库完成一个端口扫描的功能


  1. import socket
  2. def get_ip_status(ip,port):
  3. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. try:
  5. server.connect((ip,port))
  6. print('{0} port {1} is open'.format(ip, port))
  7. except Exception as err:
  8. print('{0} port {1} is not open'.format(ip,port))
  9. finally:
  10. server.close()
  11. get_ip_status("192.168.221.133",22)

多线程端口扫描封装

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import threadpool
  4. import socket
  5. service_list = {
  6. 21:"FTP",
  7. 22:"ssh",
  8. 25:"SMTP",
  9. 80:"web",
  10. 139:"Samba",
  11. 143:"IMAP",
  12. 161:"SNMP",
  13. 389:"Ldap目录访问协议",
  14. 443:"https",
  15. 445:"Microsoft SMB",
  16. 465:"SMTP SSL",
  17. 513:"rlogin",
  18. 546:"DHCP failover",
  19. 873:"rsync",
  20. 993:"IMAPS",
  21. 1080:"socks proxy",
  22. 1194:"OpenVPN",
  23. 1352:"Lotus domino",
  24. 1433:"MSSQL",
  25. 1521:"Oracle default",
  26. 2049:"Nfs",
  27. 2181:"ZooKeeper",
  28. 2375:"Docker",
  29. 3306:"MySQL",
  30. 3389:"Remote Desktop",
  31. 4440:"rundeck",
  32. 4848:"GlassFish控制台",
  33. 5000:"SysBase/DB2",
  34. 5432:"PostgreSQL",
  35. 5632:"pcanywhere",
  36. 5900:"vnc",
  37. 5984:"Apache CouchDB",
  38. 6082:"varnish",
  39. 6984:"Apache CouchDB SSL",
  40. 6379:"Redis",
  41. 7001:"weblogic_Server isten port",
  42. 7002:"Server Listen SSL Port",
  43. 8069:"zabbix",
  44. 8080:"web,jboss,tomcat etc..",
  45. 8089:"Jboss/Tomcat/Resin",
  46. 8083:"influxDB Web admin",
  47. 8086:"influxdb HTTP API",
  48. 8095:"Atlassian Crowd",
  49. 8161:"activemq",
  50. 8888:"Jupyter Notebook",
  51. 8983:"solr",
  52. 9000:"fastcgi",
  53. 9043:"VMware ESXI vsphere",
  54. 9080:"websphere http",
  55. 9083:"Hive default",
  56. 9090:"websphere admin",
  57. 9200:"Elsaticsearch http",
  58. 9300:"Elsaticsearch Node1",
  59. 10000:"HiveServer2",
  60. 11211:"memcached",
  61. 27017:"MongoDB",
  62. 50000:"SAP command excute",
  63. 50060:"hadoop web",
  64. 50070:"hadoop default",
  65. 60000:"HBase Master",
  66. 60010:"hbase.master.info.bindAddress",
  67. }
  68. class Port(object):
  69. """docstring for Port"""
  70. def __init__(self, ip):
  71. self.state = 'unscan' #未扫描
  72. self.ip = ip
  73. self.report = ''
  74. # 主要执行函数
  75. def main(self):
  76. global g_list
  77. g_list = []
  78. portlist = []
  79. for port in service_list:
  80. portlist.append(port) # 保存url的列表
  81. self.thread_requestor(portlist) # 线程池函数
  82. for q in g_list: # 保存线程回调函数的值到vulurl.txt中
  83. print("sucess:",q)
  84. # 线程池函数
  85. def thread_requestor(self,portlist):
  86. pool = threadpool.ThreadPool(200) # 线程池数量
  87. # reqs = threadpool.makeRequests(getScan,urllist,res_printer) # 使用线程池
  88. reqs = threadpool.makeRequests(self.get_ip_status, portlist,self.res_printer) # 使用线程池
  89. [pool.putRequest(req) for req in reqs] # 简写 for req in reqs pool.putRequest(req)
  90. pool.wait()
  91. # 回调函数的结果保存到g_list数组中
  92. def res_printer(self,res1,res2):
  93. if res2:
  94. #print ('"线程返回的地址 = " %s ')% res2
  95. g_list.append(res2)
  96. else:
  97. pass
  98. # 获取IP端口
  99. def get_ip_status(self,port):
  100. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  101. try:
  102. server.connect((self.ip, port))
  103. print('{0} port {1} is open'.format(self.ip, port))
  104. return port
  105. except Exception as e:
  106. print('{0} port {1} is not open'.format(self.ip, port))
  107. finally:
  108. server.close()
  109. if __name__ == "__main__":
  110. Port("www.baidu.com").main()

python-nmap

把nmap指令参数封装起来,然后调用nmap,格式化nmap输出的结果。

模块常用方法说明

这里我们主要接受python-nmap模块的两个常用类,一个是PortScanner()类,实现一个nmap工具的端口扫描功能封装;另一个为PortScannerHostDict()类,实现存储与访问主机扫描结果

1、PortScanner()类常用方法

1-1、scan()方法

  1. scan(self, hosts='127.0.0.1', ports=None, arguments='-sV')

方法,实现指定主机、端口、namp命令行参数的扫描。参数hosts为字符串类型,表示扫描的主机地址,格式可以用"scanme.nmap.org"、"192.116.0-255.1-127"、"216.163.128.20/20"表示; 参数ports为字符串类型,表示扫描的端口,可以用"22,53,110,143-4564"表示;参数namp命令行参数,格式为"-sU -sX -sC",例如:

  1. nm = nmap.PortScanner()
  2. nm.scan('192.168.209.121-122', '22,80')

1-2、command_line()方法

command_line(self)方法,返回的扫描方法映射到具体的nmap命令行,如:

  1. >>> nm.command_line()
  2. u'nmap -oX - -p 22,80 -sV 192.168.209.121-122'

1-3、scaninfo()方法

scaninfo(self)方法,返回nmap扫描信息,格式为字典类型,如:

  1. >>>nm.scanninfo()
  2. {'tcp':{'services':'22,80', 'method':'syn'}}

1-4、all_hosts()方法

all_hosts(self)方法,返回nmap扫描的主机清单,格式为列表类型,例如:

  1. ['192.168.209.121', '192.168.209.122']

2、PortScannerHostDict()类常用方法

2-1、hostname()方法

hostname(self)方法,返回扫描对象的主机名,如:

  1. >>> nm['192.168.209.121'].hostname()
  2. 'liuyazhuang'

2-2、state()方法

state(self)方法,返回扫描对象的状态,包括4中状态(up、down、unknown、skipped),如:

  1. >>> nm['192.168.209.121'].state()
  2. 'up'

2-3、all_protocols()方法

all_protocols(self)方法,返回扫描的协议,如:

  1. >>> nm['192.168.209.121'].all_protocols()
  2. ['tcp']

2-4、all_tcp()方法

all_tcp(self)方法,返回TCP协议扫描的端口,如:

  1. >>> nm['192.168.209.121'].all_tcp()
  2. [22,80]

2-5、tcp()方法

tcp(self, port)方法,返回扫描TCP协议port(端口)的信息,如:

  1. >>> nm['192.168.209.121'].tcp(22)
  2. {'state':'open', 'reason':'syn-ack', 'name':'ssh'}

python操作nmap

1.简单的小案例

创建PortScanner实例,然后扫描159.239.210.26这个IP的20-443端口。

  1. import nmap
  2. nm = nmap.PortScanner()
  3. ret = nm.scan('115.239.210.26','20')
  4. print ret

返回格式如下:

  1. {'nmap': {'scanstats':
  2. {'uphosts': '1', 'timestr': 'Tue Oct 25 11:30:47 2016', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '1.11'},
  3. 'scaninfo': {'tcp': {'services': '20', 'method': 'connect'}}, 'command_line': 'nmap -oX - -p 20 -sV 115.239.210.26'},
  4. 'scan': {'115.239.210.26': {'status': {'state': 'up', 'reason': 'syn-ack'}, 'hostnames': [{'type': '', 'name': ''}],
  5. 'vendor': {}, 'addresses': {'ipv4': '115.239.210.26'},
  6. 'tcp': {20: {'product': '', 'state': 'filtered', 'version': '', 'name': 'ftp-data', 'conf': '3', 'extrainfo': '',
  7. 'reason': 'no-response', 'cpe': ''}
  8. }
  9. }
  10. }
  11. }

2.内置方法:

还可以打印出简单的信息

  1. import nmap
  2. nm = nmap.PortScanner()
  3. print nm.scaninfo()
  4. # {u'tcp': {'services': u'20-443', 'method': u'syn'}}
  5. print nm.command_line()
  6. # u'nmap -oX - -p 20-443 -sV 115.239.210.26'

查看有多少个host

  1. print nm.all_hosts()
  2. # [u'115.239.210.26']

查看该host的详细信息

  1. nm['115.239.210.26']

查看该host包含的所有协议

  1. nm['115.239.210.26'].all_protocols()

查看该host的哪些端口提供了tcp协议

  1. nm['115.239.210.26']['tcp']
  2. nm['115.239.210.26']['tcp'].keys()

查看该端口是否提供了tcp协议

  1. nm['115.239.210.26'].has_tcp(21)

还可以像这样设置nmap执行的参数

  1. nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')

更多操作请进官网http://xael.org/pages/python-nmap-en.html

Python扫描器-端口扫描的更多相关文章

  1. 利用Python进行端口扫描

    利用Python进行端口扫描 - Dahlhin - 博客园 https://www.cnblogs.com/dachenzi/p/8676104.html Python实现对一个网络段扫描及端口扫描 ...

  2. 基于python的端口扫描

    前言 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关).端口扫描是计算机解密高手喜欢的一种方式.攻击者可以通过它 ...

  3. 【Python】端口扫描脚本

    0x00   使用模块简介 1.optparse模块 选项分析器,可用来生成脚本使用说明文档,基本使用如下: import optparse #程序使用说明 usage="%prog -H ...

  4. python:端口扫描邮件推送

    #!/usr/bin/env python import pickle import smtplib from email.mime.text import MIMEText import nmap ...

  5. Python常用端口扫描

    from socket import * import sys host=sys.argv[1] service={':'HTTP', ':'SQL_Server', ':'Remote_Destop ...

  6. python实现端口扫描器/DoS/DDoS

    整理github,梳理下Python小工具.以下是python实现的DoS/DDoS/端口扫描器(github). 一.DoS SYN Flood是当前最流行的DoS(拒绝服务攻击)与DdoS(分布式 ...

  7. python自动化运维四:nmap端口扫描

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 端口扫描器: Python的第三方模块python-nmap可以实现高效的端口扫描. ...

  8. Python开发端口扫描器

    首先是最常用的端口扫描器: 虽说有nmap等强大的工具,不过如果由于条件限制无法安装Nmap呢? 我这个脚本写的比较简单,默认扫描1-65535全部的端口 实际的话,可以根据需要自己修改脚本来实现定制 ...

  9. 用Python实现一个端口扫描,只需简单几步就好

    一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器 ...

随机推荐

  1. C# 函数参数中的this

    先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Write ...

  2. 01_搭建新浪云SAE

    Step1:注册新浪云计算平台用新浪微博登陆新浪云计算平台,网址:http://sae.sina.com.cn/ 登陆成功之后会跳转到安全设置页面,安全设置页面要填写的东西比较多,需要注意:安全设置里 ...

  3. 【转】Hive 修改 table、column

    表 1.重命名表重命名表的语句如下: ALTER TABLE table_name RENAME TO new_table_name 2.修改表属性: ALTER TABLE table_name S ...

  4. C# 清除sqlite密码

    C# 清除sqlite密码 .创建空的sqlite数据库. //数据库名的后缀你可以直接指定,甚至没有后缀都可以 //方法一:创建一个空sqlite数据库,用IO的方式 FileStream fs = ...

  5. 让img图片像背景一样显示

    如何让图片像背景一样显示呢? 这里需要用到object-fit属性 MDN地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit ...

  6. C 库函数 - strchr()

    定义 char *strchr(const char *str, int c) 参数 str -- 要被检索的 C 字符串. c -- 在 str 中要搜索的字符 说明 该函数返回在字符串 str 中 ...

  7. Elasticsearch单机部署

    1.下载安装包 下载地址:https://www.elastic.co/downloads/elasticsearch 我这里下载的是 elasticsearch-6.4.0.tar.gz保存至/op ...

  8. [提权]sudo提权复现(CVE-2019-14287)

    2019年10月14日, sudo 官方在发布了 CVE-2019-14287 的漏洞预警. 0x00 简介 sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 基本集成 ...

  9. .NET Core教程--给API加一个服务端缓存啦

    以前给API接口写缓存基本都是这样写代码: // redis key var bookRedisKey = ConstRedisKey.RecommendationBooks.CopyOne(book ...

  10. 读取本地word 浏览器下载(设置编码格式)

    String filePath = "C:\\word\\报告.doc"; BufferedWriter bos = null; BufferedReader bis = null ...