python 3.x 学习笔记14 (socket_ssh and socket_…
2018-06-18 01:19:26来源:未知 阅读 ()
ssh服务端
import socket,os server = socket.socket() server.bind(('localhost',6666)) server.listen() conn, addr = server.accept() while True: print('等待新数据!') cmd = conn.recv(1024) if len(cmd) == 0: break data = os.popen(cmd.decode()).read() cmd_size = len(data.encode('utf-8')) print('检测到数据大小',cmd_size) if len(data) == 0: data = '没有此命令!!' conn.send(str(len(data.encode('utf-8'))).encode()) order = conn.recv(1024) conn.send(data.encode('utf-8')) print('传送完成!') server.close()
ssh客户端
import socket client = socket.socket() client.connect(('localhost',6666)) while True: cmd = input('>>>:') if cmd == 0: continue client.send(cmd.encode('utf-8')) cmd_size = client.recv(1024) print('服务端检测到数据大小:', cmd_size) if len(cmd_size) !=0: client.send('可以发送数据了'.encode(encoding='utf-8')) receive_size = 0 receive_cmd = b'' while receive_size < int(cmd_size.decode()): data = client.recv(1024) receive_size += len(data) receive_cmd += data else: print('接收到数据大小:',receive_size) print('数据接收完成!') print(receive_cmd.decode())
socket文件传输并校验
服务端
import socket,os,hashlib server = socket.socket() server.bind(('localhost',6666)) server.listen() conn, addr = server.accept() while True: print('等待新数据!') cmd = conn.recv(1024) if len(cmd) == 0: break filename = cmd.decode().split()[1] print(filename) if os.path.isfile(filename): #判断文件是否存在 f = open(filename,'rb') #打开文件 m = hashlib.md5() file_size = os.stat(filename).st_size #查询文件大小 print(file_size) conn.send(str(file_size).encode()) #给客户端发送文件大小 conn.recv(1024) #等待并接受客户端的确认,这一步可以解决粘包问题 for line in f: #边读边循环发送文件 m.update(line) #得出每一句的md5值 conn.send(line) #发送给客户端 print('file md5:',m.hexdigest()) f.close() conn.recv(1024) conn.send(m.hexdigest().encode()) print('传送完成!') server.close()
socket文件传输并校验
客户端
import socket,hashlib client = socket.socket() client.connect(('localhost',6666)) while True: cmd = input('>>>:').strip() if len(cmd) == 0: continue if cmd.startswith('get'): #传输文件名要以get开头如:get var client.send(cmd.encode('utf-8')) file_size = client.recv(1024) print('服务端检测到文件大小:', int(file_size)) client.send('可以发送数据了'.encode(encoding='utf-8')) file_total_size = int(file_size) receive_size = 0 filename = cmd.split()[1] #以空格分割然后取出文件名 f = open('new_'+filename ,'wb') m = hashlib.md5() while receive_size < file_total_size: data = client.recv(1024) m.update(data) receive_size += len(data) f.write(data) print(file_total_size, receive_size) else: new_file_md5 = m.hexdigest() print('数据接收完成!') f.close() client.send('可以发送md5值了'.encode()) serve_md5 = client.recv(1024) print('新文件md5:',new_file_md5) print('原文件md5:',serve_md5) client.close()
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:0 - python简介
下一篇:简明Python 可变参数
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash