↑これにアクセス制限を付けたい。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require "webrick" def hostname_white? hostname /^white_hostname_pattern$/ =~ hostname end def address_white? address /^127.0.0.1$/ =~ address or /^192\.168\..+/ =~ address end document_root = ARGV[0] || "./" server = WEBrick::HTTPServer.new( # :DoNotReverseLookup => true, :DocumentRoot => document_root, :BindAddress => '0.0.0.0', :Port => 10081 ) server.mount_proc('/') do |req, res| peer_hostname = req.peeraddr[2] #=> "localhost" peer_address = req.peeraddr[3] #=> "127.0.0.1" if not address_white?(peer_address) # IPアドレスが不正な場合アクセス拒否 $stderr.puts "access denied address=#{peer_address}" raise WEBrick::HTTPStatus::Forbidden end if peer_hostname != peer_address # ホスト名が不正な場合アクセス拒否 if not hostname_white?(peer_hostname) $stderr.puts "access denied hostname=#{peer_hostname}" raise WEBrick::HTTPStatus::Forbidden end end WEBrick::HTTPServlet::FileHandler. new(server, document_root, { :FancyIndexing => true }). service(req, res) end Signal.trap(:INT){ server.shutdown } server.start