我正在尝试实现一种反向终端:在某些计算机 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 进程会停止,我怎样才能阻止它发生?
据我所知,没有什么是阻塞的,因为一旦我恢复了这个过程,一切都会完美运行!
非常感谢。