2012-06-29 05:18:28 +00:00
|
|
|
# -*- coding: binary -*-
|
2005-07-09 21:18:49 +00:00
|
|
|
require 'rex/socket'
|
|
|
|
require 'rex/socket/tcp'
|
|
|
|
require 'rex/io/stream_server'
|
2005-06-03 07:13:15 +00:00
|
|
|
|
2005-06-03 07:32:17 +00:00
|
|
|
###
|
|
|
|
#
|
|
|
|
# This class provides methods for interacting with a TCP server. It
|
2011-04-04 18:06:41 +00:00
|
|
|
# implements the Rex::IO::StreamServer interface.
|
2005-06-03 07:32:17 +00:00
|
|
|
#
|
|
|
|
###
|
2005-09-27 05:31:48 +00:00
|
|
|
module Rex::Socket::TcpServer
|
|
|
|
|
|
|
|
include Rex::Socket
|
2005-06-03 07:13:15 +00:00
|
|
|
include Rex::IO::StreamServer
|
|
|
|
|
|
|
|
##
|
|
|
|
#
|
|
|
|
# Factory
|
|
|
|
#
|
|
|
|
##
|
|
|
|
|
2005-07-16 07:32:11 +00:00
|
|
|
#
|
2005-11-15 05:22:13 +00:00
|
|
|
# Creates the server using the supplied hash.
|
2005-07-16 07:32:11 +00:00
|
|
|
#
|
2010-02-06 17:59:25 +00:00
|
|
|
def self.create(hash = {})
|
|
|
|
hash['Proto'] = 'tcp'
|
|
|
|
hash['Server'] = true
|
2010-04-27 14:39:09 +00:00
|
|
|
self.create_param(Rex::Socket::Parameters.from_hash(hash))
|
2005-07-16 07:32:11 +00:00
|
|
|
end
|
|
|
|
|
2005-06-03 07:13:15 +00:00
|
|
|
#
|
|
|
|
# Wrapper around the base class' creation method that automatically sets
|
2005-11-15 05:22:13 +00:00
|
|
|
# the parameter's protocol to TCP and sets the server flag to true.
|
2005-06-03 07:13:15 +00:00
|
|
|
#
|
|
|
|
def self.create_param(param)
|
|
|
|
param.proto = 'tcp'
|
|
|
|
param.server = true
|
2005-09-27 05:31:48 +00:00
|
|
|
Rex::Socket.create_param(param)
|
2005-06-03 07:13:15 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
#
|
2005-11-15 05:22:13 +00:00
|
|
|
# Accepts a child connection.
|
2005-06-03 07:13:15 +00:00
|
|
|
#
|
|
|
|
def accept(opts = {})
|
2010-04-27 14:39:09 +00:00
|
|
|
t = super()
|
|
|
|
|
|
|
|
# jRuby compatibility
|
|
|
|
if t.respond_to?('[]')
|
|
|
|
t = t[0]
|
|
|
|
end
|
2005-09-23 06:08:04 +00:00
|
|
|
|
|
|
|
if (t)
|
2005-09-27 05:31:48 +00:00
|
|
|
t.extend(Rex::Socket::Tcp)
|
2006-01-17 04:35:44 +00:00
|
|
|
t.context = self.context
|
2010-04-27 14:39:09 +00:00
|
|
|
|
2005-09-23 06:08:04 +00:00
|
|
|
pn = t.getpeername
|
|
|
|
|
|
|
|
t.peerhost = pn[1]
|
|
|
|
t.peerport = pn[2]
|
|
|
|
end
|
|
|
|
|
|
|
|
t
|
2005-06-03 07:13:15 +00:00
|
|
|
end
|
|
|
|
|
2010-04-27 14:39:09 +00:00
|
|
|
end
|
|
|
|
|