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