12/28/2015

[RUBY] WEBrick::mount_proc 메소드를 이용한 WEBrick 서버 내 Ruby 처리부분 만들기

WEBRick 클래스의 mount_proc 메소드를 사용하면 단순 웹 디렉토리 링크가 아닌 직접 웹접근 시 서버단에서 제어를 할 수 있게 됩니다. Servlet 같은 형태로 사용이 가능하지요.

루비독(ruby-doc.org)에서는 아래와 같이 정의되어 있습니다.

mount_proc(dir, proc=nil, &block) click to toggle source
Mounts proc or block on dir and calls it with a WEBrick::HTTPRequest and WEBrick::HTTPResponse

     # File webrick/httpserver.rb, line 158
def mount_proc(dir, proc=nil, &block)
  proc ||= block
  raise HTTPServerError, "must pass a proc or block" unless proc
  mount(dir, HTTPServlet::ProcHandler.new(proc))
end
            
우리가 mount_proc를 사용하면서 먼저 알아야할 점은 req 와 res 입니다.

req: request(헤더부터 데이터 부분까지 모두)
res: response(헤더부터 데이터 부분까지 모두)

두개로 나누어서 볼 수 있고, 해당 부분을 이용하여 클라이언트로부터 넘어온 Parameter 값을 사용하거나 Response 시 Type 등을 지정할 수 있습니다.

server.mount_proc '/add' do |req,res|   
                res['Content-Type'] = "text/html"  #Content-Type 지정
                res.body=wscan_list().to_s   #함수를 이용한 처리
                res.body=res.body+"<br><input type='text'>"  #HTML 처리
                end
위 코드를 간단히 보자면 server라는 WEBrick 객체에서 mount_proc를 이용하여 /add 페이지로 접근 시 동작하도록 설정한 내용입니다.

res['Content-Type'] = "text/html" 이 부분을 보면 res 내 Content-Type 영역에 "text/html" 데이터를 넣어주어 해당 페이지가 html 으로써 읽어질 수 있도록 설정하였습니다. (이 부분이 없으면 그냥 text만 노출됩니다. html tag 실행 불가)

res.body 값에 넘겨줄 response 데이터를 넣어주어 사용자로 하여금 일반 웹 서버에 접근한 것과 동일한 효과를 낼 수 있습니다. 이러면 WEBrick::mount 와 WEBrick::mount_proc 와 어떤 차이가 있을까 생각되겠죠.

mount_proc는 ruby로 짜여진 기능 부분을 넣기 좋은 것 같습니다. 제 코드에서는 wscan_list()
[개인적으로 쓰고있는 VunLink 의 Scan list 기능을 웹 행태로 나타나기 위해서 만든 함수] 함수를 사용해서 텍스트를 얻어와 웹에서 뿌려주는 형태로 동작할 수 있습니다.

Full Code

server = WEBrick::HTTPServer.new({:BindAddress => '127.0.0.1',
                                  :Port => '6644'})
server.mount_proc '/add' do |req,res|   
                res['Content-Type'] = "text/html"  #Content-Type 지정
                res.body=wscan_list().to_s   #함수를 이용한 처리
                res.body=res.body+"<br><input type='text'>"  #HTML 처리
                end
trap(:INT){server.shutdown}
server.start

Reference

http://ruby-doc.org/stdlib-1.9.3/libdoc/webrick/rdoc/WEBrick/HTTPServer.html#method-i-mount_proc


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment