我正在尝试实现一种反向终端:
在某台计算机 foo 上启动 server.py。
在其他计算机上运行 nc foo 2000 并且您将连接到 foo 上的 bash shell。
我正在使用以下服务器代码:
import socket,os,threading,select,subprocess
class mysocket(socket.socket):
def __init__(self,*arg, **kw):
super(mysocket,self).__init__(*arg, **kw)
self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.setblocking(0)
def read(self):
return self.recv(2048)
def write(self,data):
self.send(data)
def accept(self):
conn,addr = super(mysocket,self).accept()
return mysocket(_sock=conn),addr
socket.socket = mysocket
import SocketServer
class RequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
subprocess.call(['bash','-i'],env=os.environ,stdin=self.request,stdout=self.request,stderr=self.request)
class ForkedTCPServer(SocketServer.ForkingMixIn, SocketServer.TCPServer):
pass
if __name__ == '__main__':
address = ('0.0.0.0', 2000) # let the kernel give us a port
server = ForkedTCPServer(address, RequestHandler)
server.serve_forever()
如果您一次只进行一个连接,这非常有用。
但是,当我打开第二个连接时,nc 程序会等待,并且我的 python 进程显示以下消息:
[1]+ Stopped python server.py
如果我输入 %1 将进程带到前台,那么第二个 nc 屏幕开始工作,并且我有两个远程 bash shell。
我的问题是为什么 python 进程会停止,如何阻止它发生?
据我所知,没有什么是阻塞的,因为一旦我恢复进程,一切都会完美运行!
非常感谢。