class BotNetwork
A worker. Dial home to receive ask for tasks.
Attributes
socket[R]
Public Class Methods
new()
click to toggle source
Initialize the worker.
# File lib/BotnetV2/Network.rb, line 49 def initialize end
Public Instance Methods
accept_clients(on_connect_handler, server)
click to toggle source
# File lib/BotnetV2/Network.rb, line 94 def accept_clients(on_connect_handler, server) loop do Thread.start(server.accept) do |socket| puts '[' + Time.new.strftime('%Y-%m-%d %H:%M:%S') + '] ' + 'Client connected.!' begin on_connect_handler.call(BotConnection.new socket, self) rescue => e puts e.backtrace unless socket.closed? disconnect socket end end puts '[' + Time.new.strftime('%Y-%m-%d %H:%M:%S') + '] ' + 'Client disconnected!' end end end
close(socket = @socket)
click to toggle source
# File lib/BotnetV2/Network.rb, line 122 def close(socket = @socket) socket.close unless socket.closed? end
connect(host, port, cert_file = File.open('cert.pem'))
click to toggle source
# File lib/BotnetV2/Network.rb, line 52 def connect(host, port, cert_file = File.open('cert.pem')) socket = TCPSocket.open host, port socket.setsockopt Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 expectedCert = OpenSSL::X509::Certificate.new(cert_file) ssl = OpenSSL::SSL::SSLSocket.new(socket) ssl.sync_close = true ssl.connect if ssl.peer_cert.to_s != expectedCert.to_s stderrr.puts 'Unexpected certificate' return nil end @socket = ssl end
connect_no_ssl(host, port)
click to toggle source
# File lib/BotnetV2/Network.rb, line 66 def connect_no_ssl(host, port) socket = TCPSocket.open host, port socket.setsockopt Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 @socket = socket end
listen(on_connect_handler, port, cert_pem = File.open('cert.pem'), private_pem = File.open('private.pem'))
click to toggle source
# File lib/BotnetV2/Network.rb, line 72 def listen(on_connect_handler, port, cert_pem = File.open('cert.pem'), private_pem = File.open('private.pem')) server = TCPServer.open(port) sslContext = OpenSSL::SSL::SSLContext.new sslContext.cert = OpenSSL::X509::Certificate.new(cert_pem) sslContext.key = OpenSSL::PKey::RSA.new(private_pem) sslServer = OpenSSL::SSL::SSLServer.new(server, sslContext) thread = Thread.start do puts '[' + Time.new.strftime('%Y-%m-%d %H:%M:%S') + '] ' + "Listening secured on port #{port}" accept_clients on_connect_handler, sslServer end thread end
listen_no_ssl(on_connect_handler, port)
click to toggle source
# File lib/BotnetV2/Network.rb, line 85 def listen_no_ssl(on_connect_handler, port) server = TCPServer.open(port) thread = Thread.start do puts '[' + Time.new.strftime('%Y-%m-%d %H:%M:%S') + '] ' + "Listening unsecured on port #{port}" accept_clients on_connect_handler, server end thread end
read(socket = @socket)
click to toggle source
# File lib/BotnetV2/Network.rb, line 115 def read(socket = @socket) res = socket.gets res = res.chomp if res res = JSON.parse(res) if res res end
send(message, socket = @socket)
click to toggle source
# File lib/BotnetV2/Network.rb, line 111 def send(message, socket = @socket) socket.puts(JSON.generate(message)) unless socket.closed? end