Python/2.7 information 74

raw 소켓 파악하기 2.

아래 글에서 에러 발견. 아직 제대로 읽지 말 것. raw 소켓으로 이전 http://qkqhxla1.tistory.com/532 에서 하려했던 tcp 통신을 구현해보자. 앞에서 해봤던 icmp는 그냥 내가 한방향으로 보내기만 하면 와이어샤크에서 잡아서 볼수 있었는데, 이건 아니다. tcp는 3 핸드 쉐이킹을 한다. 이걸 다 구현해야 될것 같다.(아직 해보지는 않음.) 근데 3핸드쉐이킹이던 뭐던 생각하기 전에 일단 tcp패킷 자체를 만들어야 한다. TCP/IP이론은 예전에 수업에서 다 배웠었다. 가물가물해가며 찾은 결과 TCP는 IP위에 올라간다. 올라간다.? 는 말은 알고 있지만 구현하려면 뭐 어떻게 구현해야 한다는겨? 또 여기저기 찾아본결과 올라간다는 말은 구현하면 IP헤더 + TCP헤더 이런형식으로..

raw 소켓 파악하기 1.

최근에 개인적인 어플리케이션을 만들어보려고 했는데 네트워크에 대한 깊은 지식이 필요했다. 나름 공부도 열심히 해왔다고 자부했는데 이걸 만들려면 raw 소켓에 대한 지식이 필요하다는걸 알았고, raw 소켓을 파이썬에서 써본 적이 없다는 사실도 깨달았다.(간단히 해결할수있을것같아서 해봤으나 결국 포기. 자료가 별로 없어서 빡셌다.) 시간은 조금 있으니 일단 raw 소켓부터 공부하자는 마음으로 정리. 목표 : 아래의 기본적인 구글로 요청을 보내고 받아오는 tcp코드를 raw 소켓으로 만들어본다.구글로 요청을 보내고 받아오는 'tcp'소켓 코드. # -*- encoding: cp949 -*- import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)..

파이썬 내부구조 이해하기. 2.x

문제될시 댓글달아주시면 글 삭제하겠습니다.파이썬코리아에서 얻은 정보입니다.http://www.slideshare.net/dahlmoon/20160302-58759476에서 정보를 얻었으며 'Moon Yong Joon'님이 정리해주신 슬라이드를 바탕으로 얻어가는게 많은것 같아 공부를 위해 따로 정리했습니다.(제 공부를 위함이므로 앞 글에서 정리했거나 아는 내용은 제거했습니다.) 위에 적었듯이 문제될시 글 삭제하겠습니다. Keyword정보를 확인하기 위해 keyword를 import해서 출력해볼 수 있다. # -*- encoding: cp949 -*- import keyword print keyword print keyword.kwlist 파이썬 2.x버전은 print가 키워드라 함수처럼 처리가 안되어 함수..

python lambda function

나머지는 더 필요하면 찾아보고 좋은 블로그를 발견해서 그냥 쓰임새, 이렇게도 쓰일 수 있다 등만 간단히 정리. 항상 새로운거 볼때마다 생각의 폭이 넓어지는 느낌이 든다. 1. 일반적인 람다함수. 인자가 2개인 경우. a = lambda x,y:(x+3)*y print a(3,2) 2. 디폴트 매개변수 사용 가능 a = lambda x=4,y=3:x*y print a() 3. 다른 함수의 이름을 받아서 호출 가능. a = lambda a,b,c:a(b,c) def x(y,z): return y+z print a(x,2,3) 4. 아래 출처의 블로그 분이 보통 이렇게 사용한다고 함. def a(b,c,d): return b(c,d) print a(lambda x,y:x+y,3,4) 5. 가변 인자. 별개 다..

gotoxy, 콘솔 창 색깔 변화 colorama모듈.

종종 파이썬 시작하는사람들중에 c처럼 익숙해지기위해서 콘솔로 게임 만들어보는 사람들이 있는데 gotoxy같은것들이 없어서 찾다가 포기하고 tkinter같은걸 이용해서 어색하게 gui로 만드는걸 봐서... 1. c언어 gotoxy함수를 파이썬으로 구현해보기. 구글링해봤을때 확 나오는게 없길래 없는줄알았는데 의외로 네이버에서 발견... http://foreblog.tistory.com/812 아니면 win32api가 설치되있는분들은 이렇게 간단하게 가능... # -*- encoding: cp949 -*- import win32api from ctypes import Structure, c_short, windll, POINTER def gotoxy(x,y): class COORD(Structure): _fi..

지도 모듈 (구글맵, folium 등등.)

페이스북에서 http://blog.rtwilson.com/my-top-5-new-python-modules-of-2015/ 에 관한 정보를 봤다. 다른것도 나중에 언젠가 유용할것 같긴 한데 아직은 별로 쓸일이 없어서 따로 정리는 안해둠. 여기서 지도 모듈에 유용할것 같은 folium을 찾았고, 전에 쓰려다가 어려워서 묻어두었던 구글맵까지 같이 정리함. 1. 구글맵.공식 홈페이지 : https://pypi.python.org/pypi/googlemaps/ geocode 키 얻기 : https://developers.google.com/maps/ geocode를 이용해서 위치찾기(지금보니 별 쓸모는 없음. 그냥 참고.) : http://www.google.com/maps/api/geocode/json?lat..

Hello world 난독화하기.(번역)

source : https://benkurtovic.com/2014/06/01/obfuscating-hello-world.html 번역(translation) 이상한 해석이나 틀린점 있으면 지적해주시면 감사하겠습니다. 일부 의역 했습니다.(번역을 다 하긴 했는데 몇번 읽어보고 이해후 이상한 부분 수정이나 추가 설명 추가할 계획입니다.) 몇달 전에 엄청나게 난독화한 Hello world!라는 문자열을 출력하는 프로그램을 만들기 위해 Code Golf contest를 처음으로 갔다. 아래 코드가 결과물이고, 어떻게 작동하는지 설명해보기로 하겠다. 파이썬 2.7 환경에서 돌아간다. (lambda _, __, ___, ____, _____, ______, _______, ________: getattr( __i..

수학 관련 모듈 sympy, scipy

sympy와 scipy는 수학 식 관련해서 쓰기에 좋을 것 같다.sympy : http://docs.sympy.org/dev/modules/solvers/solvers.htmlscipy : http://www.scipy.org/ 두개의 방정식이 있을때 그것의 해를 파이썬으로 어떻게 구하느냐. 가 목적이어서 찾았는데 스택오버플로우에 이런 좋은 예시가 있었다. http://stackoverflow.com/questions/8739227/how-to-solve-a-pair-of-nonlinear-equations-using-python 혹시 모르니 예제도 복사해놓음. scipy예제.x+y^2 = 4e^x+ xy = 3 from scipy.optimize import fsolve import math def e..

poster module (upload image or file)

사진이나 파일을 업로드할 경우가 있을때, 사진같은경우 내부정보가 바이너리로 변경되고 multipart/form-data형식으로 전송된다. 그래서 막상 프로그래밍으로 구현하려면 어떻게 해야될지 몰랐다.(사진파일이 그냥 바이너리로만 바뀌어서 보내지는지, 추가되는점은 없는지 등등 중간 인코딩방식을 잘 몰라서. 생각해보니까 찾아보기도 귀찮아서 안찾은듯) 예전에 webhacking.kr 37번같은경우에는 그냥 마구잡이로 보내지는 패킷을 잡아서 소켓으로 어떻게어떻게 문서찾아가면서 구현했었는데, 지금보면 좀 억지로 만든 프로그램이다. 다시 읽어보니까 되게 원시적인 방법으로 했다. (지금 생각해보면 그거 하나 구현하려고 이리저리 삽질한게 공부에 많은 도움이 됬다.) 이번에 적을 poster모듈을 쓰면 메소드가 알아서 ..

pyexiv2 module (read and modify exif)

파이썬으로 exif정보를 읽고 수정할 수 있다.공식 : http://tilloy.net/dev/pyexiv2/download.html 튜토리얼(docs) : http://tilloy.net/dev/pyexiv2/tutorial.html 일반적으로 exif정보는 그냥 사진같은거에서 오른쪽클릭후 속성에서 자세히로 들어가 입력함으로서 바꿀수 있다. 그런데 당연하게도 자동화할 경우가 생기는데 이때 프로그래밍적으로 만지작거리기에 좋은것 같다. 이쪽은 잘 몰라서 이보다 더 좋은 모듈이나 툴이 있을지 모르겠다. 그냥 나처럼 가볍게 만지작거리기에는 좋음. # -*- encoding: cp949 -*- import pyexiv2 metadata = pyexiv2.ImageMetadata('camera.jpg') meta..

selenium

selenium download : https://pypi.python.org/pypi/selenium docs : https://selenium-python.readthedocs.org 크롬 드라이버 : https://sites.google.com/a/chromium.org/chromedriver/downloads selenium이란게 있다. 예를 들어 어떤 사이트에서 어떤 동작을 자동화시키는 파이썬 스크립트를 짜려고 할 때에 난감한 경우가 있다. 예를들면 입력한 데이터가 암호화되서 전송되는 경우에는 암호화 시키는 알고리즘까지 찾아서 구현을 해야하기때문에 구현난이도가 올라간다. 그런데 이 selenium을 쓰면 내가 직접 입력하는것처럼 데이터가 들어간다. 그러므로 전송되면서 내가 입력한 데이터가 바뀐다..

python .doc to .pdf, .xls to .pdf

공부때문에 이것저것 자료를 찾아보고 있는데, 자료가 .doc확장자로 있다. 개인사정으로 doc확장자인 파일을 열지 못해서, 변환 프로그램을 찾아보려다가 파이썬에 더 간단한 방법이 있음을 알았다. http://stackoverflow.com/questions/6011115/doc-to-pdf-using-python 소스 그대로 가져왔다. in_file에는 basic.doc라는 파일이 있을경우 이름인 basic만 넣어주고, out_file에도 .pdf는 알아서 붙여서 나오므로 이름만 넣어준다. pdf가 만들어지기 까지 5~10초정도 걸린다. # -*- encoding: cp949 -*- import sys import os import comtypes.client wdFormatPDF = 17 in_file..

is operator, raw string(r'', repr함수)

is 연산자는 주소값을 기반으로 값을 비교한다. ==는 순수하게 값이 같은지 비교하는데 반해,is는 주소값을 기반으로 값이 같은지 비교한다. ex) a = b = 10print a is b 그런데 이상한 예제가 하나 있다. 아래를 보자. a = int(str(5))b = 5print a is b 단순히 숫자 5를 str로 변환했다가 다시 int함수로 정수로 만들었다. 이건 True가 출력될것이다. 그리고 또다시 아래 예제를 실행해보자. a = int(str(500))b = 500print a is b ??? 숫자가 500으로 바뀌었을뿐인데 False가 출력된다. 왜그럴까?? 아래 링크에 답이 나와있다.http://stackoverflow.com/questions/132988/is-there-a-diffe..

(나중 참고용) 캡쳐 프로그램, 후킹모듈 기본

pyHook : https://pypi.python.org/pypi/pyHook pywin32 : http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/ http://k1rha.tistory.com/432 원래의 목적은 미리 실행시키고 포커스가 해당 cmd에서 떨어져도 스페이스바를 누르면 캡쳐가 되고, 해당 캡쳐화면은 내가 지정한 폴더 내부에 저장하는것이다. 종종 빠른 시간 내에 사진을 찍어서 전송할 일이 있다. 매번 스마트폰으로 사진을 찍고(내 화면을 찍음.) 하는게 매우 귀찮고, 또 느려서 전역적으로 후킹을 해서 스페이스바가 눌렸으면 현재 화면을 캡쳐하고, z를 두번 누르면 해당 캡쳐폴더를 압축해놓는게 프로그래밍의 목표였는데.... 일단..

python websocket 기초 참고용.(그냥 소켓 아님.)

나중에 쓸것같아서 기본적인것만 적어둠. 웹소켓 가장 기본적인 통신 예제이며, 윈도우에서 작동을 확인했다. 이거 파이썬 예시를 한동안 못찾다가 스택오버플로우에서 기초적이고 좋은 예시를 발견해서 가져다가 씀. 웹소켓 공식 문서 : http://dev.w3.org/html5/websockets/웹소켓 테스트용 사이트 : https://www.websocket.org/echo.html source : http://stackoverflow.com/questions/23562465/websockets-with-tornado-get-access-from-the-outside-to-send-messages-to-clien tornado : https://pypi.python.org/pypi/tornado 서버 실행시키..

파이썬다운(?) 코드.

여태까지 파이썬으로 이것저것 짜 보면서 왠만한건 다 만들수 있었고, 어느정도 익숙해졌다고 생각했는데 여태 파이썬을 제대로 못쓴것같다. c에 익숙하다가 파이썬으로 넘어와서 그런지 파이썬다운(?) 코드를 잘 못 짜는것 같다.(사실 c는 보안과는 다른 이유로 지금도 자주 쓰고있긴 하다.) 네이버에서 자료를 찾다가 한 질답을 보았는데 코드를 보고 신선한 충격을 받았다. (역시 고수의 코드를 살피기만 해도 도움이 된다.) http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=104&docId=223407592&qb=7YyM7J207I2s&enc=utf8&section=kin&rank=4&search_sort=3&spq=1 별거 아닌데 나같은경우 zip이나 dict같은건 그냥 개념..

파이썬 출력 format관련.

http://pyformat.info/ 의 내용을 다 정리해옴. 반은 알고 반은 모르는 출력형식이다. 직접 해봐서 익히거나 필요할때 찾기용으로 적어둠. http://khanrc.tistory.com/entry/Python-String-Format-Cookbook 에도 꽤 유용한 정보가 많다. # -*- encoding: cp949 -*- print '%s %s' % ('one', 'two') #오래된 방식의 기본 출력. print '{} {}'.format('one', 'two') #새로운 방식 print '{1} {0}'.format('one', 'two'),'\n' #이런식으로 바꿔서 출력 가능함. print '%10s' % ('test', ) #오래된 방식의 해당 자리에 맞춰서 출력함. 오른쪽에 맞..

wargame.kr pyc_decompile

http://wargame.kr:8080/pyc_decompile/ bughela.pyc를 준다. 이걸 해석해서 원하는 flag를 입력하면 된다. 이걸 우리가 보기 좋게 변환하는 모듈이 있다. uncompyle2모듈이다. 다운로드 : https://pypi.python.org/pypi/uncompyle2/1.1다운받아서 설치 후 import uncompyle2 with open("bughela.py", "wb") as fileobj: uncompyle2.uncompyle_file("bughela.pyc", fileobj) 이렇게 실행한다. 이 코드를 실행하면 bughela.py로 좋게 변환되어있다. 이게 아니라도 를 이용하면 된다. (Hide님의 글에서 가져왔음. http://hides.tistory.c..

분수 관련 fraction과 struct모듈

fraction모듈은 파이썬에서 정밀한 분수 처리 등에 이용된다.docs : https://docs.python.org/2/library/fractions.html#fractions.Fraction간단한 예제. # -*- encoding: cp949 -*- from fractions import Fraction print Fraction(1,5) #인자가 2개일경우 첫번째인자는 분자, 두번째인자는 분모. print Fraction(1.5) #인자가 하나일경우 해당 소수를 분수로 변환해줌. print sum([Fraction(1,i) for i in range(1,101)]) #1/1 + 1/2+ 1/3 + 1/4.... 1/100의 분수를 구하는 예제. print float(sum([Fraction(1,..

파이썬을 더 멋있게 쓰기위한 함수, itertools 모듈

파이썬 코드를 더 간지나게 짜기 위한 함수들.. 1. reducemap과 비슷한거지만 조금 다르다. 두번째인자로 순서형 자료(리스트같은거.)를 받는데 이걸 받아서 첫번째 함수를 실행시킨다. 첫번째 함수로 반드시 인자가 두개씩 들어가게된다. 두번째로 들어온 인자가 2개 이상이면, 차례차례 들어가게 된다. import operator print operator.add(1,2) print reduce(operator.add,[1,2,3,4,5]) #((((1+2)+3)+4)+5) 의 순서로 함수가 실행된다. map은 이런거 안됨. 2. apply첫번째 인자로 함수를 받지만 두번째 인자로는 첫번째 인자 함수의 인자 갯수만큼만 받을 수 있다. reduce처럼 자동으로 만들어서 실행시키는게 안됨. print app..

pyv8 (python javascript engine)

파이썬에서 자바스크립트 소스를 실행시킬수 있는 파이썬용 자바스크립트 엔진이다. 개인적으로 나름 많이 유용하다고 생각한다. 프록시에서 다른 사이트를 들어가거나, 네이버에서 로그인 시 자바스크립트로 암호화된 값을 던져주는데 이 값을 잘 받아서 쿠키에 설정을 잘 해야 동작이 잘 된다. 파이썬으로 자동으로 프록시에서 다른 사이트로 접속하는 스크립트를 짜려고 할 경우 이 자바스크립트값을 받아올 수가 없다.(확인 버튼을 누르는 순간 값이 생성되기 때문.) 그렇다고 자바스크립트를 일일히 다 해석해서 파이썬에 코드로 짜넣을 수가 없다.(천줄 이상의 긴 자바스크립트이기 때문에) 그럴 경우 자바스크립트 엔진을 이용해서 알아서 연산결과를 파이썬 코드로 가져와라~ 는 식으로 코드를 짜게되면 매우 편하다. 처음에 자바스크립트 ..

파이썬의 멀티쓰레딩과 멀티프로세싱.

문제될시 댓글달아주시면 글 삭제하겠습니다. 파이썬코리아에서 공유된 링크에서 얻은 정보이다. http://www.slideshare.net/kthcorp/h32011c6pythonandcloud-111205023210phpapp02?from_m_app=ios 에서 정보를 얻었으며 발표자는 '하용호' 님이다. 파이썬 클라우드에 대해서 발표를 하셨었는데 중간에 읽다가 멀티쓰레딩과 멀티프로세싱을 비교하는 부분이 개인적으로 얻어가는것 같아서 가져왔다. 이건 2버전얘기고 3버전에서는 바뀌어간다고 한다 : http://mydb.tistory.com/245여태까지 난 멀티프로세싱과 멀티쓰레딩은 거의 다른게 없다고 생각했다... 쓰레드는 프로세스의 하위개념이다. 나머지 차이는 별로 없는걸로 알고있는데 그게 아니었다.. ..

scapy 기초.

지인의 scapy 사용을 보고 해보려다가...윈도우용 scapy를 파이썬 2.7버전에 깔려다가 실패했다. 설치는 잘 된다. 다만 scapy안에서 dnet관련해서 에러뜨는 부분이 존재해서 삽질을 몇일동안 하다가 그냥 포기한다. 나 말고 고집이 생겨서 설치해보려는 사람이 있으면 진짜 꼭 필요한 상황이 아니고서는 시도해 보지 않기를 바람.... (아니면 2.6버전에 깔던지.) 일부 모듈중에 패치가 안된 모듈을 mingw까지 깔아서 재컴파일해봤지만 시간만 날렸....포기하고 리눅스에서 설치해봤는데 1분도 안걸려서 설치됬다. 앞으로 다시는 scapy를 윈도우에 설치하지 않겠습니다.설치 관련 url : http://www.secdev.org/projects/scapy/doc/installation.htmlscapy..

pythonpy, 리버스 커넥션 쉘(python 버전)

pythonpy설치.http://codingdojang.com/scode/371 에서 가져왔습니다. pip은 파이썬 관련 패키지를 설치할 때 가장 많이 사용하는 툴입니다.참고 : https://pypi.python.org/pypi/pip하지만 파이썬 설치 시 pip은 포함되지 않기 때문에 다음과 같은 방법으로 pip을 먼저 설치해 주어야만 합니다.윈도우즈윈도우즈의 경우는 다음 URL에서 바이너리를 다운받아서 설치하는게 가장 간편하겠네요:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip리눅스윈도우즈가 아니면 pip 을 설치하는 순서는 다음과 같습니다.1. easy_install 설치다음의 URL에서 distribute zip 파일을 다운로드 받은 후에 설치합니다.https..

스크린샷 찍는 pyscreenshot, 소리 재생 winsound 모듈.

pyscreenshot.공식 홈페이지 : https://pypi.python.org/pypi/pyscreenshot 파이썬으로 스크린샷을 찍을 수 있다.(별게다되네;;) 애초에 이걸 찾았던 이유는 웹게임의 프로그래밍 문제.... 중에서 문자인식 문제가 있는데, 문자가 말 그대로 그림 내부의 문자가 아니라 자바스크립트로 그려지는 문자라서 직접 손으로 캡쳐를 해서 분석을 해야한다. 물론 내가 직접 하는 방법도 있겠지만 그냥 찾아보니 나오고, 또 사용방법이 매우 쉬워보인다. 윈도우에도 설치는 가능. 공식 docs의 예제 코드. 아래에 인자로 들어가는 bbox는 캡쳐할 영역같다. (10,10)~(510,510) 웹게임 용도가 아니더라도 화면상에서 정확하게 일정 부분을 캡쳐해야 할 경우에 유용할 듯 싶다. # -..

rarfile module ( DareYourMind programming 3 )

docs : http://rarfile.readthedocs.org/en/latest/api.html download : https://pypi.python.org/pypi/rarfile/ 그리고 압축을 풀 unrar : rarfile을 커맨드라인으로 설치한다. 다운받은 rarfile경로로 들어가서. python.exe setup.py install. 압축을 풀 unrar을 실행시켜서 UnRAR.exe파일이 나오면 그걸 원하는 경로에 갖다둔다.(나같은경우는 C:\의 개인폴더.) rarfile이 설치된 경로로 들어간다.(Libs에서 rarfile.py를 찾아보면 나옴.) rarfile.py파일을 열어서 #: 'unrar', 'rar' or full path to either oneUNRAR_TOOL = "..

beautifulsoup

download : http://www.crummy.com/software/BeautifulSoup/bs4/download/ docs : http://coreapython.hosting.paran.com/etc/beautifulsoup4.html docs가 워낙 정리를 잘해놔서 별로 설명할건 없을듯. 이전에 말했듯이 파싱으로 beautifulsoup과 re모듈을 쓰는데, html등에서 파싱할때는 beautifulsoup가 더 가져오기가 쉽고, 조금 더 세밀한작업. 즉 내가 원하는 부분 등을 뽑아올 때는 re모듈이 더 좋다. 두개를 잘 혼용해서 쓰면 좋을것같다. 그리고 여태까지 모듈 다운로드에서 tar.gz로 끝나는 확장자면 리눅스에서밖에 안되는구나.. 하고 무의식적으로 생각했었는데 아니었다.(이런 멍청한..

python win32api

파이썬에서 win32api함수들을 쓸 수 있음. 쓸수 있는건 알았는데 공식 홈페이지에서도 예제코드가 없어서 어떻게하는지 한참 해매다가.... 삽질로 대충 사용법을 깨달았다. 1. 내가 가장 많이 쓸 함수인 keybd_event함수는 다른 c#이던 c++이던 거기서 쓰는 keybd_event함수와 사용법이 동일하다. 인자 순서도 같고, 인자값도 같다. 2. 가상 키 코드표 http://lab.cliel.com/entry/%EA%B0%80%EC%83%81-Key-Code%ED%91%9C 만 참조하면 키보드 입력은 거의 다 된다. ctrl+c같은 조합키도 된다 3. 또다른 많이 쓸 함수인 mouse_event도 나머지 언어의 api하고 다 같다. mouse_event함수의 두,세번째 인자는 현재의 마우스 커서..

유니코드, christmasctf a letter to her 500, los xavis

모든 한글 전체 출력 for i in range(0xd7a4-0xac00): print unichr(0xac00+i), #print '\n',unichr(0xac00),unichr(0xd7a3) #시작은 0xac00(가)부터 끝은 0xd7a3(힣)까지 어떤 웹사이트에 한글을 인코딩해서 보낼 시. urllib2.quote('가'.encode('utf-8')) 처럼 인코딩하면 utf-8로 변환해서 전송. christmasctf web500 (못풀었던거 writeup보고 코드만 짜봄.) 맨날 느끼는건데 writeup을 보면 풀수있는건데 막상 풀라고 하면 못푼다 ㅠㅠ writeup에서 루비 코드로 4줄?인가면 짜던데;파이썬은 [가..힣] 이런거 없나... # -*- encoding: cp949 -*- impor..