#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进行扫描的更多相关文章

  1. python 调用nmap

    1.系统中需要安装nmap 2.系统中安装pip 2.安装python调用nmap的lib包 命令为:pip install python-nmap 以下是在centos系统下安装成功后的截图 在命令 ...

  2. Python调用nmap扫描网段主机信息生成xml

    #!/usr/bin/env python # -*- coding: utf_8 -*- # Date: 2015年10月23日 # Author:蔚蓝行 # 博客 http://www.cnblo ...

  3. python调用nmap探测局域网设备

    平台:linux 描述:利用os.popen()函数调用系统命令nmap进行扫描,并用grep命令对扫描结果关键内容进行提取 代码 #!/usr/bin/env pthon #--*--coding= ...

  4. 7.python实现高效端口扫描器之nmap模块

    对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...

  5. Python编写类似nmap的扫描工具

    文主要是利用scapy包编写了一个简易扫描工具,支持ARP.ICMP.TCP.UDP发现扫描,支持TCP SYN.UDP端口扫描,如下: usage: python scan.py <-p pi ...

  6. Python之NMAP详解

    一.NMAP简介 NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连 ...

  7. 使用python调用zxing库生成二维码图片

    (1)     安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...

  8. 使用NMAP端口扫描代码实现

    Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting).其基本功能有三个,一是探测一 ...

  9. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

随机推荐

  1. Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

    下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...

  2. CSS里总算是有了一种简单的垂直居中布局的方法了

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follow up: Can

    Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follo ...

  4. vmware安装CentOS " Intel VT-x 处于禁用状态"

    我刚用虚拟机vmware 11安装CentOS 7 ,出现错误“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题,如下图. Intel VT-x 即Virtualiza ...

  5. Oracle spool 用法小结

    关于SPOOL(SPOOL是SQLPLUS的命令,不是SQL语法里面的东西.) 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: select taskindex|| ...

  6. 转载:sql2005 Microsoft SQL Server Management Studio Express的安装问题

    转载地址:http://blog.csdn.net/rjc20098022/article/details/26958105 在这个网址http://www.microsoft.com/zh-cn/d ...

  7. hdu 2100

    #include<stdio.h> #include<string.h> char a[300],b[300]; int a1[300],b1[300]; int main() ...

  8. 【HDOJ5952】Counting Cliques(团,dfs)

    题意:给定一张n点m边的图,求大小为S的团的个数 N ≤ 100,M ≤ 1000,2 ≤ S ≤ 10,保证点的度不超过20 思路:dfs 因为每个点可能不止属于一个极大团,所以不能求出极大团然后计 ...

  9. 标准C程序设计七---23

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. WEB学习-HTML的骨架

    HTML的标准骨架 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...