7.python实现高效端口扫描器之nmap模块
对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块。
本片文章主要介绍nmap模块的两个常用类:
- PortScanner()类,实现一个nmap工具的端口扫描功能的封装;
- PortScannerHostDict()类,实现存储与访问主机的扫描结果。
安装:这里需要安装的是python-nmap模块,不是nmap模块,pip install python-nmap。
PortScanner()类的一些常用方法:
1. scan()方法:
scan(self,host='127.0.0.1',ports=None,arguments='-sV')
实现指定主机,端口,nmap命令行参数的扫描。
参数说明:
- hosts:字符串类型,表示扫描的主机的地址,格式可以用"scanme.nmap.org","127.0.0.1/24"表示;
- ports:字符串类型,表示要扫描的端口,可以用"22,80,443-1000"表示;
- arguments:字符串类型,表示nmap命令行参数,格式为"-sU -sX -sC"表示。
import nmap
#实例化
nm = nmap.PortScanner()
#端口扫描
nm.scan('www.baidu.com','22,80,443','-sV')

2. command_line(self)方法
返回的扫描方法映射到具体的nmap命令行
nm.command_line()

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

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

------------------------------------------------------
PortScannerHostDict()类的一些常用方法
1. hostname(self)方法
返回扫描对象的主机名
nm['61.135.169.125'].hostname()

2. state(self)方法
返回扫描对象的状态,包括四种状态(up,down,unknown,skipped)
nm['61.135.169.125'].state()

3. all_protocols(self)方法
返回扫描的协议
nm['61.135.169.125'].all_protocols()

4.all_tcp(self)方法
返回TCP协议扫描的端口
nm['61.135.169.125'].all_tcp()

5.tcp(self,port)方法
返回扫描TCP协议port的信息
nm['61.135.169.125'].tcp()

实践:实现高效的端口扫描
实践代码采用scan()方法的arguments参数指定为 "-v -PE -p + 端口",-v表示启用细节模式,可以返回非up状态主机清单;-PE 表示采用TCP同步扫描(TCP,SYN)方式;-p指定扫描端口范围。程序输出部分采用了三个for循环体,第一层遍历扫描主机,第二层遍历协议,第三层遍历端口,最后输出主机状态。
import sys
import nmap scan_row=[]
input_data = input('Please input hosts and port: ')
scan_row = input_data.split(" ")
if len(scan_row)!=2:
print("Input errors,example \"192.168.1.0/24 80,443,22\"")
sys.exit(0)
#接收用户输入的主机
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(0)
except:
print("Unexpected error:", sys.exc_info()[0])
sys.exit(0) try:
#调用扫描方法,参数指定扫描主机hosts,nmap扫描命令行参数arguments
nm.scan(hosts=hosts, arguments=' -v -sS -p '+port)
except Exception as e:
print("Scan erro:"+str(e))
#遍历扫描主机
for host in nm.all_hosts():
print('----------------------------------------------------')
#输出主机及主机名
print('Host : %s (%s)' % (host, nm[host].hostname()))
#输出主机状态,如up、down
print('State : %s' % nm[host].state())
for proto in nm[host].all_protocols():
#遍历扫描协议,如tcp、udp
print('----------')
#输入协议名
print('Protocol : %s' % proto)
#获取协议的所有扫描端口
lport = nm[host][proto].keys()
#端口列表排序
list(lport).sort()
#遍历端口及输出端口与状态
for port in lport:
print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

7.python实现高效端口扫描器之nmap模块的更多相关文章
- 端口扫描器之java实现
端口扫描器之java实现 import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import j ...
- 端口扫描工具 nmap 使用手册
0x00 主机发现 -sL 仅仅是显示,扫描的IP数目,不会进行任何扫描 -sn ping扫描,即主机发现 -Pn 不检测主机存活 -PS/PA/PU/PY[portlist] TCP SYN Pin ...
- 端口扫描之王——nmap入门精讲(一)
端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...
- 端口扫描之王——nmap入门精讲(转)
端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...
- 端口扫描工具nmap
nmap 使用介绍 nmap是目前为止最广为使用的国外端口扫描工具之一.我们可以从[url]http://www.insecure.org/[/url]进行下载,可以很容易的安装到Windows和un ...
- 用Python实现一个端口扫描,只需简单几步就好
一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器 ...
- 端口扫描程序nmap使用手册
其实还是建议看英文的man,对以后学习其他东西很有帮助的:) 摘要 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等 ...
- 端口扫描工具nmap的常用参数讲解
转载请注明出处:https://www.cnblogs.com/wangyanzhong123/p/12576406.html nmap下载与安装 这个没什么好说的.很简单官网上下载就ok了,需要注意 ...
- 端口扫描命令nmap
转:http://www.osyunwei.com/archives/2004.html 下面教大家在CentOS中用nmap查看主机端口: 一.安装nmap yum install nmap -y ...
随机推荐
- SPOJ1812 Longest Common Substring II
题意 A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is th ...
- Android 杂记
Android Studio 报错:sdk location should not contain whitespace as this can cause problems with the ndk ...
- spring的<array>标签错误
1,复习了一下spring xml的配置 单个默认命名空间 我们看到,在配置文件中,beans,bean等元素我们是没有使用命名空间前缀的.重复限定一个要在命名空间中使用的元素或属性可能会非常麻烦.这 ...
- 关于Gateway
为什么要有gateway?就是因为如果没有,很多的功能需要在在每个微服务中都实现,这样成本很高.
- 在laravel中使用支付宝手机网站支付 和 支付宝退款
1.在蚂蚁金服开放平台中申请对应的应用,并根据提示进行签约 2.给对应的应用信息 生成私钥和公钥(私钥会保存在本地,公钥会放在对应的应用信息中) 3.下载手机网站支付 对应的php sdk 4.将sd ...
- 字符串(PHP学习)
1.什么是字符串 答:一串字符组成(参考羊肉串) 2.字符串定义 答:单引号,双引号,包含单引号或双引号的字符串(1.双引号里面有单引号2.单引号里面有双引号3.转义4.字符拼接) 3.单双引号定义字 ...
- java练习篇 求输出最大值
总结:没有把数据输入.是数组-----把要输入的数据放在数组里.错在这里 import java.util.Scanner; public class shibai { public static v ...
- Linux面试题大全(带答案)
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标识. ...
- thinkphp中的多字段模糊匹配
引言:有时候查询要匹配多个字段.比如查询地址,地址是由多个字段组成的.有省.市.区等等,以及详细地址.这个时候如何查询呢? 实现不同字段相同的查询条件 $User = M("User&quo ...
- Linux 命令初识
Alt+Ctrl+F[1~6]:切换虚拟终端 如果要切换到第 2 号虚拟终端的话,按 Alt+Ctrl+F2 要切换回去的话,按 Alt+Ctrl+F1 #:为 root 用户的系统提示符 $:为普通 ...