네 오늘은 아이피 차단시스템을 만들어보도록 하겠습니다.
사이트 짜증나게 도배하거나 하는사람을 위해 ㅋㅋ?
일단 먼저 보스 설명을 해드리고 실제로 어떻게 보이는지 보여드리겠습니다.
//는 루비,html에서 작동안합니다.
루비에서는 =begin,=end 시작 끝이구요 # = 한줄
html <!-- 시작 --> 끝입니다.
이것이 소스입니다... 많이 길죠? ㅋㅋ
그냥 쉬어 가면서 보게끔 하려고 만들었는데 뭐또 필요한거없나해서 여러개 넣어서....ㅋㅋ
이렇게 길어졌네요..
설명을 드리겠습니다.
require 'sinatra' require 'rest_client' require 'data_mapper' require 'rubygems'
여기까지는 DB,시나트라를 사용한다고 말해주는거구요.
DataMapper::setup(:default, "sqlite3://#{File.dirname(__FILE__)}/ip_block.db")
//DB파일을 어디다 만들지 셋팅하는것입니다.저는 main과같은곳에 ip_block.db 로만들었습니다. class Ip_block // ip_block 이라는 테이블? 을 만들어줍니다. include DataMapper::Resource // 그냥 있는거라고 보시면됩니다. property :id, Serial // 이 테이블안에서 유니크[1개밖에존재하지않음] column 입니다. 이게없으면 게시글 번호 같은것도없고,네그래요
// 주민등록번호같은겁니다. property :ip, String
//ip 라고하는 column 을 만들어줍니다. 스트링으로요 property :ipblock_date, String
//ipblock_date 라고하는 column 을 만들어줍니다. 스트링으로요 validates_uniqueness_of :ip //ip라는 column을 유니크하게? 만들어줍니다. 1개 밖에없음.
//ip차단 시키는데 한개 아이피가 여러번 씌여있으면 삭제도 어렵고해서요..
end DataMapper.finalize Ip_block.auto_upgrade!
// DB 불러와주는거라고 해야되나 하여간 이거 없으면 오류뜹니다.
// 코딩만 하다보니 설명하기가 어렵네요.. 머리에는 있는데 머리밖으로 나오질않음...
//아래 코드를 응용하시면 화이트리스트(지정된사람만 들어올수있는것.) 를만들수있죠 ㅋ
//화이트 리스트는 ip.nil? 하시면됩니다.
before do // 이게 씌여있으면 사이트에 접속을 했을때 가장먼저 실행이 되는거구요. ip = Ip_block.first(:ip => request.env['REMOTE_ADDR'].split(',').first)
// request.env['REMOTE_ADDR'].split(',') 이건 현재 아이피를 불러오는겁니다.
// 불러와서 Ip_block 이라는 DB 테이블에서 ip 라는것에 현재 접속한 사용자의 아이피와 비교해 있으면 ip 라는곳에 저장합니다. if !ip.nil?
// ip.nil? ip가 없냐고 물어보는거구요. !가들어가면 부정입니다. !ip.nil? ip가 없지않냐? 즉 !ip.nil? ip에 뭔가 들어있냐고 물어보는겁니다. redirect 'http://www.warning.or.kr/'
//조건이 맞았을때 http://www.warning.or.kr/ 사이트로 이동합니다.
//만약 페이지를 따로만들어서 하고싶으시다면 redirect 'http://www.warning.or.kr/' 이 자리에 erb:ip_block 하신다음 ip_block.erb 파일 만드시고 거기에 뭐넣으시면 //ip 차단된 사용자는 거기로 들어가집니다. 꼭 ip_block 아니여도 됩니다. asd 여도되고 z 여도됩니다. erb:z z.erb erb:asd asd.erb 이렇게요.. end end get '/' do erb:index end
// / 인덱스 즉 메인페이지를 만들어줍니다. 사이트 들어갔을때 바로보이는것. 이거안쓰면 따로 주소 써줘야됨. get '/admin' do @ip = Ip_block.all erb:admin end
//어드민 페이지에 Ip_block 에있는 데이터를 모두 불러와 @ip 에 저장합니다. get '/ip_del/:ip_id' do ip = Ip_block.first(:id => params[:ip_id]) ip.destroy redirect '/admin' end
// Ip_block 에 있는 id(아까말한 유니크) 와 ip_id 랑 같은지 비교해 같으면 ip 에저장합니다
// destory 아시죠? 해당 ip 를없앱니다.
그리고 /admin 으로 이동합니다.
post '/ip_block' do ip = Ip_block.new ip.ip = params[:ip] ip.ipblock_date = Time.now ip.save redirect '/admin' end
// Ip_block 을 새로만듭니다.
//ip.ip 에 사이트 이용자가 보내온 데이터를 담습니다.
//ip.ipblock_date 에 Time.now (지금 현재시간) 을 담습니다.
// 아이피를 저장합니다.
/admin 으로 이동합니다.
이상 메인 controller 설명은 끝났구요.
이거는 그냥 <img src="/lomal.jpg" style="width:100%;heith:100%;"> 이거만 보시면됩니다.
/lomal.jpg 를 불러옵니다. 가로 세로는 100% 로 하구요.
img 로 출력합니다.
<!DOCTYPE html> <html> <head> </head> <body> <label> 아이피 차단<form action="/ip_block" method="post"> <input type="text" name="ip"> <input type="submit" > </form>
// <input type="text" name="ip"> 에 무엇을 넣을수있게 그뭐냐 공간을 만들어줍니다.
// form 을 만들어주고 /ip_block 에 데이터를 보내주고 post 로 함. </label> <table class="table table-striped"> <td>번호</td> <td>차단아이피</td> <td>차단시킨 날짜</td> <br> </tr> <% @ip.each do |x| %>
// @ip 데이터가 없어질때까지 실행해줌 이렇게 설명해야되나... 음... 걍 @ip 처음부터 끝까지 다 돌려준다고생각하시면됩니다.
//|x| 는 음. @ip를 x라고 쓴다고 생각하시면됩니다. <td><%= x.id %></td>
// x.id 즉 @ip.id Ip_block 의 아이디 위에 유니크 그거 입니다. <td><%= x.ip %> </td> <td><%= x.ipblock_date %> </td>
//그러면 다 이해가실겁니다. <td> <a href="/ip_del/<%= x.id %>">[x]</a> </td>
// 이거는 [x] 를 클릭하면 /ip_del/<%= x.id %> 를 클릭하게 되잇는데... x.id 는 유니크 하니까 x.id 가 1이면 /ip_del/1 입니다.
//이걸 클릭하게되면 Ip_block 의 아이디가 1인 데이터를 삭제합니다.
<td> </td> </tr> <% end %> </table> </ul> <body> </html>
이게 메인페이지입니다.
그냥 이미지 밖에없어요.
어드민 페이지구요. 제가 임의로 넣어본겁니다. 삭제도 잘되구요..
제 아이피 라서 모자이크 처리했구요.
하여간 제아이피를 넣으면..
warning.or.kr 로 들어가집니다 ㅋㅋ
아까 알려드린 main에서 www.naver.com 으로 하시면 네이버로 들어가집니다.
소스는 올려둡니다.
글을 원래 매주 쓰는건데...
요즘 빠바서요 ㅋㅋ
꾸준히 쓰려고 노력하겠습니다.
지금까지 로말이였구요..
다음에는 더좋은 글 쓰겠습니다.
감사합니다.
'프로그래밍 > RUBY' 카테고리의 다른 글
Ruby 아이피 포트 스캐너 (0) | 2014.12.12 |
---|---|
루비,시나트라를 이용해 만든 문제 풀이 웹사이트. (3) | 2014.12.06 |
시나트라로 블로그만들기 첫번째 사이트 기본적인 뼈대 및 디자인! (0) | 2014.10.03 |
루비 언어 기초 문법들 한번에 알기 출력 부터 해쉬 까지 !!!!!!!!!!!! (4) | 2014.08.30 |
루비(Ruby),시나트라(Sinatra) 개발 환경 구축 하기 !!!!!! (2) | 2014.08.18 |