前言

VMware vCenter Server是VMware虚拟化管理平台,广泛的应用于企业私有云内网中。站在渗透测试工具开发的角度,我们需要通过命令行实现vCenter Server同虚拟机的交互。

本系列文章将要比较多种不同的API,介绍实现细节,开源代码,实现以下功能:

· 读取虚拟机的配置

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

简介

本文将要介绍以下内容:

· 基础知识

· vSphere Automation API开发细节

· 开源代码vSphereAutomationAPI_Manage.py

基础知识

1.VMware vSphere

VMware vSphere是整个VMware套件的商业名称,而不是特定的产品或软件。

VMware vSphere的两个核心组件是ESXi服务器和vCenter Server。

2.ESXi

ESXi是hypervsior,可以在其中创建和运行虚拟机和虚拟设备。

3.vCenter Server

vCenter Server是用于管理网络中连接的多个ESXi主机和池主机资源的服务。

vCenter Server可安装至Linux系统中,通过安装vCenter Server Appliance(VCSA)实现。

vCenter Server也可安装至Windows系统中,通过安装Vmware Integrated Management(VIM)实现。

vSphere Automation API开发细节

为了能够通过命令行实现vCenter Server同虚拟机的交互,我们需要使用vSphere Automation API中的vSphere REST API部分。

VMware在vSphere 6.0版本中引入了REST API,从vSphere7.0U2开始,VMware宣布弃用旧的REST API,使用新的REST API。

经过对比,发现旧的REST API(低于vSphere7.0U2)不支持以下操作:

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

而新的REST API能够满足需求,所以在开发上我们需要先对vCenter的版本进行判断,如果满足要求(不低于vSphere7.0U2),那么才使用vSphere Automation API。

1.已有的开源代码

Windows环境加载该脚本的示例命令如下:

脚本执行失败,提示如下:


测试环境2:192.168.1.2(vCenter 7.0.2)

Windows环境加载该脚本的示例命令如下:

脚本执行成功。

经过更多的测试后,印证结论:vSphere Automation API在低版本(低于vSphere7.0U2)无法实现以下操作:

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

2.参考文档用原始数据包实现

在实现上,首先需要发送用户名和明文口令获得Session,使用Session作为登录凭据,进行后续的操作。

具体实现细节如下:

(1)判断vCenter的版本

获得粗略版本的方法:

浏览器访问:https://<server_hostname >/sdk/vimServiceVersions.xml

返回结果为xml数据,无法获得具体的版本。

获得详细号版本的方法:

访问:https://<server_hostname>/sdk/

正文内容如下:

注:

vSphere 7.0U2对应对build属性为17630552

(2)Create_Session

添加Header:

其中,dXNlcm5hbWU6cGFzc3dvcmQ为username:password作Base64编码后的结果。

返回结果格式:响应码201,格式为application/json类型。

(3)List_Guest_Processes

请求正文需要json格式的数据作为凭据,用来登录虚拟机。

格式示例:

(4)vCenter同虚拟机传输文件

官方文档描述的不够详细

这里给出我经过测试得出的结论:

1.将文件从本地发送至虚拟机,即向虚拟机发送该文件,先调用Create_Temporary_Guest_Filesystem_Files创建指定文件对应的uri

发送的内容格式如下;

不带有size属性。

发送成功后返回该文件对应的uri,使用PUT方法访问uri,data字段为发送的文件内容。

2.将该文件从虚拟机发送至本地,即读取虚拟机中的文件,先调用Create_Temporary_Guest_Filesystem_Files创建指定文件对应的uri。

发送的内容格式如下;

必须带有size属性。

发送成功后返回该文件对应的uri,使用GET方法访问uri,在获取文件内容时需要区分文本格式和二进制格式,文本格式可以使用r.text读取,二进制格式可以使用r.content读取。

开源代码

代码适用版本:vSphere 7.0U1+

支持以下功能:

· 读取虚拟机的配置

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

具体命令如下:

· ListVM

· GetVMConfig

· ListHost

· ListVMProcess

· CreateVMProcess

· KillVMProcess

· ListVMFolder

· DeleteVMFile

· DownloadFileFromVM

· UploadFileToVM

其中,对于虚拟机的操作,支持Windows和Linux系统

小结

本文介绍了通过vSphere Automation API实现vCenter Server同虚拟机交互的方法,开源实现代码vSphereAutomationAPI_Manage.py,记录开发细节。

对于vSphere Automation API,有些操作不支持低版本的vCenter(<vSphere7.0U2),导致通用性不够,所以下篇文章将要介绍更为通用的实现方法。

【想学网络安全吗,点一下】

vSphere开发指南1——vSphere Automation API相关推荐

  1. html5 百度地图api文档,开发指南--百度地图JavaScript API大众版.doc

    开发指南--百度地图JavaScriptAPI大众版开发指南--百度地图JavaScriptAPI大众版 简介 JavaScript API大众版 JavaScript API功能介绍 百度地图Jav ...

  2. 2.cuBLAS开发指南中文版--使用cuBLAS API

    cuBLAS开发指南中文版 2.使用cuBLAS API 本节介绍如何使用 cuBLAS 库 API. 2.1.1. Error status 所有 cuBLAS 库函数调用都返回错误状态 cubla ...

  3. 怎么画地铁图 java_创建地铁图-地铁图显示-开发指南-地铁图 JS API | 高德地图API...

    本章节将带您迅速了解地铁图 JS API的基本使用,学习如何创建和设置地铁简易图,如何添加点标记.信息窗体,如何绑定事件,如何做路线规划,使您在最短时间内创建一个地铁图页面. 准备页面 在正式开始开发 ...

  4. 百度地图api开发详解(android版).pdf,百度地图API开发指南原版.pdf

    百度地图API开发指南原版 百度地图 API 开发指南 百度地图 API 开发指南 目录 简介 3 什么是百度地图 API 3 面向的读者 3 获取 API 3 开发移动平台上的地图应用 3 兼容性 ...

  5. 1.cuBLAS开发指南中文版--简介

    cuBLAS开发指南中文版 cuBLAS 的 API 参考指南,CUDA 基本线性代数子程序库(CUDA Basic Linear Algebra Subroutine). 1.简介 cuBLAS 库 ...

  6. 9. Zigbee应用程序框架开发指南 - 属性管理

    1 Zigbee应用程序框架开发指南 - 概述 2 Zigbee应用程序框架开发指南 - 应用程序框架结构 3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构 4 Zigbee应用程序框架 ...

  7. 百度地图API开发指南

    百度地图API开发指南 本文为百度地图API官方版本的开发指南,供各位51CTO的网友进行参考. 简介什么是百度地图API? 百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮 ...

  8. 综合交易平台API技术开发指南

    综合交易平台API技术开发指南 第一章CTP 产品特性  1. 如何获取综合交易平台(Comprehensive Transaction Platform 以下简称 CTP)证券(期 货)交易及行情 ...

  9. B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台

    B2B2C网上商城开发指南--基于SaaS和淘宝API开放平台邢波涛  郭  娟  著 ISBN 978-7-121-12983-4 2011年4月出版 定价:49.00元 16开 388 页 内 容 ...

最新文章

  1. 天池NLP大赛来了!
  2. 为什么我能从普通程序员干到大厂总监?
  3. maven修改setting文件后重启_Maven项目构建
  4. 2014/School_C_C++_B/3/x的x次幂
  5. sqlserver 分页存储过程
  6. redis key失效的事件_《分享几道高频 Redis 高频面试题,面试不用愁》
  7. 一步步编写操作系统21 x86虚拟机bochs 跟踪bios
  8. AutoHotkey调用VBA实现批量精确筛选数据透视表某字段内容。
  9. mysql典型安装和自定义_Mysql8.0.19下载安装—windows版本自定义安装
  10. r-cnn学习(六):RPN及AnchorTargetLayer学习
  11. 【软考2】Java语言的基本知识汇总
  12. 【贪心】蓝桥2020:答疑
  13. 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
  14. appium和airtest_Airtest自动化测试工具
  15. hrbust 哈理工oj 2026 势力较量【并查集】
  16. pdfobject.js和pdf.js的详解
  17. raid 0 1 5 10的区别以及应用
  18. 前端基础知识--Document的常用属性和常用函数
  19. 计算机ifand函数补考科目,Excel函数公式:逻辑函数IF、AND、OR、NOT、IFERROR实用技巧解读...
  20. IDEA SpringBoot 自定义Banner

热门文章

  1. Py之folium:python库之folium的简介、安装、使用方法之详细攻略
  2. Python之pyspark:pyspark的简介、安装、使用方法之详细攻略
  3. 201.09.22 除虫药水(线性dp)
  4. Caffe---Pycaffe 绘制loss和accuracy曲线
  5. Android 把第三方jar 打进java包
  6. vue2.0+wechat
  7. powerdesigner 生成数据库脚本
  8. java,UDP协议简单实现
  9. 网络抓包工具wireshark and tcpdump 及其实现基于的libpcap
  10. html的学习小结(3):HTML 4.0 事件属性