Python/2.7 simple coding(+ c++)

WeChall Training: Net Ports, Can you read me

qkqhxla1 2015. 1. 5. 12:50

Training: Net Ports

희한하게도 소스 포트를 설정하는 문제이다.(이런 문제는 처음 봄.) 소켓으로 보낼 생각을 하고,

소켓 옵션 설정하는 함수인 setsockopt함수에 뭔가 인자가 있어서 그걸로 어떻게 설정하면 될거라고

생각했는데 docs에 찾아봐도 없다.(내가 못찾은걸수도.) 구글링해보니

http://bytes.com/topic/python/answers/555361-how-set-source-ip-adress

에 어떤 분이 해결책을 적어주셨다.

서버를 여는것처럼 bind로 내 아이피 주소를 열고, 포트 인자로는 내 포트를 준다. 그 후에 바로 connect()함수로 내가 원하는 서버에 연결하면 bind된 아이피주소와 포트로 보내진다고 한다. 신기함.


# -*- encoding: cp949 -*-
import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('192.168.219.143',42)) #소스 포트 설정. 42번 포트로 소스 포트를 설정한다.
s.connect(('www.wechall.net',80)) 
message="""GET /challenge/training/net/ports/index.php HTTP/1.1
Host: www.wechall.net
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Referer: http://www.wechall.net/challs/Coding/by/chall_score/ASC/page-1
Cookie: 쿠키


"""
s.sendall(message)
print s.recv(7000)



Can you read me

전에 포스팅을 두번인가 했던 pytesser로 잘 보정하고 인식하게 해서 보내면 된다.

http://qkqhxla1.tistory.com/190




# -*- encoding: cp949 -*-
from pytesser import *
import urllib2,Image
 
def download_photo(filename):
    file_path = "%s%s" % ("C:\\Users\\Ko\\Documents\\Visual Studio 2012\\Projects\\PythonApplication37\\", filename)
    downloaded_image = file(file_path, "wb")
   
    req = urllib2.Request('http://www.wechall.net/challenge/can_you_readme/gimme.php')
    req.add_header('Cookie','쿠키')
    image_on_web = urllib2.urlopen(req)
    while True:
        buf = image_on_web.read()
        if len(buf) == 0:
            break
        downloaded_image.write(buf)
    downloaded_image.close()
    image_on_web.close()
    return file_path
 
while 1:
    req = urllib2.Request('http://www.wechall.net/challenge/can_you_readme/index.php') 
    req.add_header('Cookie','쿠키')
    urllib2.urlopen(req).read()
    print 'downloading...'
    download_photo('captcha.png')
    im = Image.open('captcha.png')
    x=3
    im.transform((im.size[0]/x,im.size[1]/x),Image.EXTENT,(0,0,im.size[0],im.size[1])).save('captcha.png') #크기보정.
    im = Image.open('captcha.png') 
    for i in range(0,im.size[1]): #색깔보정
        for j in range(0,im.size[0]):
            if im.getpixel((j,i)) > 0:
                im.putpixel((j,i),10)
    answer = image_to_string(im).rstrip()
    print 'answer =',answer
    req = urllib2.Request('http://www.wechall.net/challenge/can_you_readme/index.php?solution='+answer+'&cmd=Answer') 
    req.add_header('Cookie','쿠키')
    read = urllib2.urlopen(req).read()
    if read.find('wrong') == -1:
        print read
        break