C++环境下的expect远程命令执行

2023-05-16

首先,必须安装几个开发包,在centos/fedora下,可以使用yum安装:

  1. $ yum -y install tcl-devel expect-devel  

 

装完以后,就可以使用expect来写代码了,从网上拉下来一段代码,稍微修改了一下:

  1. #include <tcl.h>  
  2. #include <expect.h>  
  3. #include <stdio.h>  
  4. #include <unistd.h>  
  5. #include <iostream>  
  6. #include <expect_tcl.h>  
  7.   
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     extern int exp_timeout;  
  13.     exp_timeout = 100;  
  14.     Tcl_Interp *tcl;  
  15.     tcl = Tcl_CreateInterp();  
  16.     if (Expect_Init(tcl) != TCL_OK)  
  17.     {  
  18.         puts("failure");  
  19.         return 1;  
  20.     }  
  21.     //start a connection with remote ssh server  
  22.     int fd = exp_spawnl("ssh""ssh""-p 22""username@server_address""echo start;ls ~;", (char *)0);  
  23.     if(fd < 0)  
  24.     {  
  25.         cout<<"Fail to ssh"<<endl;  
  26.         return -1;  
  27.     }  
  28.     int loop = 1;  
  29.     int result;  
  30.     while(loop)  
  31.     {  
  32.         //predefine some expected responses  
  33.         result = exp_expectl(fd, exp_glob, "*assword: ", 1, exp_exact, "Permission denied, please try again.", 2, exp_regexp, "(The authenticity of host)(.)*(Are you sure you want to continue connecting (yes/no)?)", 3, exp_end);  
  34.         char pas[] = "your_password\n";  
  35.         switch(result)  
  36.         {  
  37.             case 1:  
  38.                 write(fd, pas, sizeof(pas) - 1);  
  39.                 break;  
  40.             case 2:  
  41.                 cout <<"wrong password"<<endl;  
  42.                 break;  
  43.             case 3:  
  44.                 cout<<"connect security"<<endl;  
  45.                 write(fd, "yes\n", 4);  
  46.                 break;  
  47.             case EXP_EOF:  
  48.                 cout << "EOF\n";  
  49.                 loop = 0;  
  50.                 break;  
  51.             case EXP_TIMEOUT:  
  52.                 cout<<"Time out\n";  
  53.                 loop = 0;  
  54.                 break;  
  55.             default:  
  56.                 cout<<"logged in "<<result<<endl;  
  57.                 loop = 0;  
  58.                 break;  
  59.         }  
  60.     }  
  61.     Tcl_DeleteInterp(tcl);  
  62. }  

 

 

保存为test-expect.cpp, 编译:

  1. g++ test-expect.cpp -o test-expect -lexpect5.43 -ltcl8.4  

 

执行./test-expect,得到远程root用户的根目录列表。 

远程命令的标准输出存在exp_buffer缓冲区。

 

详细的手册可以参考http://www.cims.nyu.edu/cgi-systems/man.cgi?section=3&topic=libexpect

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++环境下的expect远程命令执行 的相关文章

  • 二次贝塞尔曲线长度

    二次贝塞尔曲线通常以如下方式构建 xff0c 给定二维平面上的固定点P0 P1 P2 xff0c 用B t 表示该条曲线 用一个动画来演示 xff0c 可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话 xff0c 这条贝塞尔
  • 损坏的主控文件表,CHKDSK被终止.如何恢复数据

    这种情况是分区结构出现异常 引起的分区错误 单击右键属性看到的是RAW格式 移动硬盘的话 xff0c 很大程度是因为强拔之类的操作 xff0c 也可能是坏道 病毒 xff0c 硬盘本身质量问题引起的 因为系统读取移动硬盘信息困难 xff0c
  • Microsoft SQL Server 2008 R2 官方简体中文正式版下载(附激活序列号密钥)

    微软官方发布的Microsoft SQL Server 2008 R2 简体中文完整版 基于SQL Server 2008提供可靠高效的智能数据平台构建而成 xff0c SQL Server 2008 R2 提供了大量新改进 xff0c 可
  • 不重装系统将系统移动到固态硬盘,并修改为C盘

    如今很多人升级电脑都会考虑换块固态硬盘 xff0c 如果重装系统 xff0c 又要重新安装一系列的软件 xff0c 拷贝一系列的数据 这里教大家怎样直接用固态硬盘代替C盘 xff0c 并且不会影响数据和软件 1 首先是在原电脑上加装新固态硬
  • python进行t检验示例

    t检验主要是针对正态总体均值的假设检验 xff0c 即检验样本的均值与某个值的差异 xff0c 或者两个样本的均值是否有差异等 其不需要事先知道总体的方差 xff0c 并且在少量样本情况下也可以进行检验 python进行t检验使用scipy
  • python-正态分布查表应用(scipy.stats.norm)

    1 公式 xff1a 正态分布概率密度公式 xff1a 可通过转换为标准正态分布 2 概率密度 xff1a 标准正态分布在某个点的概率密度可用scipy stats norm pdf计算 xff0c 下面模拟计算 5 5的概率密度 from
  • python-介绍泊松分布(poisson分布)

    一 泊松分布问题 xff1a 假设我每天接到骚扰电话的次数服从泊松分布 xff0c 并且经统计平均每天我会接到20个骚扰电话 请问 xff1a 1 我明天接到15个骚扰电话的概率 xff1f 2 我明天接到24个骚扰电话以下的概率 xff0
  • Word文档编辑技巧

    1 如何让附录显示在目录里 依次点击菜单栏的视图 工具栏 大纲 xff0c 打开大纲工具栏 选中 目录 附录 参考文献 等标题 xff0c 点击大纲工具栏的大纲级别的下拉选项 xff0c 选择 1级 xff0c 此时就完成了对 目录 等标题
  • 谈windows开发学习过程

    MFC作为一个C 43 43 类库 xff0c 而且MFC是Windows SDK的封装 为了开发windows应用更方便 xff0c 让程序员开发应用不需要过多在意细节 xff0c 专注功能上的开发 xff0c 所以推出MFC 但是实际开
  • python-指数分布介绍(scipy.stats.expon)

    一 指数分布问题 xff1a 有一种品牌的路由器 xff0c 据厂家统计知该路由器平均寿命是50000小时 xff0c 现在有2个问题 xff1a 1 去年我买了一个这样的路由器 xff0c 使用到现在已经8000小时了一点问题都没有 xf
  • python-使用LinearRegression进行简单线性拟合(线性回归)

    一元线性拟合 现有两组数据 xff0c 求y 61 a x 43 c的系数 X 61 12 46 0 25 5 22 11 3 6 81 4 59 0 66 14 53 15 49 14 43 2 19 1 35 10 02 12 93 5
  • matplotlib绘制双坐标轴(双纵轴)

    双坐标轴绘图示例 import matplotlib pyplot as plt import numpy as np plt rcParams 39 font sans serif 39 61 39 SimHei 39 用来正常显示中文标
  • pyplot画多个图,在一个图中绘制多个子图

    pyplot绘制多个子图方法 matplotlib在一个图中绘制多个子图用plt subplot 方法 import matplotlib pyplot as plt import numpy as np plt rcParams 39 f
  • mysql数据库备份及恢复

    1 mysql数据库备份 xff1a mysqldump lan db u root pmypassword h 10 49 56 01 gt data backup lan db sql 2 mysql数据库恢复 xff1a 先创建数据库
  • mysql密码过期解决办法,mysql密码永不过期

    1 进入到数据库服务器 xff0c windows需要进入到bin目录 xff0c linux应该是任意目录即可 xff08 但需要账号有权限 xff09 以windows为例 xff1a C Program Files MySQL MyS
  • java任意进制转换

    摘要 我们日常常用的是十进制 计算机是基于二进制的 xff0c 计算机常用的还有十六进制 八进制 本文主要介绍如何实现十进制和任意进制 间转换 计算思想 如果用 0123456789abcdefghijklmnopqrstuvwxyzABC
  • c++与java的应用区别

    文章目录 简介不同点关注点接口调用优化运行方式知识架构java不擅长的地方 基本就这些了 简介 一点粗鄙的总结 xff0c 肯定不全面 java我只接触了 后端部分 不同点 c 43 43 基本上你可以应用在所有的领域 xff0c 但是在后
  • HTTP基本认证(Basic Authentication)

    什么是HTTP基本认证 当打开浏览器访问网页时 xff0c 浏览器弹出一个包含用户名 密码输出项的对话框 xff0c 当用户输入用户名 密码后发送给服务器 xff0c 服务器验证通过后 xff0c 会显示相应的信息 这一认证的过程 xff0
  • Nginx(四):http服务器静态文件查找的实现

    上一篇nginx的文章中 xff0c 我们理解了整个http正向代理的运行流程原理 xff0c 主要就是事件机制接入 xff0c header解析 xff0c body解析 xff0c 然后遍历各种checker xff0c 直到处理成功为
  • 计算机网络-第3章 物理层

    期末考试篇 1 物理层定义了哪四方面的特性 xff1f 机械 xff1a 指明接口所用接线器的形状和尺寸 引脚数目和排列 固定和锁定装置 电气 xff1a 指明在接口电缆的各条线上出现的电压的范围 功能 xff1a 指明某条线上出现的某一电

随机推荐

  • jetson nano ubuntu18.04 ROS安装

    历时一天 xff0c 因为之前用手机热点 xff0c 即使换源了下载还是很慢 今天用校园网以后好了很多了 xff08 校园网还是挺好用的 xff09 xff0c 期间也踩了点坑 xff0c 记录一下 xff0c 也希望能帮到看这篇博客的你
  • 认识c++(二)

    上次说到c 43 43 变量类型 xff0c 接下来说c 43 43 变量作用域 作用域是程序的一个区域 xff0c 一般来说有三个地方可以定义变量 xff1a 1 函数或一个代码块内部声明的变量 xff0c 称为局部变量 2 函数参数的定
  • 老猿学5G扫盲贴:NEF、NRF、AF、UPF以及DN的功能

    专栏 xff1a Python基础教程目录 专栏 xff1a 使用PyQt开发图形界面Python应用 专栏 xff1a PyQt入门学习 老猿Python博文目录 NEF xff1a Network Exposure Function x
  • moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

    前往老猿Python博文目录 一 引言 在 moviepy音视频剪辑 xff1a moviepy中的剪辑基类Clip详解 介绍了剪辑基类的fl fl time fx方法 xff0c 在 moviepy音视频剪辑 xff1a 视频剪辑基类Vi
  • moviepy音视频开发专栏文章目录

    前往老猿Python博文目录 moviepy音视频开发专栏 为收费专栏 对应免费专栏为 PyQt moviepy音视频剪辑实战 这2个专栏基于老猿阅读moviepy1 03版本的源代码以及大量测试验证的基础上 详细介绍moviepy主要音视
  • 使用PyQt开发图形界面Python应用专栏目录

    前往老猿Python博文目录 本专栏为收费专栏的文章目录 xff0c 对应的免费专栏为 PyQt入门知识目录 xff0c 两个专栏都为基于PyQt的Python图形界面开发基础教程 xff0c 只是收费专栏中的内容介绍更深入 案例代码更全
  • 《OpenCV-Python初学者疑难问题集》专栏目录

    本专栏为免费专栏 https blog csdn net LaoYuanPython article details 109160152 OpenCV Python图形图像处理专栏 的伴生付费专栏 xff0c 用于发布一些学习OpenCV
  • 使用Python+Moviepy 5行代码实现两视频顺序拼接

    老猿Python博文目录 xff1a https blog csdn net LaoYuanPython 一 引言 最近看到好几篇类似 n行Python代码 的博文 xff0c 看起来还挺不错 xff0c 简洁 实用 xff0c 传播了知识
  • 图像滤波基础知识:图像与波的关系以及图像噪声知识

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 老猿对图像处理基础知识非常缺乏 xff0c 所以OpenCV Python的学习进度很慢 xff0c 很多基础概念和原理的东西花了大
  • 用Python通过摄像头进行视频录制

    老猿Python博文目录 xff1a https blog csdn net LaoYuanPython 用Python通过摄像头进行视频录制 一 引言 要实现摄像头录播摄像信息 xff0c 通过Python有很多种实现方式 xff0c 老
  • 计算机四级网络工程师——操作系统部分题目笔记汇总【1~10题】

    计算机四级笔记 操作系统部分 xff1a xff08 1 10题 xff09 因篇幅过长 xff0c 为保证学习质量 xff0c 遂将其分成四部分 xff08 四篇博客 xff09 每10题为一篇 xff0c 其他题目在我的计算机四级考试网
  • 一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序

    一 简介 Python标准库更多的适合处理后台任务 xff0c 唯一的图形库tkinter使用起来很不方便 xff0c 所以后来出现了针对Python图形界面开发的扩展库 xff0c 今天老猿要介绍的是主流Python图形界面扩展库之一的P
  • Python中可迭代对象是什么?

    Python中可迭代对象 Iterable 并不是指某种具体的数据类型 xff0c 它是指存储了元素的一个容器对象 xff0c 且容器中的元素可以通过 iter 方法或 getitem 方法访问 iter 方法的作用是让对象可以用for i
  • 老猿Python博客文章目录索引

    本目录提供老猿Python所有相关博文的一级目录汇总 xff0c 带星号的为付费专栏 xff1a 一 专栏列表 本部分为老猿所有专栏的列表 xff0c 每个专栏都有该专栏置顶的博文目录 xff1a Python基础教程目录PyQt入门学习
  • 用TAP方式让QEMU虚拟机与host联网

    转载自 cgjvcd 最终编辑 cgjvcd QEMU虚拟机网络的缺省模式是NAT方式 xff0c 即虚拟机可以通过host访问外网 xff0c 但host和外网无法访问虚拟机 如果要想让host访问虚拟机 xff0c 则可以使用TAP方式
  • TCP服务器端怎么判断客户端已经关闭了连接?

    http xidianzhangjun blog 163 com blog static 11548877120114411056939 哎 xff0c 首先 xff0c 又犯了一个大错 xff0c 前几天把这个问题通过实验搞懂了 xff0
  • PDP上下文和PDP地址

    http www mscbsc com 10037062 viewspace 61117 html S要接入外部PDN MS还应具有与该PDN相应的地址 称为PDP地址 PDP地址是用于外部分组数据网识别MS的PDP上下文时使用的地址 如用
  • Nmap从探测到漏洞利用备忘录

    http www freebuf com articles network 32302 html 在侦查期间 xff0c 扫描一直是信息收集的初始阶段 什么是侦查 侦查是尽可能多收集关于目标网络的信息 从黑客的角度来看 xff0c 信息收集
  • 内存分配器dlmalloc 2.8.3源码浅析

    目 录 1 本文档介绍 1 2 xff0e 边界标记法 2 3 分箱式内存管理 6 4 核心结构体malloc state 13 5 内存分配相关函数 16 5 1 函数dlmalloc 16 5 2 函数tmalloc small 25
  • C++环境下的expect远程命令执行

    首先 xff0c 必须安装几个开发包 xff0c 在centos fedora下 xff0c 可以使用yum安装 yum y install tcl devel expect devel 装完以后 xff0c 就可以使用expect来写代码