pythonchallenge level13
http://www.pythonchallenge.com/pc/return/disproportional.html
call him., 전화를 걸라는 것인가?
소스를 보면 그림의 중간 부분에 http://www.pythonchallenge.com/pc/phonebook.php 로
링크가 걸려 있는 걸 알 수 있다. 링크를 클릭해보면 XML error 메세지가 나온다.
해본게 도둑질이라고 phonebook.php 페이지에서 파라미터를 조작해서 넣어보았지만 같은 메세지만
나오더라. 이럴 땐 역시 포럼. 포럼에서 미국에서 phonebook에 대한 설명을 읽다보니 먼가 감이 왔다.
먼저 Python XML 관련 모듈들을 디벼보았다. Python에서 XML 프로그래밍 이라는 글이 눈에 띈다.
(http://coding-free.com/jython/tutor/python-xml.pdf)
아 이런 XML을 핸들링 할때는 이런 모듈이 쓰이는구나..
그러나 예제를 보면서 코드를 만지다보니 이게 아니다 싶었다. 단순히 XML 파일을 파싱하는 것이 아니라
XML 형식의 데이터를 주고 받아야 하기 떄문이었다,
XML에 대해서 먼저 알 필요가 있을거 같아서 xml 관련 정보를 찾다 다음 2개의 링크를 볼 수 있었다.
KLDP Wiki XML-RPC HOWTO
SIRINI님의 블로그 XML-RPC에 관한 시덥잖은 고찰
올커니. XML-RPC!! 파이썬에는 XML-RPC 클라이언트에서 사용하는 xmlrpclib 라는 모듈이 있다.
xmlrpclib — XML-RPC client access
이 녀석을 이용해서 문제를 해결해보자. 먼저 문제 페이지에는 phone that evil 이라고 적혀있다.
level12에서 gfx 파일을 받다가 우연찮게 본 파일에 Evil 이 누구인지 적혀 있었다.
(http://www.pythonchallenge.com/pc/return/evil4.jpg)
누구에게 걸어야 될지를 알았다. 이제 이 값을 전화번호부 페이지로 보내보자.
(서버에 등록된 메소드는 ServerProxy 객체의 ListMethods 를 통해 알 수 있다.)
import xmlrpclib name = 'Bert' proxy = xmlrpclib.ServerProxy('http://www.pythonchallenge.com/pc/phonebook.php') print 'method %s' % (proxy.system.listMethods()) print 'phone number %s' % str(proxy.phone(name))
위의 스크립트를 실행하면 555-ITALY 가 찍힌다. 이게 답인가 싶어 넣어봤지만 없는 페이지라고 나오던 중
italy를 쳐봤더니 다음 레벨을 볼 수 있었다. (찾느라 한참 삽질을 -_-;;)
http://www.pythonchallenge.com/pc/return/italy.html
'War game > pythonchallenge' 카테고리의 다른 글
pythonchallenge level 17 (1) | 2010.10.27 |
---|---|
pythonchallenge level16 (0) | 2009.12.04 |
pythonchallenge level 15 (0) | 2009.12.03 |
pythonchallenge level14 (0) | 2009.11.17 |
pythonchallenge level12 (0) | 2009.10.22 |
pythonchallenge level11 (0) | 2009.10.22 |
pythonchallenge level10 (0) | 2009.10.20 |
pythonchallenge level9 (0) | 2009.10.16 |
pythonchallenge level8 (0) | 2009.10.16 |
pythonchallenge level7 (0) | 2009.10.16 |