简单模拟SSH实现远程控制
简单学习OS库
学习笔记适用于python2,如果python3则需要另按装环境和模块,及修改一些语法
os常用函数
system(cmd)
#要执行系统或者程序、脚本
popen()
#返回一个文件描述符号为fd的打开的文件对象
chdir()
#改变当前工作目录
listdir()
#列出目录下的文件(参数是目录的绝对路径)
getcwd()
#获取当前目录
remove()
#删除
用户执行系统命令
#coding:utf-8
from os import *
#导入os模块
cmd = raw_input("Please input a command:")
#python3则是input()
system(cmd)
#要执行系统或者程序、脚本
print "It's ok"
使用system查看目录
#coding:utf-8
from os import *
system('dir')
#结果返回值只是一个0
#0表示执行成功,-1则是调用成功执行失败
所以我们要使用popen进行调用
#coding:utf-8
from os import *
a = popen('dir')
#返回一个文件描述符号为fd的打开的文件对象
print('a')
#则返回<open file 'dir',mode 'r' at 0x02514020>
#只需要print a.read()进行读取运行结果
如果我们使用for循环输出当前路径下的文件
#coding:utf-8
from os import *
#导入模块
a=listdir(getcwd())
#a赋值当前路径下的文件
print '\nThere is ',getcwd(),'\n'
#打印输出当前路径
for i in a
print ‘ --- ’,i
#listdir返回的是一个列表,所有要用for循环输出
#输出 --- iCliemt.py
--- iServer.py
--- osDemo.py
--- test
进入当前目录的其他文件
#coding:utf-8
from os import *
#导入模块
print getcwd()
#查看当前路径
#则显示C:\\User\\Administrator
#如果要进入其他目录还要加\\号
chdir(getcwd()+‘\\test’)
#进入当前目录的test目录
system(test.py)
删除文件
from os import *
remove('1.txt')
#删除当前文件的1.txt
print "运行前."
for i in listdir(getcwd()):
print i
remove('1.txt')
print “运行后”
for i in listdir(getcwd()):
print i
#运行前显示
#1.txt
#IClient.pt
#运行后显示
#iClient.py
我们有了一点os标准库的知识,就可以来简单实现模拟ssh了
实现简单模拟ssh
先来编写sshServer
#coding:utf-8
from socket import *
from os import *
#导入两个模块
s=socket(AF_INET,SOCK_STREAM)
#创建套接字
s.bind(('',6666))
#socket到本机地址和6666端口
s.listen(1)
#最大只允许一个客户端连接
While True:
#循环
sock,addr = s.accept()
#等待客户端连接请求出现,接受请求之后会返回
#返回两次
#sock=第一次返回的是我们操作的socket
#addr=第二次返回的是连接那台机器的ip地址和端口号
if cmd == ''quit": #如果收到的cmd命令是quit则退出循环
sock.close()
break
result = popen(cmd).read() #将发去给客户端的命令,取得到的结果赋值给result
sock.send(result) ##发送得到结果给客户端
sshClient
#coding:utf-8
from socket import *
#导入模块
c = socket(AF_INET,SOCK_STREAM)
#套接字
c.connect(('127.0.0.1',6666))
#连接本机端口
while True:
cmd = raw_input('cmd ?')
#raw_input在python3中是input
c.send(cmd)
#发送命令给服务端
if cmd == 'exit';
c.close()
break
#如果收到的cmd命令是quit则退出循环
data = c.recv(1024)
#将获得的数据赋值给data
print data
#输出数据
c.close()
一些思考
大家发现有很多缺陷:
1.无法切换目录去执行命令
2.可以扩展update和download等功能
笔记来自:
i春秋暴走python