代码编织梦想

什么是ssh?

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。

远程执行命令后如何拿到执行结果?

可以使用subprocess模块,subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

需求:我想用python语句查看我Windows系统的本地网卡ip信息(ipconfig命令)。

import subprocess
obj = subprocess.Popen("ipconfig",shell=True,
                 stdout=subprocess.PIPE, # 正确结果丢到这个“管道”中
                 stderr=subprocess.PIPE) # 错误结果丢入这个“管道”
print(obj)
# linux操作系统默认用utf-8编码
# windows操作系统默认用gbk编码
print("stdout 1——>",obj.stdout.read().decode("gbk"))
print("stderr 1——>",obj.stderr.read().decode("gbk"))

控制台已成功打印本地网卡ip信息。 

 代码演示

服务端代码

import socket
import subprocess

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(("127.0.0.1",8080))
phone.listen(5)
print("starting...")
while True:
    conn,client_addr = phone.accept()
    print(client_addr)
    while True:
        # 1、收命令
        cmd = conn.recv(1024)
        if not cmd:break
        # 2、执行命令,拿到结果 ——> 返回的就是我windows系统上面执行命令收到的结果
        obj = subprocess.Popen(cmd.decode("utf-8"), shell=True,
                               stdout=subprocess.PIPE,  # 正确结果丢到这个“管道”中
                               stderr=subprocess.PIPE)  # 错误结果丢入这个“管道”
        stdout = obj.stdout.read()
        stdeer = obj.stderr.read()

        # 3、把命令的结果返回给客户端
        # + 涉及效率问题,它会申请一个新的内存空间
        # + 是一个可以优化的地方,后面会学到
        conn.send(stdout+stdeer)

    conn.close()
phone.close()

客户端代码

import socket

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8080))

while True:
    # 1、发命令
    cmd = input(">>:").strip()
    if not cmd:continue
    phone.send(cmd.encode("utf-8"))

    # 2、拿到命令的结果,并打印
    # 服务端回应的数据大小有可能超过1024字节
    # 1024的坑后面来填
    data=phone.recv(1024)
    print(data.decode("gbk"))

phone.close()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hold_on_qlc/article/details/128449599

带你见证expect的强大——全程自动化执行命令_cengjiayue6381的博客-爱代码爱编程

痛点: 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?你可能会使用这种方法: ssh admin@10.220.20.15 "ls" 但是这种方式比较笨拙,每次都要输入密码,同时并不能执行一些复杂的逻辑或命令。那么如何实现全程自动化呢?这就要用到今天这篇文章总结的expec

[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令-爱代码爱编程

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了微软证书漏洞(CVE-2020-0601),并详细讲解了Windows验证机制、可执行文件签名复现及HTTPS劫持。本文将分享另一个主题——Cracer教程,第一篇文章将详细讲解安全术语、Web渗透流程和Windows基础、注册

网络空间安全——总结-爱代码爱编程

1.绪论 课程目标: 系统而全面的了解网络空间安全方面的基础知识、认识安全隐患、掌握相应的防范方法、提高大家的安全意识。 课程重点: 勾勒网络空间安全的框架。 课程内容安排: 安全法律法规 物理设备安全 网络攻防技术 恶意代码及防护 操作系统安全 无线网络安全 数据安全 信息隐藏 隐私保护 区块链 物联网安全 密码学基础 网络空间

linux远程执行命令-爱代码爱编程

1.Expect语言实现自动化交互 简介:摘自百度 Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for

对main函数的理解c语言,C语言编程漫谈——main函数-爱代码爱编程

写在前面 促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了@小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了。问了一下其他同学,他们大部分都说自己C语言是混过的,因为之前老师教的时候说不会指针||结构体||函数 不会写也没有关系,然后他们居然还能过省二级(C语言)???结果到了大三,没人给他

Linux网络编程——黑马程序员笔记-爱代码爱编程

01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则。 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物、数、网、传、会、表、应 TCP/IP 4层模型:网(链路层/网络接口层)、网、传、应 应用层:http、ftp、nfs、ssh、telnet。。。 传输层:TCP、UD

网络编程学习(4)—— 基于SOCKET实现模拟SSH远程执行命令-爱代码爱编程

网络编程学习(4)—— 基于SOCKET实现模拟SSH远程执行命令 网络通信的应用python 如何利用代码执行终端命令尝试一、`os`模块解决方法、`subprocess` 模块代码实现运行结果 网络通信的应用 根据之前的网络通信的学习,我们可以很简单的想到网络通信可以用于搭建一个类似聊天室的程序。其实网络通信一个重要的应用是连接服务器执行

网络编程学习(5)—— 基于SOCKET模拟SSH远程执行命令后出现的粘包问题及解决方案-爱代码爱编程

网络编程学习(5)—— 基于SOCKET模拟SSH远程执行命令后出现的粘包问题及解决方案 粘包问题:问题出现粘包问题:分析粘包问题:文字版解决方案粘包问题:struct 模块补充粘包问题:简单代码解决粘包问题:终极代码解决 粘包问题:问题出现 前面我们已经实现了利用socket模拟远程执行命令,但是我们在代码运行中很有可能会遇到这样的问题,如

计算机网络核心概念——名词解释_处理时延-爱代码爱编程

目录​​​​​​​ 计算机网络核心概念 计算机网络应用层 计算机网络传输层 计算机网络网络层 计算机网络数据链路层和物理层 计算机网络安全 计算机网络核心概念 主机:计算机网络上任何一种能够连接网络的设备都被称为主机或者说是端系统,比如手机、平板电脑、电视、游戏机、汽车等,随着 5G 的到来,将会有越来越多的终端设备接入网络。