python nmap模块

1、安装namp

https://nmap.org/download.html 下载链接

PS:windows安装似乎麻烦一些,需要多下载npcap,官网有链接

2、python安装

注意,注意,注意!

需要安装的包是python-namp

PS:网上说需要版本一致,但是这个模块最新版本就是0.6.1

亲测也是可以使用的

3、使用与示例

import nmap # 导入 nmap.py 模块

nm = nmap.PortScanner() # 获取 PortScanner 对象

nm.scan('127.0.0.1', '22-443') # 扫描主机 127.0.0.1 端口号 22-443

nm.command_line() # 获取用于扫描的命令行:nmap -oX - -p 22-443 127.0.0.1

nm.scaninfo() # 获取本次扫描的信息 {'tcp': {'services': '22-443', 'method': 'connect'}}

nm.all_hosts() # 获取所有扫描到的主机

nm['127.0.0.1'].hostname() # 获取 127.0.0.1 的主机名

nm['127.0.0.1'].hostnames() # 获取list格式的主机名dict 127.0.0.1 # 如 [{'name':'hostname1', 'type':'PTR'}, {'name':'hostname2', 'type':'user'}]

nm['127.0.0.1'].state() # 获取主机 127.0.0.1 的状态 (up|down|unknown|skipped)

nm['127.0.0.1']['tcp'].keys() # 获取所有tcp端口

nm['127.0.0.1'].all_tcp() # 获取所有tcp端口 (已排序)

nm['127.0.0.1'].all_udp() # 同上

nm['127.0.0.1'].all_ip() # 同上

nm['127.0.0.1'].all_sctp() # 同上

nm['127.0.0.1'].has_tcp(22) # 是否含有主机 127.0.0.1 的 22 端口的信息

nm['127.0.0.1']['tcp'][22] # 获取主机 127.0.0.1 22 端口(tcp)的所有信息

nm['127.0.0.1'].tcp(22) # 获取主机 127.0.0.1 22 端口的所有信息

 

nm['127.0.0.1']['tcp'][22]['state'] # 获取主机 127.0.0.1 22 端口(tcp)的状态 (open|closed|filter)

 

使用多线程,nmap模块进行线程扫描

实例:

import nmap 
import optparse 
import threading 
def nmScan(tgtHost,tgtPort):
  #端口扫描
   nmscan = Portscanner()
   nmscan.scan(tgtHost,tgtPort)
  #状态录入
   state = nmscan[tgtHost]['tcp'][tgtPort]['stat']
def main():
  #添加参数解释器,-H tgtHost -p tgtPort
   usage = '-H tgtHosat -p tgtPort'
   parse = parse.optionParse(usage)
   parse.add_option('-H',dest='tgtHost',type='string',help='specify tgtHost')
   parse.add_option('-p,dest='tgtPort',type='string,help='specify tgtPort')
  #装载参数和配置,利用parse_args方法
   (options,args) = parse.parse_args()
   tgtHost = options.tgtHost
   tgtPorts = str(options.tgtPort).splite(,)
  #开始进行多线程扫描
   threads = []
   for tgtPort in tgtPorts:
                           t = thread.Threading(target='nmscan',args=(tgtHost,int(tgtPort))
         threads.append(t)
   #为线程设置守护,并且使用join主线程等待子线程完成
    for thread in threads:
      thread.setDaemon(True) 
      thread.strat()
      thread.join() #阻塞主线程
    print('end')
if __name__ = '__main__':
  main()
      
      

 这里在使用的时候,出现了PortScnner()模块无法使用的问题,后来通过安装python-nmap解决,注意不是安装nmap,而是python-nmap

你的版本应该是0.64,而不是1.00

posted @ 2021-09-02 13:02  Lzwhehe  阅读(526)  评论(0)    收藏  举报