Python

    Python 숫자를 랜덤으로 뽑고, 뽑은 숫자가 이미 리스트에 있는지 체크하는 방법

    숫자를 랜덤으로 뽑고, 뽑은 숫자가 이미 리스트에 있는지 체크 한 뒤 더하는 코드입니다. import random # 뽑을 숫자 (1~10까지) pool = list(range(1, 11)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 와 동일한 의미의 코드임 numList = [] # numList 리스트 초기화 for num in range(50): # 50번 반복 randNum = random.choice(pool) # randNum 변수에 pool변수에 있는 숫자중 랜덤하게 하나를 골라 저장 if randNum in pool: # randNum(임의로 뽑힌 숫자)이 pool변수 안에 존재하는 요소중 하나와 중복되면 print("중복 값 있음") else: # 그렇지 않으면 numL..

    파이썬 코드 난독화

    개발한 프로그램을 배포하기 이전에 난독화 과정은 반드시 거쳐야한다고 생각한다. 나의 프로그램 역시 나의 자산이기 때문이다. Oxyry Python Obfuscator라는 온라인 파이썬 코드 난독화 툴을 이용해서 간단하게 파이썬 코드를 난독화 할 수 있다. 이 외에도 패커를 이용한 실행파일 패킹 등 여러가지 보호 수단이 있지만, 때때로 제대로 작동하지 않을 경우도 있고 무엇보다도 파이썬의 Pyinstaller와 같은 빌드툴을 이용하게 되면, 리버스 엔지니어링시 다른 언어보다 코드 원문이 더욱 쉽게 노출되기 때문에 난독화 과정은 거의 필수이다.

    파이썬에서 정규식을 이용해 특정 문자와 특정 문자 사이의 문자열을 구하는 방법

    'dsafasdf"helloworld"dsfafads' 위와 같은 문자열이 있다고 가정할 때, 큰따옴표(") 사이의 문자열인 "helloworld"만을 추출하고 싶을 땐 정규식을 사용하면 됩니다. import re string = 'dsafasdf"helloworld"dsfafads' regex = re.compile('{}(.*){}'.format(re.escape('"'), re.escape('"'))) text = regex.findall(string) print(text[0]) 위 코드에서 string 변수에 선언되어있는 문자열이 쓰레기값이 섞여있는 문자열이며, 여기서 "helloworld"라는 문자열만을 추출 하고 싶을 땐 정규식과 정규식을 작성할 수 있는 모듈인 re 모듈을 이용하면 편리하게 ..

    파이썬 Selenium 모듈을 이용한 트위터 팔로워 크롤러 개발

    실행 결과 해당 Python File이 위치한 경로에 export라는 디렉토리가 생성되고 export 디렉토리의 하위 txt파일로 targetName.txt라는 텍스트 파일이 생성되며, 해당 텍스트파일에는 targetName유저의 팔로워들의 ID가 아래와같이 저장됩니다. 개요 구글링을 꽤나 오랫동안 했지만, 파이썬의 Selenium 모듈을 이용하여 특정 유저의 팔로워 리스트를 추출하는 소스코드를 찾을수가 없어 직접 개발하였습니다. Twitter 공식 API센터에서 이와 유사한 내용을 얻을 수 있는 API가 존재하지만 1시간에 15명의 팔로워 리스트만을 반환해주는 API이기때문에 대량의 팔로워 리스트가 필요한 현재 상황에서 사용할 수 없다 판단하여 직접 스크래핑하게되었습니다. 전체 코드는 아래와 같습니다...

    파이썬으로 특정 파일의 절대경로를 얻는 방법

    프로그래밍을 하다보면 특정 파일의 절대경로를 얻어야하는 경우가 있습니다. 예를들면 특정 파일을 열어서 읽거나 쓰는 등의 파일입출력 기능을 사용할 때 주로 절대경로를 얻곤 합니다. # mydirname.py import os # 현재 mydirname.py가 위치한 경로의 Directory Name path = os.path.realpath(os.path.dirname(__file__)) # 프로그램을 exe로 빌드할때는 아래와 같이 사용해야한다. # path = os.path.realpath(os.path.dirname("__file__")) print(os.path.join(path, "target.file")) os.path.realpath 함수는 인자값으로 준 경로의 절대경로를 반환하는 함수입니다...

    파이썬의 특정 자료형의 형식을 가진 문자열을 리스트로 변환하는 방법

    아래와 같은 파이썬의 여러 자료형의 형태를 가지고 있는 문자열을 특정 자료형으로 형변환해야할 경우 ast 라이브러리의 literal_eval함수를 이용해 형변환할 수 있습니다. 빌트인 함수인 eval함수와의 차이점은 eval함수는 사용자의 입력이 자유롭게 가능한 경우 입력값으로 시스템에 공격을 가할 수 있다는 보안적 취약점을 가지고있는 반면, ast모듈의 literal_eval함수는 시스템에 공격을 가할수 없으며 단순히 표현식만을 변환하기에 보안적으로 안전합니다. 리스트의 형태를 가진 문자열을 리스트형으로 변환하는 경우 import ast string = "['a', 'b', 'c']" stringToList = ast.literal_eval(string) print(stringToList) print(..

    파이썬을 이용해 OTP 시스템 만들기

    Python과 Pyotp모듈을 이용해 간단한 OTP 시스템을 구현할 수 있다. $ pip3 install pyotp 위 명령을 이용해 pyotp모듈을 설치한다. 설명이 필요할정도의 복잡한 코드는 없기에, 라인별 주석 설명으로 코드해석은 대체한다. import pyotp # pyotp import datetime # 시간 라이브러리 # otp에 사용할 키 - base32 방식 A-Z 2-7까지를 이용하고 = 는 채워야하는 공간 패딩 처리용 otp_key = 'GAYDAMBQGADDAMBQGAYDAMBQGA======' # totp 생성 totp = pyotp.TOTP(otp_key) # 현재 시간 얻기 now = datetime.datetime.now() # 현재 시간 출력 print('current ti..

    Python과 C#을 이용한 소켓통신

    해당 포스트는 링크를 스크랩한 글이며 원작자는 명월님임을 안내드립니다. 아래 코드를 개인적으로 많이 사용하게 될것같아, 스크랩하였습니다. Python Server C# Client #Server.py # 소켓을 사용하기 위해서는 socket을 import해야 한다. import socket, threading; # binder함수는 서버에서 accept가 되면 생성되는 socket 인스턴스를 통해 client로 부터 데이터를 받으면 echo형태로 재송신하는 메소드이다. def binder(client_socket, addr): # 커넥션이 되면 접속 주소가 나온다. print('Connected by', addr); try: # 접속 상태에서는 클라이언트로 부터 받을 데이터를 무한 대기한다. # 만약 접..