class ProxyChainRb::Server
Attributes
generated_proxy_url[RW]
instance_id[RW]
pid[RW]
pid_command[RW]
script_path[RW]
Public Class Methods
new(instance_id = nil)
click to toggle source
# File lib/proxy_chain_rb/server.rb, line 5 def initialize(instance_id = nil) self.script_path = File.expand_path("../node_js/proxy-chain-server/server.js", __FILE__) self.instance_id = instance_id.to_s.empty? ? SecureRandom.hex : instance_id self.pid_command = "ps aux | grep \"[n]ode\" | awk '/proxy-chain-instance-id-#{self.instance_id}/'" self.generated_proxy_url = nil end
Public Instance Methods
identify_pid()
click to toggle source
# File lib/proxy_chain_rb/server.rb, line 27 def identify_pid process = `#{self.pid_command}`.split("\n")&.select { |p| p =~ /proxy-chain-instance-id-#{self.instance_id}/i }&.first parts = process&.split(' ') pid = parts && parts.any? ? parts[1] : nil self.pid = !pid.to_s.empty? ? pid.to_i : nil end
start(proxy_url, tag: "default", started_at: Time.now, wait: 3)
click to toggle source
# File lib/proxy_chain_rb/server.rb, line 12 def start(proxy_url, tag: "default", started_at: Time.now, wait: 3) command = "((node #{self.script_path} \"#{proxy_url}\" proxy-chain-instance-id-#{self.instance_id} tag-#{tag} started-#{started_at.to_i} &)&)" IO.popen(command) do |io| self.generated_proxy_url = io.gets&.strip end # Wait a couple of seconds to let proxy-chain initiate the connection with the target proxy server sleep wait identify_pid return self.generated_proxy_url end
stop(retries: 3)
click to toggle source
# File lib/proxy_chain_rb/server.rb, line 34 def stop(retries: 3) stopped = false begin Process.kill("INT", self.pid) unless self.pid.to_s.empty? stopped = true rescue Errno::ESRCH => e identify_pid retries -= 1 retry if retries > 0 end return stopped end