You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.4 KiB
Ruby
69 lines
1.4 KiB
Ruby
require 'socket'
|
|
|
|
def error(msg)
|
|
puts "error: #{msg}"
|
|
exit 1
|
|
end
|
|
|
|
class BackShotClient
|
|
def initialize(addr, port)
|
|
@addr = addr
|
|
@port = port
|
|
@hello = false
|
|
end
|
|
|
|
def get_resp(sock)
|
|
msg = sock.gets
|
|
error("not ok: #{msg}") if msg.chomp != "ok"
|
|
end
|
|
|
|
def hello
|
|
TCPSocket.open(@addr, @port) { |sock|
|
|
sock.puts "hello"
|
|
@hello = true if sock.gets.chomp == "hello"
|
|
}
|
|
end
|
|
|
|
def send_file_info(path)
|
|
hello unless @hello
|
|
|
|
TCPSocket.open(@addr, @port) { |sock|
|
|
sock.puts "file #{path} #{File.size path}"
|
|
get_resp sock
|
|
}
|
|
end
|
|
|
|
def send_file(path)
|
|
self.send_file_info path
|
|
TCPSocket.open(@addr, @port) { |sock|
|
|
sock.write File.read path
|
|
get_resp sock
|
|
}
|
|
end
|
|
|
|
def send_exec(path)
|
|
TCPSocket.open(@addr, @port) { |sock|
|
|
sock.puts "run #{path}"
|
|
get_resp sock
|
|
}
|
|
end
|
|
|
|
def send_return(path)
|
|
TCPSocket.open(@addr, @port) { |sock|
|
|
sock.puts "return #{path}"
|
|
File.open(path, "w+") { |file| file.write sock.read }
|
|
sock.puts "thanks"
|
|
}
|
|
end
|
|
end
|
|
|
|
def send_file_info(path)
|
|
TCPSocket.open("127.0.0.1")
|
|
end
|
|
|
|
bsc = BackShotClient.new "127.0.0.1", 8081
|
|
bsc.send_file "test.rb"
|
|
bsc.send_exec "test.rb"
|
|
bsc.send_return "happy.txt"
|
|
|