Python学习之扫描网段主机与开启端口(避坑)

踩坑

        本来我的win10里没有安装nmap,我直接pip install python-nmap安装了python-nmap模块,导致的最终结果就是报错,没有nmap二进制文件。

        解决办法,去http://nmap.org/dist/下载nmap安装,在环境变量中添加安装nmap的路径(应该软件自动就给办了)。

        然后就正常了。

编写端口扫描器

        扫描192.168.0.189的1-1000的开放情况。

>>> import nmap //引入nmap模块

>>> nm=nmap.PortScanner() //实例化

>>> nm.scan('192.168.0.189','1-1000') //扫描192.168.0.189的1-1000端口

>>> for host in nm.all_hosts(): //遍历主机

... print('-------------------------------------------')

... print('Host:%s(%s)'%(host,nm[host].hostname())) //主机名

... print('State:%s'%nm[host].state()) //主机状态

... for proto in nm[host].all_protocols(): //遍历协议

... print('-------------------------------------------')

... print('Protocol:%s'%proto) //输出协议类型

... lport=nm[host][proto].keys() //获取协议的所有扫描端口

... lport.sort() //端口列表排序

... for port in lport: //遍历端口及输出状态

... print('port:%s state:%s'%(port,nm[host][proto][port]['state']))

        命令行模式麻烦且不能纠错,因此写到e:// 1.py,然后cmd执行。(我试了试好像只能扫本机,别的好像要链接上才能扫)

扫描网段有哪些机器

import nmap

nm=nmap.PortScanner()

nm.scan(hosts='192.168.0.1/24',arguments='-sP') //ping主机在先扫描网段

hosts_list=[(x,nm[x]['status']['state']) for x in nm.all_hosts()] //保存主机状态

for host,status in hosts_list: //遍历主机名

    print(host+" is "+status) //输出主机名和状态

异步扫描

import nmap

nma=nmap.PortScannerAsync() //支持异步扫描的函数

def callback_result(host,scan_result): //新定义

    print '-------------------------------'

    print host,scan_result //输出主机名和扫描结果

nma.scan(hosts='192.168.0.1/24',arguments='-sP',callback=callback_result)

        会返回扫描的结果。

原文地址:https://www.cnblogs.com/sunny11/p/14141203.html