博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟ssh, hashlib模块, struct模块, subprocess模块
阅读量:5948 次
发布时间:2019-06-19

本文共 2996 字,大约阅读时间需要 9 分钟。

一. 模拟ssh

# ===================================== 服务器端 =====================================import socketimport subprocess    # 系统操作server = socket.socket()server.bind(('127.0.0.1',8008))server.listen(5)while True:    print("server is working.....")    conn,addr = server.accept()    # 字节类型    while True:        # 针对window系统        try:            cmd = conn.recv(1024).decode("utf8") # 阻塞            if cmd == b'exit':                break            res=subprocess.Popen(cmd,                             shell=True,                             stderr=subprocess.PIPE,                             stdout=subprocess.PIPE,                             )            # print("stdout",res.stdout.read())            # print("stderr",res.stderr.read().decode("gbk"))            out=res.stdout.read()            err=res.stderr.read()            print("out响应长度",len(out))            print("err响应长度",len(err))            if err:                 import struct                 header_pack = struct.pack("i", len(err))                 conn.send(header_pack)                 conn.send(err)            else:                 #构建报头                 import struct                 header_pack=struct.pack("i",len(out))                 print("header_pack",header_pack)                 # # 发送报头                 conn.send(str(len(out)).encode("utf8"))                 # 发送数据                 conn.send(out)        except Exception as e:            break    conn.close() # ===================================== 客户端 =====================================import socketimport structsk = socket.socket()sk.connect(('127.0.0.1', 8008))while 1:	cmd = input("请输入命令:")	sk.send(cmd.encode('utf-8'))  # 字节	if cmd == "":  # 空字符串无法发送		continue	if cmd == 'exit':		break	header_pack = sk.recv(4)	data_length = struct.unpack("i", header_pack)[0]  # unpack是一个元组	print("data_length", data_length)	data_length = int(sk.recv(1024).decode("utf8"))	print("data_length", data_length)	recv_data_length = 0	recv_data = b""	while recv_data_length < data_length:		data = sk.recv(1024)		recv_data_length += len(data)		recv_data += data	print(recv_data.decode("gbk"))sk.close()

  

二. hashlib模块

import hashlibmd5=hashlib.md5()md5.update(b"hello")md5.update(b"yuan")print(md5.hexdigest())print(len(md5.hexdigest()))#helloyuan:   d843cc930aa76f7799bba1780f578439#             d843cc930aa76f7799bba1780f578439       # 多次update和单次update结果一样#############################################md5=hashlib.md5()with open("ssh_client.py","rb") as f:    for line in f:        md5.update(line)     # 多次update和单次update结果一样print(md5.hexdigest()) # f.read()

  

三. struct模块

import structres=struct.pack("i",2934781)print(res)print(len(res))obj=struct.unpack("i",res)print(obj[0])

  

四. subprocess模块 # windows系统明命令

import subprocessres=subprocess.Popen("dir",                     shell=True,                     stderr=subprocess.PIPE,                     stdout=subprocess.PIPE)print(res.stdout.read().decode("gbk"))

  

 

转载于:https://www.cnblogs.com/NachoLau/p/9588952.html

你可能感兴趣的文章
DNS 服务器的搭建
查看>>
LINUX -bash java command not found
查看>>
【docker】02、docker安装
查看>>
num_plus_sep
查看>>
将博客搬至CSDN
查看>>
Spring2.5学习笔记2-AOP-基本概念
查看>>
TCP/IP三次握手详细过程
查看>>
马哥linux+python——2015年9月1日课程作业
查看>>
你的梦想还在吗
查看>>
BIGIP-LTM中的NAT和SNAT
查看>>
sed单行处理命令奇偶行输出
查看>>
走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
查看>>
VC++深入详解学习笔记1
查看>>
对OpenBSD中的OSPF和BGP路由协议的探索
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
使用Jmeter进行http接口测试
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>