루비독(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_procHAHWULSecurity engineer, Gopher and H4cker! |
0 개의 댓글:
Post a Comment