Socket实现简单的ssh

ssh_服务器端

import socket
import os
import timehost = "0.0.0.0"def echo_server(port):"""A simple echo server"""#Create a TCP socketsock = socket.socket()#Enable reuse address/portsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#Bind the socket to the portserver_address = (host, port)sock.bind(server_address)print("Starting up echo server on %s port %s" % (server_address))sock.listen(5)while True:print("Waiting for connection client")client, address = sock.accept()while True:data = client.recv(1024)if not data:print("Client has lost....")print("-----------------End-------------------")breakprint("Client sending data:", data.decode())               resp = os.popen(data.decode()).read()# print("resp size:", len(resp)) #总大小client.send(str( len(resp.encode("utf-8"))).encode("utf-8") ) #告诉客户端将要接收的数据大小            # time.sleep(0.5) #Set timeout  解决粘包client_ack = client.recv(1024) #wait client to confirm  解决粘包print("ack from client:", client_ack.decode())client.send(resp.encode("utf-8"))print("------------------------------------------")#end connectionclient.close()sock.close()if __name__ == "__main__":echo_server(9999)

ssh_客户端

import socket  host = "192.168.224.128"  def echo_client(port):  """Create a TCP/IP socket"""  client = socket.socket()  #Connect the socket to the server  server_address = (host, port)  client.connect(server_address)  print("Connecting to %s port %s" % server_address)  while True:  #Send data  message = input("Please enter the information sent>>>:")  if ( len(message) == 0 ): continue  client.send(message.encode("utf-8"))  #Receive message from the server  data_size = client.recv(1024) #接收来自服务器发来的数据大小  print("data_size:", data_size.decode())  client.send("准备好接收了,可以发了".encode("utf-8"))  receive_size = 0  while receive_size != int(data_size.decode()):  data = client.recv(1024)  # 每次收到的大小可能小于1024,所以必须用len获取大小  receive_size += len(data)   print(data.decode())  else:  print("----------------------End-------------------", receive_size)  client.close()  if __name__ == "__main__":  echo_client(9999) 

Socket实现简单的ftp

服务器端

import socket
import os
import hashlibhost = "0.0.0.0"def echo_server(port):"""A simple echo server"""#Create a TCP socketsock = socket.socket()#Enable reuse address/portsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#Bind the socket to the portserver_address = (host, port)sock.bind(server_address)print("Starting up echo server on %s port %s" % (server_address))sock.listen(5)while True:print("Waiting for connection client")client, address = sock.accept()while True:data = client.recv(1024)if not data:print("Client has lost....")print("-----------------End-------------------")breakcmd, filename = data.decode().split()    print("filename:", filename)if os.path.isfile(filename):f = open(filename, "rb")m = hashlib.md5()file_size = os.stat(filename).st_sizeclient.send( str(file_size).encode("utf-8") ) #send file sizeclient.recv(1024) #wait for ackfor line in f:m.update(line)client.send(line)print("server file md5:", m.hexdigest())print("++++++++++++++++++++++++++++++++++++++++++++++++")f.close()client.send(m.hexdigest().encode("utf-8")) #两句send连着可能出现粘包#end connectionclient.close()sock.close()if __name__ == "__main__":echo_server(9999)

客户端

import socket
import hashlibhost = "192.168.224.128"def echo_client(port):"""Create a TCP/IP socket"""client = socket.socket()#Connect the socket to the serverserver_address = (host, port)client.connect(server_address)print("Connecting to %s port %s" % server_address)while True:#Send datacmd = input("Please enter the information sent>>>:")if ( len(cmd) == 0 ): continueif cmd.startswith("get"):client.send(cmd.encode("utf-8"))server_response = client.recv(1024) #接收来自服务器发来的数据大小通知print("server response the file size:", server_response.decode())client.send("ready to recv file".encode("utf-8")) #告诉服务器可以接收了#主要是设置超时,防止出现沾包file_total_size = int( server_response.decode() )receive_size = 0filename = cmd.split()[1]f = open(filename + ".new", "wb")m = hashlib.md5()while receive_size < file_total_size: #防止出现粘包if file_total_size - receive_size > 1024: #要收不止一次size = 1024else: #最后一次,剩多少收多少size = file_total_size - receive_sizeprint("last receive size:", size)data = client.recv(size)m.update(data)receive_size += len(data)f.write(data)# print(receive_size, file_total_size)else:client_file_md5 = m.hexdigest()print( "file_total_size: %d     receive_size: %d" % (file_total_size, receive_size))print("------------file recv done-----------")f.close()server_file_md5 = client.recv(1024)print("server file md5:", server_file_md5.decode())print("client file md5:", client_file_md5)print("++++++++++++++++++++++++++++++++++++++++++++++++++")sock.close()if __name__ == "__main__":echo_client(9999)

Python_Socket实现简单的ssh/ftp相关推荐

  1. ROS 禁止公网暴力破解SSH FTP

    最简单的彻底禁止公网访问SSH FTP端口 1 2 /ip firewall filter add chain=input protocol=tcp dst-port=21-22 src-addres ...

  2. linux ftp iptables,linux – IPTABLES允许ssh,ftp,pop等从一个静态...

    这是我在/ etc / sysconfig / iptables中的设置: #start of my iptables # Generated by iptables-save v1.2.11 on ...

  3. ContOS网络连接及简单的ssh Xshell连接!

    这边简单的记录一下下ContOS网络连接及简单的ssh Xshell连接! 首先你得安装一个Contos Linux系统对吧! 1.找到设置--->网络-->有线连接-->IPv4 ...

  4. ssh怎么ftp上传文件到服务器,ssh ftp上传文件到服务器

    ssh ftp上传文件到服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别 ...

  5. oracle 弱口令扫描器,超级弱口令检查工具,检查SSH/FTP/MySQL/Oracle/SQLServer弱口令

    超级弱口令检查工具 V1.0 简介: 超级弱口令检查工具是一款Windows平台的弱口令审计工具,支持批量多线程检查,可快速发现弱密码.弱口令账号,密码支持和用户名结合进行检查,大大提高成功率,支持自 ...

  6. 在家怎么连接到公司的网络,ssh ,ftp ,3389 ...

    家里怎么才能远程桌面连接公司的电脑?介绍一个软件"应用虚拟网 Gport" 应用虚拟网 Gport   简介随着互联网业务的发展,远程协助,移动办公已经成为当今互联网用户的一个基本 ...

  7. Ubuntu常用命令及技巧 #小技巧 #常用终端命令 #远程管理 #SSH #FTP

    Ubuntu常用命令及技巧) 零.思维导图 一.小技巧 二.终端命令格式 1)格式 2)查阅命令相关信息: 三.常用终端命令 1)目录相关 1>ls (list目录):查看当前路径包含的文件目录 ...

  8. 简单配置局域网FTP

    1.打开控制版面->程序和功能->点击打开或关闭windows功能 选中FTP服务,确定. 2.控制版面->管理工工具->打开Internet 信息服务(IIS)管理器 3.右 ...

  9. 【原创】简单轻松浏览FTP

    笔者之前都是用浏览器浏览FTP的(笔者用的是360安全浏览器),可后来不知道为什么不能正常浏览了,如下图: 虽然这样也可以下载和浏览FTP上的资源,但总觉得没有像Windows的资源管理器那样来得方便 ...

最新文章

  1. tomcat和servlet的关系
  2. 设置文本区域大小_数据验证基本设置技巧
  3. c# .Net 缓存 使用System.Runtime.Caching 做缓存 平滑过期,绝对过期
  4. C. mathematican 的二进制
  5. 14.bash(2) 与 环境变量
  6. 深入理解java虚拟机系列文章:类的加载、连接与初始化
  7. Logs Viewer
  8. 怎么用计算机自己做动画片,怎样用电脑制作动画,电脑动画制作怎么做
  9. 软件测试-mocha入门
  10. 青少年软件编程(Python)等级考试试卷一级(判断题)2021-9
  11. 6 款免费网络延迟测试工具-从事网络行业必备
  12. Centos7.2修复yum
  13. 2016秋招面经(蘑菇街+BT+网易杭研+CVTE+唯品会)
  14. 微信小程序中如何打开公众号文章(node版)
  15. Python与Qt UI的图形界面编程(三)
  16. matlab作业1,matlab作业报告一
  17. SAP标准功能重复制造计划编制表实现生产排产初步分析
  18. 李航老师《统计学习方法》第二版第三章课后题答案
  19. fireworks html制作,教你用Fireworks制作简洁清爽的网站页面
  20. TensorFlow神经网络实现股票预测

热门文章

  1. python工程师工资状况_【python工程师工资|python工程师待遇怎么样】-看准网
  2. 查看总耗时_吉林德惠电力施工总承包资质代办
  3. go web db每次关闭_竟然不用写代码!一款可视化 Web 管理后台生成工具
  4. linux 内核文件结构,linux-011内核文件结构图
  5. Linux系统日常维护命令
  6. 32f4 usb 升级程序_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...
  7. 随心测试_软测基础_004职责与质量
  8. Oracle一条SQL语句插入多条记录
  9. WPF的ComboBox 数据模板自定义
  10. [ActionScript 3.0] 获取TextFiled字符边框