pythonchallenge level13

2009. 10. 22. 20:30


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

badcob War game/pythonchallenge