python调用nmap进行扫描
#coding=utf-8 import nmap
import optparse
import threading
import sys
import re
'''
需安装python_nmap包,支持2.x以及3.x
python_nmap包提供了python调用nmap的一系列接口 (一)重要类及方法:
1.创建nmap扫描器
class PortScanner()
__init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap'))
Initialize PortScanner module * detects nmap on the system and nmap version
* may raise PortScannerError exception if nmap is not found in the path :param nmap_search_path: tupple of string where to search for nmap executable. Change this if you want to use a specific version of nmap.
:returns: nothing
2.扫描器方法
scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False)
Scan given hosts May raise PortScannerError exception if nmap output was not xml Test existance of the following key to know if something went wrong : ['nmap']['scaninfo']['error']
If not present, everything was ok. :param hosts: string for hosts as nmap use it 'scanme.nmap.org' or '198.116.0-255.1-127' or '216.163.128.20/20'
:param ports: string for ports as nmap use it '22,53,110,143-4564'
:param arguments: string of arguments for nmap '-sU -sX -sC'
:param sudo: launch nmap with sudo if True :returns: scan_result as dictionnary (二)例子
import nmap
scanner = nmap.PortScanner() #nmap_search_path已包含了nmap所在路径,若默认路径中没有nmap,则需指出
results = scanner.scan(hosts='192.168.2.1',ports='80')
pprint.pprint(results)
{'nmap': {'command_line': 'nmap -oX - -p 80 -sV 192.168.2.1',
'scaninfo': {'tcp': {'method': 'syn', 'services': '80'}},
'scanstats': {'downhosts': '0',
'elapsed': '11.59',
'timestr': 'Thu Jul 21 10:08:34 2016',
'totalhosts': '1',
'uphosts': '1'}},
'scan': {'192.168.2.1': {'addresses': {'ipv4': '192.168.2.1',
'mac': 'D0:C7:C0:6A:F6:A0'},
'hostnames': [],
'status': {'reason': 'arp-response',
'state': 'up'},
'tcp': {80: {'conf': '3',
'cpe': '',
'extrainfo': '',
'name': 'http',
'product': '',
'reason': 'no-response',
'state': 'filtered',
'version': ''}},
'vendor': {'D0:C7:C0:6A:F6:A0': 'Tp-link '
'Technologies'}}}} '''
def anlyze_port(target_port):
#解析-p参数传入的值,返回端口列表
try:
pattern = re.compile(r'(\d+)-(\d+)') #解析连接符-模式
match = pattern.match(target_port)
if match:
start_port = int(match.group(1))
end_port = int(match.group(2))
return([x for x in range(start_port,end_port + 1)])
else:
return([int(x) for x in target_port.split(',')])
except Exception as err:
print('请注意错误1:',sys.exc_info()[0],err)
print(parser.usage)
exit(0) def portscanner(target_host,target_port):
scanner = nmap.PortScanner()
results = scanner.scan(hosts=target_host,ports=target_port,arguments='-T4 -A -v -Pn ') #禁ping的快速扫描
print('扫描语句是:',results['nmap']['command_line'])
print('[*]主机' + target_host + '的' + str(target_port) + '端口状态为:' + results['scan'][target_host]['tcp'][int(target_port)]['state']) def main():
usage = 'Usage:%prog --host <target_host> --port <target_port>'
parser = optparse.OptionParser(usage,version='v1.0')
parser.add_option('--host',dest='target_host',type='string',
help='需要扫描的主机,域名或IP')
parser.add_option('--port',dest='target_port',type='string',
help='需要扫描的主机端口,支持1-100或21,53,80两种形式')
(options,args) = parser.parse_args()
if options.target_host == None or options.target_port == None:
print(parser.usage)
exit(0)
else:
target_host = options.target_host
target_port = options.target_port target_port = anlyze_port(target_port)
for port in target_port:
t = threading.Thread(target=portscanner,args=(target_host,str(port)))
t.start() if __name__ == '__main__':
main()
运行后的结果为:
c:\python34\python.exe NmapScanner.py --host 192.168.1.1 --port 80
扫描语句是: nmap -oX - -p 80 -T4 -A -v -Pn 192.168.1.1
[*]主机192.168.1.1的80端口状态为:filtered
python调用nmap进行扫描的更多相关文章
- python 调用nmap
1.系统中需要安装nmap 2.系统中安装pip 2.安装python调用nmap的lib包 命令为:pip install python-nmap 以下是在centos系统下安装成功后的截图 在命令 ...
- Python调用nmap扫描网段主机信息生成xml
#!/usr/bin/env python # -*- coding: utf_8 -*- # Date: 2015年10月23日 # Author:蔚蓝行 # 博客 http://www.cnblo ...
- python调用nmap探测局域网设备
平台:linux 描述:利用os.popen()函数调用系统命令nmap进行扫描,并用grep命令对扫描结果关键内容进行提取 代码 #!/usr/bin/env pthon #--*--coding= ...
- 7.python实现高效端口扫描器之nmap模块
对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...
- Python编写类似nmap的扫描工具
文主要是利用scapy包编写了一个简易扫描工具,支持ARP.ICMP.TCP.UDP发现扫描,支持TCP SYN.UDP端口扫描,如下: usage: python scan.py <-p pi ...
- Python之NMAP详解
一.NMAP简介 NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连 ...
- 使用python调用zxing库生成二维码图片
(1) 安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...
- 使用NMAP端口扫描代码实现
Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting).其基本功能有三个,一是探测一 ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
随机推荐
- 第五部分 linux系统管理员 开机流程 模组管理 与loader
第五部分 linux系统管理员 开机流程 模组管理 与loader 开机流程分析 cmos保存电脑硬件的参数 bios 基本的输入输出系统 读取硬件的软件 MBR master bo ...
- HDU 3947 River Problem
River Problem Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ...
- 九度oj 题目1135:字符串排序
题目描述: 先输入你要输入的字符串的个数.然后换行输入该组字符串.每个字符串以回车结束,每个字符串少于一百个字符. 如果在输入过程中输入的一个字符串为“stop”,也结束输入. 然后将这输入的该组字符 ...
- pmm metrics 数据采集来源
handler状态参数 mysql> show global status like '%handler%'; +----------------------------+----------- ...
- BZOJ 3143 [Hnoi2013]游走 ——概率DP
概率DP+高斯消元 与博物馆一题不同的是,最终的状态是有一定的概率到达的,但是由于不能从最终状态中出来,所以最后要把最终状态的概率置为0. 一条边$(x,y)$经过的概率是x点的概率$*x$到$y$的 ...
- 阿里 AndFix 热修复框架简介
阿里AndFix热修复框架简介 热修复原理: Android的类加载机制 Android的类加载器分为两种,PathClassLoader和DexClassLoader,两者都继承自BaseDexCl ...
- 【2018.10.10】[HNOI2008] GT考试(bzoj1009)
10pts: 暴力枚举字符串,Hash判是否出现.(真会有人写么) 时间复杂度$O(10^n*n)$. 40pts: 学过OI的人都会写的dp 如果这道题的40pts($n\le 250000$)设成 ...
- Iptables入门教程
转自:http://drops.wooyun.org/tips/1424 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter ...
- 建筑抢修 BZOJ 1029
建筑抢修 [问题描述] 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修 ...
- 标准C程序设计七---26
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...