class NetRat
Attributes
ip[R]
port[R]
socket[R]
Public Class Methods
new(port, ip = nil)
click to toggle source
# File lib/netrat.rb, line 8 def initialize(port, ip = nil) @ip = ip @port = port @socket = nil end
Public Instance Methods
listen(options = {})
click to toggle source
# File lib/netrat.rb, line 14 def listen(options = {}) options[:keepalive] ||= false trap("SIGINT") do puts return end if (@ip.nil?) server = TCPServer.new(@port) server.listen(1) @socket = server.accept else @socket = TCPSocket.open(@ip, @port) end loop do if (IO.select([], [], [@socket, STDIN], 0)) server.close if (server) @socket.close if (@socket) return end begin while(!(data = @socket.recv_nonblock(100)).empty?) STDOUT.write(data); end break if (!options[:keepalive]) rescue Errno::ECONNRESET break if (!options[:keepalive]) rescue Errno::EAGAIN end begin while (!(data = STDIN.read_nonblock(100)).empty?) @socket.write(data); end break if (!options[:keepalive]) rescue Errno::EAGAIN rescue EOFError break if (!options[:keepalive]) end IO.select( [@socket, STDIN], [@socket, STDIN], [@socket, STDIN] ) end ensure server.close if (server) @socket.close if (@socket) end
Also aliased as: connect