Skip to content

Instantly share code, notes, and snippets.

@bjpirt
Created February 6, 2012 16:46
Show Gist options
  • Save bjpirt/1753219 to your computer and use it in GitHub Desktop.
Save bjpirt/1753219 to your computer and use it in GitHub Desktop.
Naughty Netcat
#!/usr/bin/env ruby
require 'rubygems'
require 'eventmachine'
class Client < EventMachine::Connection
def initialize(server)
@server = server
@server.client = self
@start_time = Time.now.to_f
end
def receive_data(data)
elapsed = Time.now.to_f - @start_time
if elapsed > $degradation_delay
delay = (elapsed - $degradation_delay) * $degradation_rate
EventMachine::Timer.new(delay) { @server.send_data(data) }
else
@server.send_data(data)
end
end
end
class ProxyServer < EventMachine::Connection
attr_accessor :client
def initialize(client_port)
@client_port = client_port
end
def receive_data(data)
client.send_data(data) if client
end
def post_init
EventMachine.connect '127.0.0.1', @client_port, Client, self
end
end
if ARGV.length < 2
puts "Usage: ./nnc.rb <server port> <client port> <degradation delay (30s default) > <degradation rate (0.1s delay/s default)>"
exit
end
server_port = ARGV[0].to_i
client_port = ARGV[1].to_i
$degradation_delay = (ARGV[2] || 30).to_i
$degradation_rate = (ARGV[3] || 0.1).to_f
puts "Proxying traffic on port #{server_port} to #{client_port}"
EventMachine::run {
EM.start_server("127.0.0.1", server_port, ProxyServer, client_port)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment