Python调用nmap扫描网段主机信息生成xml
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Date: 2015年10月23日
# Author:蔚蓝行
# 博客 http://www.cnblogs.com/duanv/ from IPy import IP
import threading
import nmap
import time
import sys
import subprocess
from xml.dom import minidom def usage():
print 'The script requires root privileges!'
print 'example:python scan.py 192.168.0.1/24' #生成xml文件的模板函数
def addResult(newresult):
global doc
global scan_result ip = doc.createElement("ip")
ip.setAttribute("address", newresult["address"]) osclass = doc.createElement("osclass")
osclass.appendChild(doc.createTextNode(newresult["osclass"]))
ip.appendChild(osclass) port = doc.createElement("port") tcp = doc.createElement("tcp")
tcp.appendChild(doc.createTextNode(newresult["tcp"]))
port.appendChild(tcp) udp = doc.createElement("udp")
udp.appendChild(doc.createTextNode(newresult["udp"]))
port.appendChild(udp) ip.appendChild(port)
scan_result.appendChild(ip) #扫描函数,调用nmap库
def ip_scan(ip):
global nm
#这里调用系统ping命令来判断主机存活
p = subprocess.Popen("ping -c 1 -t 1 "+ip,stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
out = p.stdout.read()
#如过没有100%丢包则主机存活,对是否丢包的判断是抓取系统回显内容,测试用的是‘MAC OS X’系统,抓取内容为‘100.0% packet loss’
if '100.0% packet loss' not in out:
try:
#调用nmap扫描主机操作系统,同时进行SYN扫描和UDP扫描探测开放的端口
nm.scan(ip,arguments='-O -sS -sU -F')
sr={'address':ip,'osclass':str(nm[ip]['osclass'])[1:-1],'tcp':str(nm[ip].all_tcp())[1:-1],'udp':str(nm[ip].all_udp())[1:-1]}
addResult(sr)
except:
pass #循环,遍历未扫描的IP
def loop():
global mutex
global ipx while 1:
#线程锁,扫描一个IP就将IPX列表中的该IP移除
mutex.acquire()
#如果列表中没有IP,则跳出循环结束该线程
if len(ipx)<=0:
mutex.release()
break
ip=ipx[0]
ipx.remove(ipx[0])
mutex.release()
#调用扫描函数
ip_scan(str(ip)) #创建线程的函数,默认创建40个
def creat_threads():
threads=[]
for i in range(40):
threads.append(threading.Thread(target=loop,))
for t in threads:
t.start()
for t in threads:
t.join() def start():
#mutex:线程锁
global mutex
#ipx:存储要扫描的IP地址段列表
global ipx
#nm:nmap模块扫描对象
global nm
#doc:xml文档对象
global doc
#scan_result:xml文档的根元素
global scan_result if '-h' == sys.argv[1]:
usage()
exit()
else:
#获取命令行输入的要扫描的IP段
ip=sys.argv[1]
#xml文档一些对象的初始化
doc = minidom.Document()
doc.appendChild(doc.createComment("scan_result xml."))
scan_result = doc.createElement("scan_result")
doc.appendChild(scan_result) #初始化参数
ipx=[]
nm=nmap.PortScanner()
mutex=threading.Lock() #调用IPy模块的IP函数,将IP地址段的每个IP存入列表
ipp=IP(ip, make_net=True)
for x in ipp:
ipx.append(x)
#去掉首尾代表子网和全部主机的IP
ipx=ipx[1:-1] print("please wait...")
#计算时间
time_start=time.time()
#创建线程
creat_threads() time_end=time.time()
t=time_end-time_start
print '*'*48
print '\nTime:'+str(t)+'s'
print 'Scan results have been saved to scan_result.xml.\n'
print '*'*48 #xml文件操作
f = file("scan_result.xml","w")
f.write(doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8"))
f.close() if __name__=='__main__':
start()
Python调用nmap扫描网段主机信息生成xml的更多相关文章
- python调用nmap进行扫描
#coding=utf-8 import nmap import optparse import threading import sys import re ''' 需安装python_nmap包, ...
- python 调用nmap
1.系统中需要安装nmap 2.系统中安装pip 2.安装python调用nmap的lib包 命令为:pip install python-nmap 以下是在centos系统下安装成功后的截图 在命令 ...
- python网络编程之网络主机信息
功能: 获取设备名称 方法: gethostname() 参数: 返回值:hostname(string) 功能: 获取设备ipv4地址 方法: gethostbyname() 参数: hostnam ...
- python调用nmap探测局域网设备
平台:linux 描述:利用os.popen()函数调用系统命令nmap进行扫描,并用grep命令对扫描结果关键内容进行提取 代码 #!/usr/bin/env pthon #--*--coding= ...
- 使用python调用zxing库生成二维码图片
(1) 安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...
- 最好的 NMAP 扫描策略
# 适用所有大小网络最好的 nmap 扫描策略 # 主机发现,生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24 $ grep &q ...
- Python扫描器-端口扫描
结合渗透测试最常见就是单个域名扫指纹,自动子域名查找.获取所有子域名的IP,自动C段IP查找相同子域名,利用有效IP扫端口. 常见端口库扫描 service_list = { 21:"FTP ...
- ping探测与Nmap扫描
一.实验目的 学习信息收集的一般步骤 学会使用ping命令 利用Nmap工具进行信息搜集 二.实验环境 系统环境:一台windows7系统.一台XP系统.一台kali系统 软件环境:安装Wiresha ...
- Metasploit使用内网跳板, 扫描局域网主机
最近,拿到一台内网机器, 苦于无法使用nmap扫描改主机的内网, 所以才有此文 在跳板机子获取一定权限后,需要积极的向内网主机权限发展,获取指定的目标信息,探查系统漏洞,借助msf已经得到的meter ...
随机推荐
- DBCC--LOG
DBCC LOGTo retrieve the transaction log for a given database.对应日志文件较大的数据库,慎用该命令Uasge:DBCC LOG(<db ...
- 设计模式之命令模式(Command Pattern)
一.什么是命令模式? 命令模式,封装了方法调用细节,以解耦请求者与执行者,具体流程如下: 1.从请求者(客户)的角度看 请求者(客户)发出请求 -> 调用者(系统)构造命令对象封装请求 -> ...
- NERDTree基本使用教程
Vim插件之属性目录NERDTree 1.下载安装 下载地址: 官网:http://www.vim.org/scripts/script.php?script_id=1658 GitHib:htt ...
- .net core Memcached使用
首先,你要在你电脑上安装配置好Memcached环境哦 Startup类的ConfigureServices中加入 //memcachedcore1 services.AddEnyimMemcache ...
- (C#)计算1-2+3-4+.....+m
方法一: public static int Sum(int m) { int sum = 0; bool bol = true; for (int i=1;i<=m;i++) { if (bo ...
- 第五章 JVM垃圾收集器(1)
说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...
- 实现单台测试机6万websocket长连接
本文由作者郑银燕授权网易云社区发布. 本文是我在测试过程中的记录,实现了单台测试机发起最大的websocket长连接数.在一台测试机上,连接到一个远程服务时的本地端口是有限的.根据TCP/IP协议,由 ...
- [TJOI2013]攻击装置(网络流,最小割)
前言 网络流被hbx吊起来打 Solution 考虑一下这个走法是不是和象棋中马的走法一模一样(废话) 那么显然我每一次移动是走三次,如果将棋盘二分图染色一下,不就是每一次只能走到另一个颜色的吗? 然 ...
- AJPFX告诉你MT4平台有什么优势?
FX TERMINAL(Meta Trader4)交易平台功能 成功驾驭金融市场的第一步是拥有正确的工具.AJPFX为客户提供二十四小时的在线交易服务,MT4交易软件是目前全世界上最为先进,应用最为广 ...
- Day 13 迭代器,生成器.
一.迭代器 可以进行for循环的 数据类型 str ,list tuple dict set 文件句柄 什么是可迭代对象? 方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭 ...