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 ...
随机推荐
- 疑难杂症--SQL SERVER 2012下数据库内存异常回收
--=================================================================== --背景: 在一台SQL SERVER 2012 SP1(1 ...
- leetcode 最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: &quo ...
- Sql Server字符串拆分(Split)方法汇总
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak--方法0:动态SQL法 declar ...
- 浅谈java classloader
本文由作者张远道授权网易云社区发布. 类加载器三杰 jvm有三类classloader,分别是bootstrap classloader,extended classloader以及system cl ...
- odoo:开源ERP/安装和初始设置
1.1 Odoo的结构 Odoo使用Web浏览器来访问Odoo服务,因此你的Odoo服务器可以部署在较远的地方(如另外一个城市),用户的计算机上只需安装谷歌.火狐或 IE9 以上的浏览器,所以Web客 ...
- 修改tomcat7编码问题(重定向等)
修改tomcat默认编码格式: 修改tomcat下的conf/server.xml文件,找到如下代码: <Connector port="8080" protocol=&qu ...
- python scapy 网卡抓包
首先需要安装scapy包,点击下载 from scapy.all import * def pack_callback(packet): print packet.show() if packet[' ...
- Swift 如何像 C语言 那样接收入口参数?
我们都知道在 Swift 语言当中不再有 main 函数了,可能了解过 C语言或者 Java 语言的同学对这一点赶到深深的不适.总之,取而代之的是 main.swift. int main(int a ...
- 2017 NAIPC A:Pieces of Parentheses
my team solve the problem in the contest with similar ideathis is a more deep analysis The main idea ...
- Hash Table-720. Longest Word in Dictionary
Given a list of strings words representing an English Dictionary, find the longest word in words tha ...