我在服务器上有以下Ruby代码:
#!/usr/bin/env ruby
require "socket"
require "openssl"
cert_path = Dir["/etc/letsencrypt/live/example.com/fullchain.pem"].first
key_path = Dir["/etc/letsencrypt/live/example.com/privkey.pem"].first
chain_path = Dir["/etc/letsencrypt/live/example.com/chain.pem"].first
context = OpenSSL::SSL::SSLContext.new
context.cert = OpenSSL::X509::Certificate.new( File.read( cert_path ))
context.key = OpenSSL::PKey::RSA.new( File.read( key_path ))
context.extra_chain_cert = [ OpenSSL::X509::Certificate.new( File.read( chain_path )) ]
port = 4444
t = TCPServer.new( port )
s = OpenSSL::SSL::SSLServer.new( t,context )
begin
r = s.accept
rescue
# get client ip here
p r.methods.sort
end
我可以使用以下命令很好地连接到服务器:
curl https://example.com:4444
如果我故意这样导致错误(请注意使用http代替https):
curl http://example.com:4444
然后我似乎无法从任何地方获取客户端的IP地址,因为连接已经关闭。我受到类似这样的许多请求的攻击,并且想对这些IP地址进行防火墙保护,只有我需要这些地址才能这样做。知道如何获取导致错误的远程客户端的IP地址吗?捕获异常并打印错误对象不包含任何有用的信息。谢谢。