Ruby/Rails中Python sys.addAuditHook等效实现及Socket日志方案
Ruby中少改代码记录Socket操作的方案
Ruby没有像Python sys.addAuditHook 那样专门的内置审计钩子,但有两种实用方案可以帮你在几乎不修改业务代码的前提下,记录所有Socket操作:
1. 使用TracePoint API全局追踪方法调用
TracePoint是Ruby内置的事件追踪工具,可以捕获方法调用、对象创建等底层事件,无需修改原类的代码。你可以通过它过滤Socket相关的关键方法调用,记录事件详情。
示例代码:
require 'socket' # 初始化TracePoint,监听方法调用事件 trace = TracePoint.new(:call) do |tp| # 精准过滤需要追踪的Socket相关方法 target_methods = { TCPServer => [:open], Socket => [:accept], BasicSocket => [:puts, :close] # client是BasicSocket的子类,监听这里覆盖实例操作 } if target_methods.any? { |klass, methods| tp.defined_class <= klass && methods.include?(tp.method_id) } caller_info = tp.binding.caller_locations(1, 1)[0].to_s puts "[Socket Audit] #{tp.defined_class}##{tp.method_id} | Args: #{tp.args.inspect} | Caller: #{caller_info}" end end # 启动追踪 trace.enable # 你的原业务代码,完全不需要修改 server = TCPServer.open(2017) loop { client = server.accept client.puts "hello world" client.close } # 停止追踪(按需使用) trace.disable
这个方案无需修改任何Socket类的实现,通过全局事件监听完成审计;缺点是全局追踪会有轻微性能损耗,需要精准过滤目标方法避免冗余日志。
2. 猴子补丁(Monkey Patch)关键Socket类
通过重写Socket相关类的目标方法,在方法执行前后添加日志逻辑,这种方式性能更好,日志更精准,而且同样不需要修改业务代码,只需要在程序启动时加载补丁即可。
示例代码:
require 'socket' # 给TCPServer类的open方法添加日志 class TCPServer class << self alias_method :original_open, :open def open(*args) puts "[Socket Audit] TCPServer.open | Args: #{args.inspect}" original_open(*args) end end end # 给Socket类添加accept、puts、close方法的日志 class Socket alias_method :original_accept, :accept def accept puts "[Socket Audit] Socket#accept" original_accept end alias_method :original_puts, :puts def puts(*args) puts "[Socket Audit] Socket#puts | Data: #{args.inspect}" original_puts(*args) end alias_method :original_close, :close def close puts "[Socket Audit] Socket#close" original_close end end # 原业务代码保持不变 server = TCPServer.open(2017) loop { client = server.accept client.puts "hello world" client.close }
这个方案性能开销小,日志逻辑直接绑定到目标方法,不会捕获无关事件;需要注意的是,如果其他第三方库也修改了这些Socket方法,可能会出现冲突,适合作为长期的审计方案。
两种方案都能满足你“少改代码、记录底层Socket操作”的需求,临时调试用TracePoint更灵活,长期审计用猴子补丁更稳定。
内容的提问来源于stack exchange,提问作者ebdavis
相关产品推荐
相关产品推荐

