KryptonH Asked:2022-06-22 21:55:58 +0800 CST2022-06-22 21:55:58 +0800 CST 2022-06-22 21:55:58 +0800 CST cmd与Python的交互 772 打开了 2 个命令行,其中一个是带有接收会话的 netcat,如何使用 Python 在那里编写命令? python 1 个回答 Voted Best Answer eri 2022-06-22T22:42:52+08:002022-06-22T22:42:52+08:00 import os import pty import fcntl import sys import select import socket 通过接受接受来自 netkat 的连接 addr = ("", 5543) with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.bind(addr) sock.listen(1) conn, addr = sock.accept() with conn: 从套接字中移除块 conn.setblocking(0) 打开了一个新的控制台 master, slave = pty.openpty() 在此控制台中运行 python pid = os.fork() if pid == 0: os.setsid() os.dup2(slave,0) os.dup2(slave,1) os.dup2(slave,2) os._exit( os.execv(sys.executable,(sys.executable,)) ) 解锁控制台 pipe = os.fdopen(master, 'wb+', buffering=0) fl = fcntl.fcntl(master, fcntl.F_GETFL) fcntl.fcntl(master, fcntl.F_SETFL, fl | os.O_NONBLOCK) 在循环中,select 选择数据出现的位置,在控制台还是在套接字中 while True: ready_read, _, _ = select.select([pipe, conn],[],[]) for reader in ready_read: 我从一个读到另一个写 if reader == pipe: conn.sendall(pipe.read()) else: pipe.write(conn.recv(4096))
通过接受接受来自 netkat 的连接
从套接字中移除块
打开了一个新的控制台
在此控制台中运行 python
解锁控制台
在循环中,select 选择数据出现的位置,在控制台还是在套接字中
我从一个读到另一个写