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 ...
随机推荐
- 前端项目打包工具weexpack的安装
最下面是本人安装时候的系统环境,本篇文章只限于参考,不一定非得是这样,原因你懂得. 打包的过程中出现的问题 1.执行到weexpack run android的时候,到了resolving class ...
- sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到& ...
- WinFrom下Webbrowser加载自定义页面的技巧
先使用Navigate("about:balnk")方法,打开一个空页面,实际内容在IE_DocumentCompleted中写入.代码来源于csdnreader程序. priva ...
- SqlAlchemy操作(一)
博客转载于 http://www.cnblogs.com/haiyan123/p/8270520.html 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB ...
- Day44 数据库的操作
视图操作: 1.左连接查询 select * from person left join dept on person.dept_id = dept.did 2. 右连接 3. 内连接 inner ...
- AVL树的实现——c++
一.概念 AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的.它是最先发明的自平衡二叉查找树,也被称为高度平衡树.相比于"二叉查找树",它 ...
- Good Bye 2017 G. New Year and Original Order
G. New Year and Original Order time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- linux安装应用程序
实验:为 Linux 主机安装应用程序 环境:vmware workstation 14 . redhad-server-6.4 需求:1.使用 RPM 包的方式安装 Mozilla Firef ...
- leetcode-166-分数到小数(用余数判断有没有出现小数的循环体)
题目描述: 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: n ...
- 【NOIP2013】转圈游戏 快速幂
题目大意:给你四个整数$n,m,k,x$,求$(x+m\times 10^k)%n$. 直接一个快速幂就好了,注意开$long\ long$. #include<bits/stdc++.h> ...