added a fake tunnel tcp server
This commit is contained in:
parent
de91015f50
commit
60a9afeb06
2 changed files with 71 additions and 0 deletions
68
fake_tunnel_connector/fake_tunnel_connector.rb
Normal file
68
fake_tunnel_connector/fake_tunnel_connector.rb
Normal file
|
@ -0,0 +1,68 @@
|
|||
require 'socket'
|
||||
require './http.rb'
|
||||
require 'time'
|
||||
|
||||
class FakeTunnelConnector
|
||||
attr_accessor :port, :server
|
||||
def initialize(port)
|
||||
@port = port
|
||||
@server = TCPServer.open(port)
|
||||
end
|
||||
|
||||
def listen_and_respond
|
||||
tcp_socket = server.accept
|
||||
read_socket(tcp_socket)
|
||||
write_response(tcp_socket)
|
||||
tcp_socket.close
|
||||
end
|
||||
|
||||
def read_socket(tcp_socket)
|
||||
headers = []
|
||||
puts "Request Incoming:"
|
||||
puts "-------------------"
|
||||
# read lines from socket
|
||||
while (line = tcp_socket.gets) && (line.chomp.length > 0)
|
||||
# check for a valid http verb sent
|
||||
puts parse_http_start_request_line(line) if Http::METHODS.include?(line.split.first)
|
||||
header_line = parse_http_header_request_line(line)
|
||||
headers << header_line unless header_line.nil?
|
||||
end
|
||||
puts "Request Headers:"
|
||||
puts "-------------------"
|
||||
puts headers
|
||||
puts "\r\n"
|
||||
end
|
||||
|
||||
def parse_http_start_request_line(line)
|
||||
split_request = line.split
|
||||
verb = split_request.first
|
||||
location = split_request.select { |l| l if l.start_with?('/') }.first
|
||||
protocol = split_request.last
|
||||
{
|
||||
verb: verb,
|
||||
location: location,
|
||||
protocol: protocol
|
||||
}
|
||||
end
|
||||
|
||||
def parse_http_header_request_line(line)
|
||||
if line.split.first.end_with?(':')
|
||||
split_request = line.split(':')
|
||||
key = split_request[0]
|
||||
value = if split_request.count >= 3
|
||||
split_request[1] + ':' + split_request[2]
|
||||
else
|
||||
split_request[1]
|
||||
end
|
||||
Hash[key, value]
|
||||
end
|
||||
end
|
||||
|
||||
def write_response(tcp_socket)
|
||||
tcp_socket.sendmsg(ok)
|
||||
end
|
||||
|
||||
def ok
|
||||
"HTTP/1.1 200 OK\r\nDate: #{Time.now.utc}\r\n\r\nSuccess!\r\n"
|
||||
end
|
||||
end
|
3
fake_tunnel_connector/http.rb
Normal file
3
fake_tunnel_connector/http.rb
Normal file
|
@ -0,0 +1,3 @@
|
|||
class Http
|
||||
METHODS = %w[options get head post put delete trace connect].map(&:upcase)
|
||||
end
|
Loading…
Add table
Reference in a new issue