모의해킹(Penetration Testing) PortScanner 8. 업그레이드3 : optparse 기능

8.   업그레이드3: optparse 기능

지금까지는 포트 스캐너 자체의 기능을 향상시키는 도구에 대해서 알아보았다이전 프로그램들은 다른 방식으로 동작시키려면 코드를 열어서 값을 직접 찾아 수정해야 하는 불편함이 있었다 챕터에서는 지금까지 만든 스캐너를 좀더 동적인 방법으로 기능을 제공하도록 구현하겠다.

 

 

 

1)    optparse?

 

optparse 라이브러리는 기본적으로 Python에서 제공된다 라이브러리를 이용하면 Argument 효과적으로 전달할  있다아마 여러분은 이런 도움말을 본적이 있을 것이다다음은 nmap 도움말이다.

 

 

 

1
2
3
4
5
6
7
8
c:\> nmap -h
Nmap 6.47 ( http://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
  Can pass hostnames, IP addresses, networks, etc.
  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL <inputfilename>: Input from list of hosts/networks
... 중략 ...
cs

 

 

 

 

 

그리고 nmap 도움말을 참고하여 옵션 값을 전달하면 프로그램 내부에  값들을 전달  사용하여 프로그램을 진행한다.

 

 

 

1
c:\> nmap 192.168.157.133 –sS –sV -O
cs

 

 

 

 

 

  전에 공부한 것처럼 위에 있는 Arguments 의미는 이미 알고 있을 것이다이렇게 동적으로 프로그래밍을 실행할  있다면 프로그램의 유연성은 더욱 커질 것이다. optparse 사용하여 우리가 만든 스캐너에 간단하고 효과적으로 Argument 전달해보자.

 

 

 

 

 

2)    optparse 작성하기

 

먼저 간단하게 숫자와 연산 방법을 전달하는 프로그램을 만들어보자간단한 테스트를 통하여 여러분은 optparse 기능들을 파악할  있을 것이다.

 

 

 

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
#! python
#! -*- coding: utf-8 -*-
# simple optparse calculater
 
import optparse
 
# optparse
parser = optparse.OptionParser('usage Calc.py -n <tgtNum> -o <operation>')
parser.add_option('-n', dest='tgtNum', type='string', help='write numbers with comma')
parser.add_option('-o', dest='operation', type='string', help='specify operation + - * / %')
(option, args) = parser.parse_args()
 
# 전역 변수 초기화
tgtNum = option.tgtNum.split(',')
oper = option.operation
operStr = ""
 
# 연산자 붙이기
for num in tgtNum:
    operStr += num + oper
 
# 마지막 연산자 제거
operStr = operStr[:-1]
 
#결과 출력
print('result is ' + str(eval(operStr)))
cs

 

 

 

 

 

이제 cmd 창으로  프로그램을 실행하여 여러 가지 테스트를 해보자.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\> calculater.py -h
Usage: usage Calc.py -n <tgtNum> -o <operation>
 
Options:
  -h, --help    show this help message and exit
  -n TGTNUM     write numbers with comma
  -o OPERATION  specify operation + - * / %
C:\> calculater.py
usage Calc.py -n <tgtNum> -o <operation>
C:\> calculater.py -n 1,1,1,1,1 -o +
reuslt is 5
C:\> calculater.py -n 1,2,3,4,5 -o *
result is 120
cs

 

 

 

 

 

‘-h’ 삽입한 경우 도움말을정확한 option 넣지 않았을 경우에 usage 메시지를 띄우고 있다또한 값을 전달하여 argument 사용한 결과를 나타낸다.

 

 

 

코드 분석

 

 

 

8
parser = optparse.OptionParser('usage Calc.py -n <tgtNum> -o <operation>')
cs

 

parser 객체를 만들면서 기본적인 도움말을 입력할  있다.

 

 

 

9
10
parser.add_option('-n', dest='tgtNum', type='string', help='write numbers with comma')
parser.add_option('-o', dest='operation', type='string', help='specify operation + - * / %')
cs

 

 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

  add_option() 함수를 사용하면 옵션으로 사용할 agurment들에 대해 정의할  있으며간단한 도움말도 삽입가능하다 번째 인자(‘-n’) 옵션 사용시 명시할 옵션 값이고, dest 어떤 변수에 값을 넣을  정한다. type 읽는 값의 type 명시할  있으며, help에는 옵션에 대한 간단한 도움말을 입력할  있다.

 

 

 

11
(option, args) = parser.parse_args()
cs

 

 

 

  커맨드 라인으로부터 받은 값을 option 저장한다.

 

 

 

13
14
15
# 전역 변수 초기화
tgtNum = option.tgtNum.split(',')
oper = option.operationoperStr = ""
cs

 

 

 

전역변수 초기화 시에 커맨드라인으로부터 전달 받은 값들을  변수에 전달한다 번째 옵션인 tgtNum 같은 경우는 split() 함수를 사용하고 있는   함수는 문자열을 쉼표 단위로 나누어서 list 형식으로 전달한다다음 예제를 보면서 이해하자.

 

 

 

1
2
3
4
5
6
>>> str1 = '1,2,3,4,5'
>>> list1 = str1.split(',')
>>> list1
['1''2''3''4''5']
>>> list1[0]
'1' 
cs

 

  억지로 어렵게 비효율적인 프로그램을 만들었지만  프로그램을 통해서 optparse 역할에 대해서  이해했을 거라 생각한다여기서 중요한 부분은 주석으로 쓰여진 ‘#optparse’ ‘#전역 변수 초기화’ 부분이다. nmap optparse 적용하기 전에 충분히 이해하도록 하자.

 

 

 

 

 

3)    Nmap Scanner에 optparse 적용하기

 

 마지막 업그레이드인 optparse 추가한 Nmap Scanner이다여러분들 또한 스스로 프로그래밍을 해보기 바란다.

 

 

 

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
#! python
# -*- coding: utf-8 -*-
# PortScanProgram with nmap Library
 
import nmap
import time
import datetime
import os.path
import os
import optparse
 
#optparse
parser = optparse.OptionParser('usage PortScanner -t <tgtHost> -p <tgtPort> -n <nmapOption>')
parser.add_option('-t', dest='tgtHost', type='string', help='must specify target Host')
parser.add_option('-p', dest='tgtPort', type='string', help='must specify target Port')
parser.add_option('-n', dest='nmapOption', type='string', help='specify nmapOption')
(option, args) = parser.parse_args()
 
if (option.tgtHost == None) | (option.tgtPort == None):
    print(parser.usage)
    exit(0
 
# 전역 변수 초기화
startTime = time.time()                # 시작 시간 기록
nm = nmap.PortScanner()                # nmap 객체 생성
hostList = option.tgtHost.split(',')                # 호스트 리스트 작성
portList = option.tgtPort              # 포트 리스트 작성
if option.nmapOption:
        myArg = option.nmapOption      # 옵션 설정
 
# 폴더 생성        
fileList = []                          # 파일 이름 저장할 리스트 생성
dirName = 'scan_result'                # 폴더 이름 지정
if not os.path.exists('./' + dirName):        # 폴더 없을 시 폴더 생성
        os.system('mkdir ' + dirName)
        print (dirName + " directory is made\n")
else:                                  # 폴더 존재 시 폴더 생성 안 함
        print (dirName + " directory exists already\n")
if not os.path.isdir(dirName):         # 해당 파일이 폴더가 아닐 경우 오류 발생
        print ("Err: Same name file exists with directory name")
        exit()                         # 프로그램 종료
 
# 스캔 시작
for host in hostList:
        host = host.strip()            # 사용자가 공백을 입력했을 경우를 위해 스트립함
... 이하 7.5 예제와 동일 ...  
 
cs

 

 

 

 

 

실행화면

 

 

 

1
2
3
4
5
6
7
8
9
10
11
C:\> PortScanner.py -h
Usage: usage PortScanner -<tgtHost> -<tgtPort> -<nmapOption>
 
Options:
  -h, --help     show this help message and exit
  -t TGTHOST     specify target Host
  -p TGTPORT     specify target Port
-n NMAPOPTION  specify nmapOption
 
C:\> PortScanner.py –t “192.168.157.133127.0.0.1” –p 20-443 –n “-sS –sV –O”
... 결과 출력(결과는 PortScanner)와 동일하다. ...
cs

 

 

 

 

 

공백을 포함한 옵션  전달 시에는 쌍따옴표(“) 필요하다 예제의 명령어에서 쌍따옴표를 삽입하여 다수의 옵션 값과 리스트를 전달한다.

 

특별하게 볼만한 코드는  코드이다.

 

 

 

45
host = host.strip()         # 사용자가 공백을 입력했을 경우를 위해 스트립함
cs

 

 

 

사용자가 host 주소를 공백을 사용하여 전달했을 시에 공백을 제거하여 host 값으로 넘겨주는 코드이다입력  전달  오류가 발생하지 않도록 사용자 입력 값에 대한 여러 경우의 수를 고려해야 한다.

 

optparse 사용 방식이 동일하기 때문에 [8.2 optparse 작성하기]  이해했다면  예제 또한 이해하기 매우 쉬웠을 것이다.

 

 

 

optparse 대한 설명은 여기까지다매우 단순하지만  편리함을 제공하는 만큼 앞으로도 계속  라이브러리를 사용하여 프로그래밍  것이다 예제에서는 디렉터리를 생성하여 결과 파일들을 저장하는데 디렉터리 이름을 선택적으로 받을  있도록 코드를 수정해보길 권한다(옵션 입력 디렉터리 이름을 수정하고옵션 입력 없을 , Default  세팅하도록 만들어보자). 스스로 직접 코딩을 해봄으로 여러분의 실력을 크게 향상시킬  있을 것이다. 

 

[출처] https://m.blog.naver.com/isc0304/220376569369

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 침투테스트(취약점검점검, 모의해킹) 문의 / 답변 졸리운_곰 2017.12.10 26654
292 [정보보호] 와이어샤크(Wireshark) 사용법 #2 [인터페이스] file 졸리운_곰 2023.07.30 6
291 [정보보호] 와이어샤크(Wireshark) 사용법 #1 [설치] file 졸리운_곰 2023.07.30 9
290 [정보보호] [2023 디도스 대응 리포트] 디도스 융단폭격에 기업·기관 ‘휘청’ file 졸리운_곰 2023.07.28 8
289 웹페이지 과다 호출 방식의 DDoS공격 사례 및 대처 졸리운_곰 2023.07.28 4
288 [ 一日30分 인생승리의 학습법] HTTP GET Flooding 공격이란? file 졸리운_곰 2023.07.28 7
287 [ 一日30分 인생승리의 학습법] DDoS 공격 대처 및 방어 file 졸리운_곰 2023.07.27 5
286 [ 一日30分 인생승리의 학습법] [ Apache ] DDoS 공격 대응( evasive 모듈,IP 제한 ) 졸리운_곰 2023.07.27 11
285 [보안뉴스] 당신 폰을 훤히 들여다본다... ‘백도어 해킹’의 신무기 스파이칩 file 졸리운_곰 2023.03.26 16
284 모의해킹(Penetration Testing) PortScanner 참고문헌 졸리운_곰 2023.03.20 9
» 모의해킹(Penetration Testing) PortScanner 8. 업그레이드3 : optparse 기능 졸리운_곰 2023.03.20 11
282 모의해킹(Penetration Testing) PortScanner 7. 업그레이드2 : Nmap 활용 file 졸리운_곰 2023.03.20 6
281 모의해킹(Penetration Testing) PortScanner 6. 업그레이드1: 스레드를 활용한 고속 스캔 file 졸리운_곰 2023.03.20 7
280 모의해킹(Penetration Testing) PortScanner 5. 포트 스캔 실행! file 졸리운_곰 2023.03.20 5
279 모의해킹(Penetration Testing) PortScanner 4. 취약한 공격 대상 만들기 file 졸리운_곰 2023.03.20 4
278 모의해킹(Penetration Testing) PortScanner 3. 필요한 기술 익히기 졸리운_곰 2023.03.20 2
277 모의해킹(Penetration Testing) PortScanner 2. 포트 스캐너를 위한 네트워크 기초 다지기 file 졸리운_곰 2023.03.20 5
276 모의해킹(Penetration Testing) PortScanner 1. 포트 스캔이란? 졸리운_곰 2023.03.20 8
275 [보안뉴스] 전 세계에서 가장 흔한 20개의 비밀번호는 무엇? file 졸리운_곰 2022.11.29 1
274 모의해킹(Penetration Testing) [Kali Linux] Kali Linux 명령어 | 배워야 할 기본 사항 file 졸리운_곰 2022.11.18 22
273 모의해킹(Penetration Testing) 칼리리눅스 사용법 file 졸리운_곰 2022.11.18 12
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED