subprocess、struct模块的简单应用与ssh模型(黏包)
2024-08-27 00:59:06
一、subprocess模块 #可以通过传递字符串命令,帮你去实现一些操作系统的命令。
import subprocess
res = subprocess.Popen("dir",
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE
)
ret = res.stdout.read().decode("gbk")
print(ret)
二、struct模块
import struct
res = struct.pack("i",6465789) #"q",8个字节
print(res) #b'\xfd\xa8b\x00'
print(len(res)) #
ret = struct.unpack("i",res)
print(ret) #(6465789,)
print(ret[0]) #
三、ssh模型(黏包)
server
import subprocess
import socket
import struct server = socket.socket()
server.bind(("127.0.0.1",8101))
server.listen(5)
while 1:
conn,addr = server.accept()
while 1:
try:
server_cmd = conn.recv(1024).decode("utf8")
res = subprocess.Popen(server_cmd,
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE
)
if server_cmd == b"exit":
break
response1 = res.stdout.read()
response2 = res.stderr.read()
if response2:
pack = struct.pack("i",(len(response2)))
conn.send(pack)
conn.send(response2)
else:
pack = struct.pack("i",(len(response1)))
conn.send(pack)
conn.send(response1)
except Exception as e:
break
conn.close()
client
import socket
import struct
client = socket.socket()
client.connect(("127.0.0.1",8101))
while 1:
client_cmd = input("请输入您的命令:")
client.send(client_cmd.encode("utf8"))
if client_cmd == "exit":
break
if client_cmd == "":
continue
pack = client.recv(4)
print(pack)
data_length = struct.unpack("i",pack)[0]
print(data_length)
recv_data_length = 0
recv_data = b"" while recv_data_length < data_length:
data = client.recv(1024)
recv_data_length += len(data)
recv_data += data print(recv_data.decode("gbk")) client.close()
最新文章
- Linq读取XML
- divmod(a,b)函数是实现a除以b,然后返回商与余数的元组、eval可以执行一个字符串形式的表达式、exec语句用来执行储存在字符串或文件中的Python语句
- 30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
- 硬连接与软连接,inode与links
- Codeforces Round #282 Div.1 B Obsessive String --DP
- soapui中文操作手册(四)----MOCK服务
- Codeforces Gym 100637A A. Nano alarm-clocks 前缀和处理
- 可复用的js效果
- jenkins相关
- oracle10g如何配置客户端
- Android模拟器使用教程
- Git 笔记三 Git的初步使用
- spring boot MySQL极简封装
- 在Linux系统使用VMware安装虚拟机
- 【渗透技术】渗透测试技术分析_TomCat
- CSS之精灵图(雪碧图)与字体图标
- java thread 线程40个问题汇总
- Spring动态数据源实现读写分离
- jquery validate使用笔记
- 子类的实例给父类的引用 在编译器时候 jvm认为他是父类的实例 只会去寻找父类里面的方法 如果调用子类里面的属性或者方法时候 jvm会认为该引用并没有 所以会报错
热门文章
- Linux文件误删恢复
- python 线程队列PriorityQueue(优先队列)(37)
- 线性表——顺序表的实现与讲解(C++描述)
- LeetCode 142. 环形链表 II(Linked List Cycle II)
- [HTTPS] - 请求API失败(Could not create SSL/TLS secure channel)之解决
- java当中JDBC当中请给出一个sql server的helloworld例子
- VMware虚拟机(Ubuntu)通过主机代理实现——浏览器+终端访问外网
- 写Markdown博客时遇到的一些问题
- Ajax跨越请求失败,解决
- WebApi如何传递参数