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 ...
随机推荐
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
一些IO系统调用执行时, 如 read 等待输入期间, 如果收到一个信号,系统将中断read, 转而执行信号处理函数. 当信号处理返回后, 系统遇到了一个问题: 是重新开始这个系统调用, 还是 ...
- 【加密算法】MD5
一.简介 MD5的全称是Message-Digest Algorithm 5(信息摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data S ...
- SQL处理数据并发,解决ID自增
1 创建MaxIdProcess表,由于存储ID的最大值 CREATE TABLE [dbo].[MaxIdProcess]( ,) NOT NULL, --自增ID ) NOT NULL, --存储 ...
- POI(java 操作excel,word等)编程
一.下载所需jar包 下载地址:http://poi.apache.org/download.html http://download.csdn.net/detail/likai22/534250 二 ...
- python web开发——c3 数据库交互和flask-SQLALchemy
ORM(对象关系映射) 定义:将数据库中表与表之间的关系和代码中类(class)与类之间的关系联系起来,这就是ORM
- C语言参数传递(值传递、地址传递)+二级指针
参数传递 C语言参数传递一般分为:值传递和地址传递(本质上只有值传递) (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上 ...
- 使用sqlyog连接到服务器数据库,实现可视化数据操作。(完美解决版。)《亲测!!!!》
服务器中的表 select Host ,User ,Select_priv ,Insert_priv ,Update_priv ,Delete_priv ,Create_priv ,Drop_pr ...
- 【bzoj4240】 有趣的家庭菜园 树状数组
这一题最终要构造的序列显然是一个单峰序列 首先有一个结论:一个序列通过交换相邻的元素,进行排序,最少的交换次数为该序列的逆序对个数 (该结论很久之前打表意外发现的,没想到用上了.....) 考虑如何构 ...
- Day1 Excel基本知识
1. 数据分析过程 2. 2016增强版Excel 特性 科学管理,科学决策的工具 精细化,量化分析的工具 3. Excel 学什么? 计算机解决问题的思维(抽象) 数据分析的思路与方法 掌握技巧和方 ...
- 剑指offer四十之数组中只出现一次的数字
一.题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 二.思路 建一个hashMap,统计各数字出现的次数,然后遍历hashMap,输出出现一次的数字 ...