python nmap模块使用进行主机探测(ICMP)
终于审核通过了......第一次用博客,想记录自己的学习情况,分享知识。
废话不多说,第一篇blog,大牛请轻喷。
资产清点首先需要进行主机探测,将存活主机统计下来再进行进一步的指纹识别及端口探测。若直接进行全网段IP扫描是很浪费时间的,不如先使用ICMP进行主机存活状态的探测后,再针对的进行扫描。(基于ping的方式有可能有误差,但是这里主要考虑的是效率)
python的第三方nmap模块的安装,网上有相关教程,不多赘述。
由于需要跟踪累计PC存活总数,使用了类方法。但同时遇到的问题就是:使用多进程后会出现以下报错信息:
cPickle.PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
查了一下解决方法大概有三种:
- 用线程替换进程
- 可以使用copy_reg来规避上面的异常.
dill
或pathos.multiprocesssing
:use pathos.multiprocesssing, instead of multiprocessing. pathos.multiprocessing is a fork of multiprocessing that uses dill. dill can serialize almost anything in python, so you are able to send a lot more around in parallel.
这里使用第一种方法进行修改,直接上代码:
import nmap
from multiprocessing.pool import ThreadPool as Pool
import time
import csv class Scan(object):
def __init__(self):
self.count = 0 def scan(self, ip):
csv_write =[]
nm = nmap.PortScanner()
nm.scan(hosts=ip, arguments='-n -sn -PE')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
for host, status in hosts_list:
# print '{0}:{1}'.format(host, status)
csv_write.append([host, status])
name = ip.split('/')[0] + '.csv'
# print name
with open(name, 'wb') as csvfile:
fieldnames = ['ip', 'status']
w = csv.writer(csvfile, dialect='excel')
w.writerow(fieldnames)
w.writerows(csv_write)
print '[+]\"%s\" have saved, %d PC is up' % (name, len(hosts_list))
self.count += len(hosts_list) def get_ips(self, file):
ipList = []
with open(file) as f:
for line in f.readlines():
ipList.append(line.strip())
return ipList def run(self):
startTime = time.time()
print '[+]Scanning...'
ip_txt = 'C:\zichan.txt'
ipList = self.get_ips(ip_txt)
# print ipList
pool = Pool(5)
resultList = pool.map(self.scan, ipList)
pool.close()
pool.join()
endTime = time.time()
print '------------------------------------------------------'
print '[+]Scanning cost %ss, %d PC is up.' % (endTime - startTime, self.count)
print '[+]Done.' if __name__ == '__main__':
myScan = Scan()
myScan.run()
比较简单的方法实现,实际情况下扫描7个内网B段大概不到一个半小时,讲道理比直接使用nmap快很多(对比的nmap现在还没有跑完,嗯)
保存格式为CSV文件,控制台输出如下:
后面会尝试优化,并添加新的功能如端口扫描、系统指纹、漏洞探测等,这次就这样!水平有限,嘻嘻。
python nmap模块使用进行主机探测(ICMP)的更多相关文章
- python nmap模块 端口探测
今天添加端口探测功能,主要实现方式是通过nmap模块调用,扫描1-65535端口.上一篇中已经将UP的PC机全部获取到,这里直接从已知在线的PC中进行端口扫描就可以了,会节省很多时间. 代码如下,还是 ...
- python(nmap模块、多线程模块)
http://xael.org/pages/python-nmap-en.html nmap模块 http://www.tutorialspoint.com/python/python_m ...
- Nmap的活跃主机探测常见方法
最近由于工作需求,开始对Nmap进行一点研究,主要是Nmap对于主机活跃性的探测,也就是存活主机检测的领域. Nmap主机探测方法一:同网段优先使用arp探测: 当启动Namp主机活跃扫描时候,Nma ...
- 7.python实现高效端口扫描器之nmap模块
对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...
- 端口扫描器--利用python的nmap模块
安装nmap模块挺麻烦的,搞了半天 不仅要安装pip install nmap 还要sudo apt install nmap 给出代码,没有设多线程,有点慢,注意端口的类型转换,搞了很久 #!/us ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- Python::OS 模块 -- 进程管理
os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- 一步一步学Python(2) 连接多台主机执行脚本
最近在客户现场,每日都需要巡检大量主机系统的备库信息.如果一台台执行,时间浪费的就太冤枉了. 参考同事之前写的一个python脚本,配合各主机上写好的shell检查脚本,实现一次操作得到所有巡检结果. ...
随机推荐
- SpringFox
简介 http://projects.spring.io/spring-framework null
- ife task0003学习笔记(三):JavaScript闭包
一.this易错分析 在学习闭包的时候,有一个概念this很重要,关于this的理解,下面3种情况:this指向谁? fn.call(obj1); obj2.fn() fn() 答案是obj1 obj ...
- 【数据库】Oracle中删除新建并授权用户
DROP USER fengw_110 CASCADE; CREATE USER fengw_110 IDENTIFIED BY root123; grant connect,resource,cre ...
- C#(Winform)的Show()和ShowDialog()方法
1. 显示窗口的两种方式: Winform中的Form,在显示窗口时,可以使用Show()和ShowDialog()两种方式 2. 非模态窗口方式(可以跟其他界面自由切换,而且不阻塞代码) Show( ...
- Aaja.pro 未定义
问题描述:安装新系统后,将代码迁至新系统,所有用到ajaxpro框架调用ajax方法时均报“xx未定义”的错: 解决问题的过程 : 1.看看你在前台调用的方法的命名空间,方法名和后台的是否对应.在后台 ...
- 针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]
其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! <div class="videoDi ...
- 实用的随机数生成类Random:测试(随机产生100个不重复的正整数)
实用的随机数生成类Random:测试(使用Random类随机生成100个不重复的正整数) 一.之前我们使用随机数用的是Math类的random()方法: tips: 产生随机数(0~9中任意整数)的方 ...
- Java 枚举 获取前后元素,下一个元素
https://blog.csdn.net/jiangshanwe/article/details/79119219
- JAVA常见中文问题的解决方法(转)
JAVA常见中文问题的解决方法 http://www.java-cn.com/club/article-5876-1.html 以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所 ...
- vue——计算属性和侦听器
一.计算属性(data中的相关数据) 侦听多个属性时——计算属性 comuted. 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: & ...