玩转网络-简单模拟SSH实现远程控制-2

简单模拟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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值