ksg97031의 등록된 링크

키자드에 등록된 총 50개의 포스트를 확인하실 수 있습니다.

Naver Blog

파이썬 BeautifulSoup 4 정리 (tag, id, class, find, findall, 등)

파이썬에서 HTML를 다루는 데는 BeautifulSoup가 대표적입니다. 물론 다른 파서도 있겠지만 가장 보편적으로 사용하는 것이 BeautifulSoup입니다. 크롤러에 보통 사용되고, 필요한 데이터를 추출하거나 모니터링하기 위해 원하는 HTML 코드를 가져올 수 있습니다. 설치 & 모듈 설명 이름은 굉장히 길지만 그냥 아름다운 수프로 기억하면 잊어버리진 않습니다. 설치 택 1 $ easy_install beautifulsoup4 $ pip install beautifulsoup4 bs4 모듈의 BeautifulSoup 클래스를 가져다 사용합니다. 그냥 사용하는 경우도 있고 별칭으로 간단하게 사용하는 경우도 있습니다. (복붙 중 SyntaxError: invalid character in identifier 에러가 발생하면 다 지우고 수동으로 입력해 주세요) from bs4 import BeautifulSoup # from bs4 import BeautifulSoup as Sou

Naver Blog

파이썬 for문 정리(문법, 구구단, 짝홀구분, 별찍기)

반복문이라고 불리는 python에서의 for문은 생각보다 엄청 많이 쓰입니다. (python for문 - 이 포스트로 다 담을 수 없을 정도로 다양하게 쓰이기 때문에 생각 날 때마다 올리겠습니다.) 파이썬 for문 일반 일반적인 for문은 range(범위)를 통해서 숫자를 반복합니다. 여기서 중요한 것은 range(0, 10)은 0부터 10까지에 범위가 아닌 0부터 9까지에 범위입니다. # 범위(range) 0 부터 10미만까지 반복(for) for i in range(0, 10): print(i) - result - 0 1 2 3 4 5 6 7 8 9 range에 전달되는 인자는 사실 하나 일수도 두 개 일수도 세 개 일수도 있습니다. 인자가 하나인 range(10)은 range(0, 10)과 동일합니다. 일반적으로 숫자의 범위는 0부터 시작하기 때문에 인자를 한 개만 주면 알아서 0부터 시작이겠구나 생략이 됩니다. 세 번째 인자는 step 굳이 풀어쓰자면 보폭(거리)입니다 이 세

Naver Blog

파이썬 input (입력 함수, input, raw_input 차이, 취약점)

입력 함수 input 파이썬 input 함수를 이용해 사용자의 입력을 받을 수 있습니다. num = input("숫자를 입력해주세요 : ") print(num) - result - 숫자를 입력해주세요 : 3010 3010 input 함수는 입력된 값에 형식에 맞게 자동으로 타입을 변환시킵니다. obj = input("입력해주세요 : ") print(type(obj)) print(obj) - result - 입력해주세요 : "hi hi" <type 'str'> hi hi 입력해주세요 : 3010 <type 'int'> 3010 입력해주세요 : 30.10 <type 'float'> 30.10 입력 함수 raw_input 파이썬 2의 raw_input 함수는 모든 입력값을 문자열 타입으로 받습니다. (불쌍하게도 raw_input 함수는 파이썬 3에서 삭제됐습니다.) obj = raw_input("입력해주세요 : ") print(type(obj)) print(obj) - result - 입

Naver Blog

파이썬 List 정리 (기본, 응용, 정렬, 다중 리스트, 삼중 리스트, 샘플 코드)

파이썬 List란 파이썬 List는 대표적인 자료형 중 하나입니다. 총 두 가지 방법으로 리스트를 만들 수 있고 각각의 장점이 있습니다. # 둘 다 동일합니다. A = list() # 가독성이 좋다. B = [] # 코드의 길이가 짧다. 파이썬의 리스트는 다양한 타입의 데이터들을 하나의 공간에 나열할 수가 있고, 원소의 인덱스(순서)를 참조해서 값을 가져올 수 있습니다. fruit = ['apple', 'banana', 'watermelon', 'strawberry'] price = [2000, 3000, 10000, 7000] complex = [1, 'apple', 1.0, 100, price, fruit] print(fruit[0]) >>> apple print(price[1]) >>> 3000 print(complex(2)) >>> 1.0 리스트 원소 추가, 삭제 (append, insert) 파이썬 리스트의 원소를 추가하는 방법은 세 가지가 있습니다. # append 함수

Naver Blog

urandom은 어떻게 안전한 랜덤 값을 생성할까?

우연히 난수를 생성하는 코드를 작성할 일이 있었고, 생각보다 비현실적이고 불가능하다는 생각이 들었다. 도대체 urandom은 신뢰할 수 있는 난수 값을 어떤 방식으로 반환하는 것인지, random은 왜 사용하면 안되는 것인지 동작 방식이 궁금해졌다. 의사난수 의사난수는 알고리즘을 통해 생성된 난수입니다. 실제로 무작위성이 아닌 예측 가능한 수열이지만, 충분히 복잡하고 예측이 어려워 대부분의 용도에서는 실제 난수처럼 사용할 수 있습니다. 특성 의사난수 (Pseudorandom number) 유사난수 (Quasirandom number) 무작위성 알고리즘에 의한 예측 가능한 수열 (완전한 무작위는 아님) 고르게 분포하는 난수, 균등 분포를 목표로 설계됨 생성 방식 시드 값에 의존한 알고리즘적 접근 수학적 알고리즘을 사용하여 고른 분포를 생성 분포 예측 불가능하지만 균등하게 분포하지 않을 수 있음 매우 균등하게 분포, 특히 고차원 샘플링에서 유리 용도 대부분의 게임, 암호화, 통계적 샘플

Naver Blog

Prepared statement는 어떻게 SQLi 공격을 보호할까?

Prepared statement은 템플릿 형식을 기반으로 매 실행 시마다 특정한 상숫값(Constant Value)으로 치환되어 데이터베이스 문을 실행시키도록 돕습니다. Database에서는 Prepared Statement를 Parser, Optimizer, Executor 과정으로 안전하게 실행시킵니다. Parser 가장 먼저 Parser는 DB 쿼리를 의미론적으로 해석합니다. 컴파일러에서 동작하는 방식과 동일하게 SQL 명령문은 Syntax Tree 구조로 변경되고, 이 때 각 DB의 문법이 사용됩니다. 아래 구문을 보면, ?는 WHERE 절 뒤의 <Cond>에서 등호(=) 앞이나 뒤에 있는 <Attr>로 파싱됩니다. Syntex Tree SQL 인젝션(SQLi) 공격은 주로 구문 구조가 변경되면서 발생하는데, Prepared Statement를 사용하면 이 문제가 해결됩니다. Prepared Statement에서는 값이 어떤 형태든 구문의 구조가 변경되지 않으며, 입력 값은

Naver Blog

혼용되어 불리는 네 가지 난독화 기법 및 고려사항

소스코드를 보호하기 위한 기법으로 크게 "소스코드 난독화, 바이너리 암호화, VM 난독화, 패킹" 네 가지가 흔하게 사용됩니다. 소스코드 난독화 소스코드 난독화는 말 그대로 소스코드를 뒤죽박죽 만들어서 리버싱 엔지니어링을 힘들게 만드는 보호 작업을 의미입니다. 난독(명사) -읽기 어려움 네이버 사전 (1) 컴파일 전 원본 소스코드(*.java) 자체를 난독화하는 경우 첫 번째는 자바스크립트 소스코드 난독화가 대표적입니다. 단순히 소스코드 자체를 어떠한 컴파일 단계도 거치지 않고 난독화하는 경우입니다. 요즘 웹 번들은 소스코드를 작게 만드는 Minify 기능이 포함돼 있으며, 변수명을 더 작게하고, 불필요한 공백/개행 문자를 삭제하는 작업이 포함됩니다. 이 또한 최적화 목적을 가졌지만 결과적으로는 난독화 기능이 포함됩니다. JS Minify 최적화가 아닌 방어만을 목적으로 둔 소스코드 난독화는 의도적으로 가짜 코드를 삽입하거나, 변수를 일부로 추가하고, 제어 흐름 자체를 꼬는 등 소스

Naver Blog

jQuery AJAX 비동기 통신으로 Get, Post 전송하기(예제)

JavaScript jQuery AJAX 비동기 통신으로 Get, Post 전송하기(예제) KSG 2017. 11. 1. 0:29 이웃추가 본문 기타 기능 AJAX는 비동기 통신입니다. HTTP 요청의 필요한 URL 주소, 헤더, 인자 정보들과, 비동기 통신 특성상 각 요청의 응답할 콜백 함수가 필요합니다. 위 내용들을 모두 들어간 소스 코드가 아래에 있습니다. var xhttp = new XMLHttpRequest(); xhttp.open("POST", "/ex.php", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("id=1&pw=2"); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { alert("성공"); } else{ alert("에러");

Naver Blog

jQuery each 함수(index, 예제)

JavaScript jQuery each 함수(index, 예제) KSG 2017. 11. 1. 2:02 이웃추가 본문 기타 기능 jQuery로 가져온 여러 태그들에게 동일한 코드를 동작시켜야 할 때가 있습니다. 예를 들어 <p> 태그가 4개가 있는데 이 태그들에 id를 다음과 같이 변경시키려고 합니다. <p>A</p> <p>B</p> <p>C</p> <p>D</p> --> <p id="0">A - Apple</p> <p id="1">B - Banana</p> <p id="2">C - Camera</p> <p id="3">D - Digiter</p> 이럴 땐 each 메소드를 사용하면 쉽게 해결됩니다. $(this)는 each 문으로 순차적으로 가져와지는 p 태그 중 하나입니다. var list = ["Apple", "Banana", "Camera", "Digiter"]; $("p").each(function(index) { $(this).attr('id', index); // id

Naver Blog

[Keras를 사용한 머신 러닝] mnist 코드 탐구 (1)

Python [Keras를 사용한 머신 러닝] mnist 코드 탐구 (1) KSG 2018. 6. 20. 1:09 이웃추가 본문 기타 기능 mnist 데이터 가져오기 (x_train, y_train), (x_test, y_test) = mnist.load_data() 깃헙에서 가져온 해당 코드입니다. @tf_export('keras.datasets.mnist.load_data') def load_data(path='mnist.npz'): """Loads the MNIST dataset. Arguments: path: path where to cache the dataset locally (relative to ~/.keras/datasets). Returns: Tuple of Numpy arrays: `(x_train, y_train), (x_test, y_test)`. """ path = get_file( path, origin='https://s3.amazonaws.com/img

Naver Blog

[Keras를 사용한 머신 러닝] mnist 코드 탐구 (2)

Python [Keras를 사용한 머신 러닝] mnist 코드 탐구 (2) KSG 2018. 6. 20. 1:10 이웃추가 본문 기타 기능 (x_train, y_train), (x_test, y_test) = mnist.load_data() print(x_train.shape) print(y_train.shape) print(x_test.shape) print(y_test.shape) 이미지 데이터는 28 * 28 배열로 총 784개의 원소를 갖는 2차원 배열로 표기됩니다. 따라서 이미지 개수에 따라서 3차원 배열로(개수, 28, 28) 표시됩니다. >>>> (60000, 28, 28) (60000,) (10000, 28, 28) (10000,) 위에 있는 x y train, x y test의 모양(shape)을 출력한 결과를 보면, 60000개의 이미지는 훈련용(train) 10000개의 이미지는 시험(test) 용으로 분류, 총 7만 개에 이미지 데이터가 사용된 걸 알 수 있습니

Naver Blog

[Keras를 사용한 머신 러닝] mnist 코드 탐구 (3)

Python [Keras를 사용한 머신 러닝] mnist 코드 탐구 (3) KSG 2018. 6. 20. 1:10 이웃추가 본문 기타 기능 이번에 탐구할 코드는 이것입니다. y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) x_val = x_train[:42000] x_train = x_train[42000:] y_val = y_train[:42000] y_train = y_train[42000:] keras.utils.np_utils 패키지에 있는 to_categorical 함수는 바로 One-hot 인코딩을 해주는 함수입니다. 원-핫 인코딩이란 10진 정수 형식을 특수한 2진 바이너리 형식으로 변경합니다. 파라미터로 값에 크기만큼 0으로 된 배열을 만들고, 파리미터 값 위치에만 1(hot)을 넣어줍니다. 아래 예시 보면 이해가 됩니다. >>> from keras.utils impo

Naver Blog

Observer, Lifecycle, ViewModel 이란? [안드로이드]

서론 사실 Fragment 자체를 사용해본 적이 없어서 Observer, Lifecycle, Viewmodel이 무엇인지 전혀 모르는 상태입니다. 그런 상태에서 샘플 앱을 하나 작성하려고 아래 "Bottom Navigation Activity"를 선택했는데, 알 수 없는 코드가 존재했습니다. 그게 바로 아래 ViewModel, Observer, LifecycleOwner 친구입니다. homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); 해당 친구들이 무슨 목적을 가지고 존재하며, 어떤 기능을 하는지 간단히 확인하고자 합니다. ViewModel 해당 클래스는 수명 주기를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었습니다. ViewModel

Naver Blog

파이썬 내장 모듈로 보는 해시 알고리즘

최초 해시 값은 고정된 값으로 되어있다. 다른 문서를 봤을 때, 해시 알고리즘마다 고정된 값이 있는 것 같다. static void sha_init(SHAobject *sha_info) { sha_info->digest[0] = 0x6A09E667L; sha_info->digest[1] = 0xBB67AE85L; sha_info->digest[2] = 0x3C6EF372L; sha_info->digest[3] = 0xA54FF53AL; sha_info->digest[4] = 0x510E527FL; sha_info->digest[5] = 0x9B05688CL; sha_info->digest[6] = 0x1F83D9ABL; sha_info->digest[7] = 0x5BE0CD19L; sha_info->count_lo = 0L; sha_info->count_hi = 0L; sha_info->local = 0; sha_info->digestsize = 32; } https://github

Naver Blog

파이썬 format 완전 정리 (포맷팅, %, format, f-string, 장단점)

파이썬format 파이썬 포맷팅에는 두 가지 방법이 있습니다. 바로 %와 format 함수를 이용하는 것입니다. % 포맷팅 % 포맷팅은 % 연산자와 포맷 스트링을 사용하는 방법입니다. 대표적인 포맷 스트링으로는 %d, %s, %f가 있습니다. >>> print("integer : %d, string : %s, float : %f" % (100, "str", 1.1)) integer : 100, string : str, float : 1.100000 >>> print("hi my name is %s." % "ksg") hi my name is ksg. % 연산자와 포맷 알파벳 사이에 숫자를 넣을 수도 있습니다. # 숫자만큼 공간 확보 >>> print("my name is ~%5s~" % "ksg") my name is ~ ksg~ >>> print("my name is ~%5s~" % "hong") my name is ~ hong~ >>> print("my name is ~%5s~"

Naver Blog

파이썬 파일 정리 (Open / Close / Write / Mode)

파이썬 Open / Close / Mode / - 파이썬 File 정리 1 파이썬으로 파일을 새로 작성하거나, 기존 내용을 수정하는 일이 많이 있다. 생각나는 여러 가지 경험들을 글로 작성한다. 1. File Open 가장 간단하게 파일을 작성하는 것은 아래와 같다. open이라는 내장 함수를 사용하는데, 이 함수는 file type을 반환한다. (C언어에서 흔히 나오는 파일 디스크립터를 결국 쓰는 것이니 파일 디스크립터라고 하자) f = open("test.txt", "w") # 파일 디스크립터 생성 f.close() # 파일 디스크립터 삭제 Open 함수의 첫 번째 인자는 절대 경로 혹은 상대 경로가 될 수 있고, 두 번째 인자는 파일 모드를 나타난다. 필요한 내용만 이해하면 된다. 2. File Mode w 파일을 write-only 모드로 새로 생성한다. w+ 파일을 read & write 모드로 새로 생성한다. r 파일을 read-only 모드로 가져온다. r+ 파일을 re

Naver Blog

파이썬 파일 덮어쓰기 / 내용추가 - 파이썬 File 정리 2

파이썬 파일 덮어쓰기 / 내용추가 - 파이썬 File 정리 2 w 모드를 사용하게 되면 파일의 기존 내용이 날아가기 때문에, 사용하는 것을 추천하지 않고 만약 w 모드를 사용해야만 한다면 파일을 read only 권한으로 추가해서 읽고 내용을 백업해놔야 합니다. 굉장히 불필요한 작업이죠. 덮어쓰기 # 목표 파일 속 특정 닉네임의 점수를 수정 원래 데이터를 읽어야만 수정하고자 하는 파일 위치를 알 수 있습니다. # filename: scores.txt ksg: 100 alph: 80 sin: 90 luna: 100 따라서 read 권한이 필요하고, 당연히 수정을 해야 하기 때문에 write 권한이 존재하는 모드를 선택해야 합니다. 일반적으로 기존 파일을 덮어쓸 때는 r+ 권한을 자주 사용합니다. seek는 덮어쓸 파일의 위치를 지정하기 위해 사용되고, format은 공백을 채우기 위해 사용합니다. 예를 들어 100이라는 점수를 80으로 그냥 덮어쓰면 800으로 덮어써지기 때문에 for

Naver Blog

파이썬 requests 정리 (get, post, headers, cookie, session)

파이썬 requests는 굉장히 자주 쓰이는 HTTP 라이브러리입니다. 내장으로 포함된 urllib는 생각보다 사용하기 복잡하여 requests를 자주 사용했고, 이에 대한 수요가 증가한 탓인지 urllib보다 requests를 선호하는 경우도 많이 보게 됩니다. (requests 내부에서 urllib를 사용합니다. 보다 편한게 사용할 수 있도록 하는 Wrapper라고 보시면 됩니다) 예시에는 https://httpbin.org/ 사이트를 목적지로 사용했습니다. 해당 API를 사용하면 결괏값으로 자세한 HTTP 통신을 확인할 수 있습니다. httpbin.org httpbin.org 0.9.2 [ Base URL: httpbin.org/ ] A simple HTTP Request & Response Service. Run locally: $ docker run -p 80:80 kennethreitz/httpbin the developer - Website Send email to th

Naver Blog

파이썬 리스트 완전 정리 (추가, 삭제, 변경, 응용, 다중 리스트, 샘플 코드)

파이썬 리스트란 파이썬리스트 파이썬 리스트는 대표적인 자료형 중 하나입니다. 총 두 가지 방법으로 리스트를 만들 수 있고 각각의 장점이 있습니다. # 둘 다 동일합니다. A = list() # 가독성이 좋다. B = [] # 코드의 길이가 짧다. 파이썬의 리스트는 다양한 타입의 데이터들을 하나의 공간에 나열할 수가 있고, 원소의 인덱스(순서)를 참조해서 값을 가져올 수 있습니다. fruit = ['apple', 'banana', 'watermelon', 'strawberry'] price = [2000, 3000, 10000, 7000] complex = [1, 'apple', 1.0, 100, price, fruit] print(fruit[0]) >>> apple print(price[1]) >>> 30000 print(complex(2)) >>> 1.0 리스트 원소 추가, 삭제 파이썬 리스트의 원소를 추가하는 방법은 세 가지가 있습니다. # append 함수 >>> l = lis

Naver Blog

파이썬 format 완전 정리 (포맷팅, %, format, f-string, 장단점)

파이썬format 파이썬 포맷팅에는 두 가지 방법이 있습니다. 바로 %와 format 함수를 이용하는 것입니다. % 포맷팅 % 포맷팅은 % 연산자와 포맷 스트링을 사용하는 방법입니다. 대표적인 포맷 스트링으로는 %d, %s, %f가 있습니다. >>> print("integer : %d, string : %s, float : %f" % (100, "str", 1.1)) integer : 100, string : str, float : 1.100000 >>> print("hi my name is %s." % "ksg") hi my name is ksg. % 연산자와 포맷 알파벳 사이에 숫자를 넣을 수도 있습니다. # 숫자만큼 공간 확보 >>> print("my name is ~%5s~" % "ksg") my name is ~ ksg~ >>> print("my name is ~%5s~" % "hong") my name is ~ hong~ >>> print("my name is ~%5s~"

Naver Blog

파이썬 int (타입별 형변환 방법)

Python 파이썬 int (타입별 형변환 방법) KSG 2017. 10. 27. 2:07 이웃추가 본문 기타 기능 파이썬 int 파이썬에도 정수형을 저장하는 int라는 타입이 있습니다. >>> a = 4 >>> type(a) <type 'int'> 타입별 형변환 보통 형변화는 타입(값) 형식으로 코드를 작성해주시면 됩니다. # int to string, float >>> a = 3010 >>> str(a) "3010" >>> float(a) 3010.0 # string to int, float >>> a = "3010" >>> int(a) 3010 >>> float(a) 3010.0

Naver Blog

파이썬 주석(단일 라인 주석, 다중 라인 주석)

Python 파이썬 주석(단일 라인 주석, 다중 라인 주석) KSG 2017. 10. 27. 2:13 이웃추가 본문 기타 기능 파이썬주석달기 파이썬의 주석은 "//"가 아닌 #과 """입니다. 단일 라인은 #을 사용하시면 되며, 다중 라인은 """를 사용하시면 됩니다. 자세한 파이썬 주석 사용은 아래의 예제를 참고하시길 바랍니다. 단일 라인 주석 # 단일 라인 주석 num = 4 # num 변수를 4로 할당. # num 미만 숫자 출력 for i in range(num): print(i) 다중 라인 주석 ''' code : comment writer : ksg date : 2017-10-27 ''' def func(param1, param2): ''' 함수명 : func 인자 : param1 => 정수형: 설명, param2 => 실수형: 설명 작성자 : ksg ''' print param1, param2

Naver Blog

파이썬 range, xrange 차이(제너레이터, 이터레이터)

Python 파이썬 range, xrange 차이(제너레이터, 이터레이터) KSG 2017. 10. 28. 3:15 이웃추가 본문 기타 기능 range, xrange 메모리 차이 range로 생성된 모든 값들은 메모리에 적재됩니다. range(10000)을 하게 되면 실제로 0부터 10000까지 범위에 원소들이 메모리에 적재됩니다. 많은 범위를 생성할수록 메모리의 부하가 커지게 됩니다. xrange는 실제적으로 사용할 때, 상황에 맞춰서 필요한 값만 메모리에 올라갑니다. xrange(10000)을 하게 되면 단순히 xrange(10000)만 정의될 뿐 어떠한 메모리 변화가 일어나지 않습니다. sum = 0 for i in range(100000000): if i % 2 == 0: sum += i print sum range sum = 0 for i in xrange(100000000): if i % 2 == 0: sum += i print sum xrange 원래 4.20GB 메모리

Naver Blog

폰갭 설치부터 앱 빌드까지 튜토리얼

JavaScript 폰갭 설치부터 앱 빌드까지 튜토리얼 KSG 2017. 10. 30. 19:40 이웃추가 본문 기타 기능 폰갭(PhoneGap)은 니토비(Nitobi)가 만들고 어도비 시스템즈가 인수한 모바일 개발 프레임워크이다. 소프트웨어 프로그래머들이 오브젝티브-C 처럼 기기에 특화된 언어들 대신 자바스크립트, HTML5, CSS3를 이용하여 모바일 기기를 위한 응용 프로그램들을 만들 수 있게 한다. 응용 프로그램 결과물들은 하이브리드 형태인데, 이는 모든 레이아웃 렌더링이 플랫폼의 네이티브 UI 프레임워크가 아닌 웹 뷰를 통해 수행되며 단지 웹앱일 뿐만 아니라 배포를 위해 패키지화되면서 네이티브 기기 API에 접근할 수 있음을 의미한다. 1.9 버전부터 네이티브 코드와 하이브리드 코드 일부를 자유롭게 섞어서 쓸 수도 있다. 폰갭 - 위키백과, 우리 모두의 백과사전 폰갭 폰갭 PhoneGap 원저자 Joe Bowser, Michael Brooks, Rob Ellis, Dave

Naver Blog

jQuery click 이벤트 (select, button, tag)

JavaScript jQuery click 이벤트 (select, button, tag) KSG 2017. 10. 30. 23:29 이웃추가 본문 기타 기능 제이쿼리(jQuery)에서 가장 많이 쓰이는 click 이벤트 사용 예제입니다. 일반 태그는 아래와 같이 쓰면 됩니다. $("p").click(function(){ alert("click 1"); }); 아이디(id), 클래스(class)를 이용한 click 함수도 동일합니다. $("#tag_id").click(function(){ alert("click 2"); }); $(".tag_class").click(function(){ alert("click 3"); }); select 태그에서 option 리스트로 클릭되는 태그는 아래와 같이 click 이벤트를 등록할 수 있습니다. function process(option_name){ alert(option_name); /* switch (option_name){ case 1:

Naver Blog

jQuery CSS 스타일 변경, 추가, 제거하기(예제 코드)

JavaScript jQuery CSS 스타일 변경, 추가, 제거하기(예제 코드) KSG 2017. 10. 30. 23:56 이웃추가 본문 기타 기능 jQuery를 이용해서 HTML 태그로 등록된 Style을 변경, 추가, 제거할 수 있습니다. 원하는 타겟를 css 함수를 이용해서 스타일 이름과 값을 정의해주시면 됩니다. // 사용법 : $(TAG).css(STYLE_KEY, STYLE_VALUE); $("div").css("display", "block"); $("p").css("font-size", "12px"); $("img").css("width", "171px"); $("div#box").css("border","solid 3px red") // 스타일 다중 설정 $("div#box").css({ "width": "500px", "height": "300px", "font-size": "12px" }); 인자를 하나만 주면 해당 태그의 css 값을 가져올 수 있습니다. va

Naver Blog

자바스크립트(JS) replace를 replace All 처럼 사용하기(정규표현식)

JavaScript 자바스크립트(JS) replace를 replace All 처럼 사용하기(정규표현식) KSG 2017. 10. 31. 21:56 이웃추가 본문 기타 기능 JS에서 replace 함수를 사용하면 가장 처음에 해당하는 문자열만 교체가 됩니다. var str = "1, 2, 3, 4"; str = str.replace(", ", "/"); - result - str - "1/2, 3, 4"; 만약 모든 문자열을 교체하고 싶으면 처음 인자에 "/g" 키워드를 포함시켜주면 됩니다. var str = "1, 2, 3, 4"; str = str.replace(/, /g, "/"); - result - str - "1/2/3/4"; 이 키워드는 정규표현식에 사용되는 것들이며 총 세가지가 있습니다. i Perform case-insensitive matching g Perform a global match (find all matches rather than stopping aft

Naver Blog

Heap Exploit, The House of Force

http://www.mathyvanhoef.com/2013/02/understanding-heap-exploiting-heap.html Understanding the Heap & Exploiting Heap Overflows This post will begin with a high level description of the heap and slowly builds up untill you able to write your own heap-based exploits. W... www.mathyvanhoef.com static void* _int_malloc(mstate av, size_t bytes) { INTERNAL_SIZE_T nb; /* normalized request size */ mchunkptr victim; /* inspected/selected chunk */ INTERNAL_SIZE_T size; /* its size */ mchunkptr remainder;

Naver Blog

파이썬 for문 완전 정리(문법 모음, 구구단, 짝수홀수, 별찍기)

반복문이라고 불리는 python에서의 for문은 생각보다 엉청 많이 쓰입니다. (python for문 - 이 포스트로 다 담을 수 없을 정도로 다양하게 쓰이기 때문에 생각 날 때마다 올리겠습니다.) 파이썬 for문 일반 일반적인 for문은 range(범위)를 통해서 숫자를 반복합니다. 여기서 중요한 것은 range(0, 10)은 0부터 10까지에 범위가 아닌 0부터 9까지에 범위입니다. # 범위(range) 0 부터 10미만까지 반복(for) for i in range(0, 10): print(i) - result - 0 1 2 3 4 5 6 7 8 9 range에 전달되는 인자는 사실 하나 일수도 두 개 일수도 세 개 일수도 있습니다. 인자가 하나인 range(10)은 range(0, 10)과 동일합니다. 일반적으로 숫자의 범위는 0부터 시작하기 때문에 인자를 한 개만 주면 알아서 0부터 시작이겠구나 생략이 됩니다. 세 번째 인자는 step 굳이 풀어쓰자면 보폭(거리)입니다 이 세

Naver Blog

파이썬 % (변수 출력, 나머지 연산자)

변수 출력에 사용되는 % print 함수를 사용하다 보면 %d, %s, %f를 많이 볼 수 있습니다. 이런 것들을 바로 포맷 스트링이라고 불리고, 이 포맷 스트링을 이용해 문자열을 만드는 걸 문자열 포맷팅이라고 합니다. (별로 안 중요합니다.) %d는 숫자(digit) %s는 문자열(string) %f는 실수(float) 보통 정수나 실수를 문자열로 만들려면, 문자열 타입으로 형 변환을 해줘야 하는데, 이런 작업을 포맷 스트링을 이용하면 쉽게 할 수 있습니다. integer = 3010 string = "3010" float = 3010.11 print("integer : %d ~" % integer) print("string : %s ~" % string) print("float : %f ~" % float) 괄호를 이용해서 포맷팅은 복수개로 할 수도 있습니다. A = "this is a" B = "this is b" C = 3 print("'%s' and '%s' and %d"

Naver Blog

파이썬 input (입력 함수, input, raw_input 차이, 취약점)

Python 파이썬 input (입력 함수, input, raw_input 차이, 취약점) KSG 2017. 10. 24. 22:59 이웃추가 본문 기타 기능 입력 함수 input 파이썬 input 함수를 이용해 사용자의 입력을 받을 수 있습니다. num = input("숫자를 입력해주세요 : ") print(num) - result - 숫자를 입력해주세요 : 3010 3010 input 함수는 입력된 값에 형식에 맞게 자동으로 타입을 변환시킵니다. obj = input("입력해주세요 : ") print(type(obj)) print(obj) - result - 입력해주세요 : "hi hi" <type 'str'> hi hi 입력해주세요 : 3010 <type 'int'> 3010 입력해주세요 : 30.10 <type 'float'> 30.10 입력 함수 raw_input 파이썬 2의 raw_input 함수는 모든 입력값을 문자열 타입으로 받습니다. (불쌍하게도 raw_input 함

Naver Blog

파이썬 if문(조건문, 조건 연산자)

Python 파이썬 if문(조건문, 조건 연산자) KSG 2017. 10. 24. 23:11 이웃추가 본문 기타 기능 파이썬 if 문 if 문 파이썬에는 if, elif, else라는 조건문이 있습니다. for 문과 마찬가지로 가장 많이 쓰는 문법 중 하나입니다. 주로 쓰이는 조합은 if 문 조합은 if - else 혹은 if - elif 혹은 if -elif - else 조합입니다. num = 3010 # num은 3010입니다. if num == 2010: # 만약에(if) num이 2010이면 print('num is 2010') elif num == 2030: # 이전 조건이 다르고(el) 만약에(if) num이 2030이면 print('num is 2030') else: # 이전 조건이 모두 다르면 print('Cant found num') elif 문은 여러 번 사용이 가능합니다. num = 3010 # num은 3010입니다. if num == 2010: print('n

Naver Blog

파이썬 http 통신 (get, post 값 전달하기, timeout)

Python 파이썬 http 통신 (get, post 값 전달하기, timeout) KSG 2017. 10. 24. 23:44 이웃추가 본문 기타 기능 Requests 모듈 설치 굉장히 개인적으로 urllib 보다 requests 모듈이 사용하기 훨씬 편하기 때문에, requests 모듈을 사용하시는 걸 추천드립니다. 윈도우는 cmd로 리눅스, 맥은 terminal에 다음과 같은 명령어를 입력하여 설치해줍니다. (권한 에러가 발생하면 sudo를 붙여주세요.) > pip install requests 윈도우를 사용하시고 계시고, pip가 없다면 아래와 같이 입력해주시길 바랍니다. > cd C:\Python27\Scripts > pip.exe install requests Get 메소드로 값 전송 import requests url = "http://hacksg.tistory.com" r = requests.get(url, params={'id': 'ksg', 'pw': 'passwor

Naver Blog

파이썬 해시 모듈(md5, sha256, sha512 핵스로, 파일 해시)

Python 파이썬 해시 모듈(md5, sha256, sha512 핵스로, 파일 해시) KSG 2017. 10. 25. 0:01 이웃추가 본문 기타 기능 해시는 특정 값에 무조건적으로 1:1 맵핑이 되고 평문에 유추가 어렵습니다. 이를 이용해서 프로그램적으로 해시를 이용하면 안전하고, 빠른 검색이 가능합니다. 예를 들어 로그인 시스템을 구축한다고 하면 패스워드는 무조건적으로 평문이 아닌 해시로 저장해야 합니다. 실제 평문 패스워드와 해시값은 1대 1로 맵핑 됐기 때문에 서버 관리자는 고객의 비밀번호가 아닌, 비밀번호 해시를 서버에 저장하고, 로그인 시 해시를 비교하여 나중에 서버가 털려도 고객의 비밀번호 유추가 힘들어집니다. 빠른 검색이 가능합니다. 파일과 파일을 비교하려면 서로의 데이터 값을 순서대로 비교를 해야 하는데, 파일이 커질수록 성능 부담이 커집니다. 그러기 때문에 파일에 데이터를 해시화해서 저장한 후, 해시 값을 통해 비교를 하면 정확하고 빠른 검색이 가능해집니다. ha

Naver Blog

파이썬 난수(랜덤 값) 가져오기(random, secrets, urandom)

Python 파이썬 난수(랜덤 값) 가져오기(random, secrets, urandom) KSG 2017. 10. 25. 0:25 이웃추가 본문 기타 기능 Random 모듈 파이썬에는 Random 모듈이 있습니다. 이 모듈을 통해서 다양하게 랜덤 한 값을 가져올 수 있습니다. 정수 랜덤 값(randint) # 정수 랜덤 값 가져오기 from random import randint print(randint(0, 9)) # 로또 번호 추천 from random import randint lotto_count = 7 # 6 + 1(bonus) for i in range(lotto_count): print(randint(1, 45)) 랜덤 선택 (randchoice) # 랜덤 값 선택하기 from random import choice foo = ['a', 'b', 'c', 'd', 'e'] print(choice(foo)) 완전 랜덤 값(urandom) 리눅스, 유닉스 계열 운영체제는 /

Naver Blog

파이썬 크롤링(네이버 차트, 벅스 차트)

파이썬 크롤링 모듈 설치 pip install requests pip install BeautifulSoup4 파이썬크롤링 네이버 차트(파이썬 크롤링) import requests from bs4 import BeautifulSoup url = 'http://datalab.naver.com/keyword/realtimeList.naver' headers = { 'user-agent': 'Chrome/65.0.3325.181 - Python Crawler' } r = requests.get(url, headers=headers) html_code = r.text soup = BeautifulSoup(html_code, 'html.parser') rank_inner = soup.find('div', {'class': 'rank_inner'}) for rank, span in enumerate(rank_inner.findAll('span', {'class': 'title'})): prin

Naver Blog

pwntools 설치

$ apt-get install python2.7 python2.7-dev python-pip $ pip install pwntools

Naver Blog

for dictionary

dd = {'john':3, 'mary':4, 'jane':5, 'vicky':7} for kk, vv in dd.iteritems(): print kk, ' is ', vv

Naver Blog

쉬운 카나리 릭

실제로 scanf 입력에서는 enter값 위치에 00 값으로 대치한다. fgets도 입력한 값 다음에 00값을 넣는다. scanf는 aa\x0a -> aa\x00 fgets는 aa\x0a -> aa\x0a\x00 fgets(buf,10,stdin)는 a*10 -> 'a'*9+"\x00"로 처리한다. 이런 말을 하는 이유는, 아래에 설명할 메모리 릭은 \x00 처리를 해주지 않는 read 함수라는 예를 통해 일어나기 때문이다. ----------------------- Source ----------------------- #include <unistd.h> #include <stdio.h> int main(int argc, char **argv) { setvbuf (stdout , NULL, _IOLBF, 0); char buf[8]; printf("Name : "); read(0,buf,sizeof(buf)+1); printf("%s\n",buf); read(0,buf,512);

Naver Blog

remote fsb echo2

xinetd, attach gdb로 분석하면서 했다. 1. 하나에 메모리는 주소를 만들고, 2. 그 주소에 다 값을 넣는다. 위 과정을 반복하면서, 쉘코드를 넣고 pop pop ret을 넣고, 쉘코드를 실행 시켰다.

Naver Blog

arm vector rewrite attack

http://doar-e.github.io/blog/2014/04/30/corrupting-arm-evt/ Corrupting the ARM Exception Vector Table - Diary of a reverse-engineer doar-e.github.io

Naver Blog

powerline error

Traceback (most recent call last): File "/usr/local/bin/powerline-config", line 4, in <module> import pkg_resources File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 37, in <module> import email.parser File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/email/parser.py", line 12, in <module> from email.feedparser import FeedParser File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/email/feedparser.py", line 27, in <mo

Naver Blog

쉘 명령어

$_ : 이전 명령어 $$ : 숫자값 echo $? : 리턴값 $? 바로 이전에 실행된 명령의 종료상태 값을 나타냅니다.$$ 현재 shell process id 를 나타냅니다. subshell 에서도 같은 값을 가집니다.$! & 연산자를 이용하여 가장최근에 background 로 실행된 process id 를 나타냅니다.$_ 이전 명령에서 사용된 마지막 인수를 값으로 가집니다. 사용된 인수가 없으면 명령을 리턴합니다.$- Set 명령에 의해 현재 shell 에 enable 되있는 option flags 을 보여줍니다. ${pwd} ls ${HOME}/.. #! 나머지 라인을 해당 파일을 실행하기 위한 인터프리터 |& 는 stdout, stderr 둘 다 파이프로 전달하며 2>&1 | 와 동일한 의미입니다. https://mug896.gitbooks.io/shell-script/content/shell_operators.html - 제일좋음 현재 디렉토리 ~+ 는 현재 디렉토리를 나타

Naver Blog

php streams, wrappers , curl

http://php.net/manual/kr/wrappers.php http://www.sitepoint.com/using-php-streams-effectively/ http://www.sitepoint.com/%EF%BB%BFunderstanding-streams-in-php/ http://curl.haxx.se/docs/httpscripting.html

Naver Blog

Objectived C Func

http://stackoverflow.com/questions/1638834/how-to-check-if-a-file-exists-in-documents-folder

Naver Blog

https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&oquery=8000%EB%8B%A8%EC%96%B4&ie=utf8&query=%EB%B9%85%EB%B3%B4%EC%B9%B4

https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&oquery=8000%EB%8B%A8%EC%96%B4&ie=utf8&query=%EB%B9%85%EB%B3%B4%EC%B9%B4 빅보카 : 네이버 통합검색 '빅보카'의 네이버 통합검색 결과입니다. search.naver.com

Naver Blog

64bit 함수 호출규약

0x00000000004005e1 <+23>: mov DWORD PTR [rsp+0x40],0xf 0x00000000004005e9 <+31>: mov DWORD PTR [rsp+0x38],0xe 0x00000000004005f1 <+39>: mov DWORD PTR [rsp+0x30],0xd 0x00000000004005f9 <+47>: mov DWORD PTR [rsp+0x28],0xc 0x0000000000400601 <+55>: mov DWORD PTR [rsp+0x20],0xb 0x0000000000400609 <+63>: mov DWORD PTR [rsp+0x18],0xa 0x0000000000400611 <+71>: mov DWORD PTR [rsp+0x10],0x9 0x0000000000400619 <+79>: mov DWORD PTR [rsp+0x8],0x8 0x0000000000400621 <+87>: mov DWORD PTR [rsp],0x7 0x000000000

Naver Blog

xinetd 등록

vi /etc/xinetd.d/???? service ???? { disable = no flags = REUSE socket_type = stream wait = no user = root server = /tmp/read-able } echo -e "read-able\t????/tcp" >> /etc/services /etc/init.d/xinetd restart nc localhost ????

1