前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现高效端口扫描

实现高效端口扫描

作者头像
用户5766185
发布2019-07-08 14:56:25
1.1K0
发布2019-07-08 14:56:25
举报
文章被收录于专栏:运维架构之路运维架构之路
代码语言:javascript
复制
#!/usr/bin/env python
#coding=utf-8

'''
探测端口连通性, 需要安装nmap命令
'''
import sys
import nmap

data = raw_input('Please input hosts and port: ')
scan_row = data.split(" ")
if len(scan_row) != 2:
  print("Input error, example: 192.168.1.0/24 80,443,22")
  sys.exit()

hosts = scan_row[0]
port = scan_row[1]

try:
  nm = nmap.PortScanner()
except nmap.PortScannerError:
  print('Nmap not found', sys.exc_info()[0])
  sys.exit()
except:
  print("Unexpected error:", sys.exc_info()[0])
  sys.exit()

try:
  # 调用扫描方法, 参数指定扫描主机hosts, nmap扫描命令行参数arguments
  nm.scan(hosts=hosts, arguments=' -v -sS -p ' + port)
except Exception, e:
  print("Scan error: " + str(e))

for host in nm.all_hosts():
  print('----------------------------------------------------')
  print('Host: %s (%s)' % (host, nm[host].hostname()))
  print('State: %s' % nm[host].state())  # 输出主机状态, 如up、down
  for proto in nm[host].all_protocols(): # 遍历扫描协议, 如tcp、udp
    print('----------')
    print('Protocol: %s' % proto)  # 输入协议名
    lport = nm[host][proto].keys()  # 获取协议的所有扫描端口
    lport.sort()  # 端口列表排序
    for port in lport:  # 遍历端口及输出端口与状态
      print('port: %s\tstate: %s' % (port, nm[host][proto][port]['state']))

example:

输入的主机可以是172.16.0.1或172.16.0.1/16形式.

输入的端口可以是单个,或多个用逗号进行分隔,亦或是中间用-表示范围.

参考链接

Python-nmap介绍: http://xael.org/pages/python-nmap-en.html

nmap中文手册: http://www.nmap.com.cn/doc/manual.shtm

以上代码,均来自Python自动化运维一书.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维架构之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档