Python make port scanner(use nmap) #1 - optparse (파이썬 포트스캐너 만들기 #1 - optparse)

파이썬을 이용한 포트스캐너 제작에 앞서 python optparse 모듈에대해 알아보겠습니다.

optparse는 커맨드 라인 프로그램 실행에 이용된 option값을 parsing해주는 모듈입니다.

아래와 같은 커맨드를 가정해 보겠습니다.

python <%program> <%option> <%values>
python optparse.py -f TCPportscanner

위의 커맨드를 통해 program을 실행시킬때 option값을 통해 values를 가져오는 방식입니다.
optparse.py를 실행시킬 때 -f옵션을 통해 filename을 value로 가져오는 방식으로, 프로그램
내에서는 TCPportscanner의 파일명(경로)를 가져오게 됩니다.

아래 소스를 살펴보겠습니다.

line 3: parser = optarse.OptionParser() 를 통해 optparse모듈을 로드합니다.

line 4: parser.add_option()을 통해 받아올 옵션값에대한 정보를 가져옵니다.
a. "-f", "--file"는 사용할 옵션의 형태를 나타냅니다. 이를 통해 프로그램을 실행할 때
<%program> -f <%values>혹은 <%program> --file <%values>형태를 사용 할 수 있습니다.
b. dest="filename"을 통해 이후 변수에 값을 가져올 때 사용 할 도착지 이름입니다.
c. help="File name"을 통해 <%program> -h 명령어를 쳤을 때 불러올 help의 내용을 입력합니다.
d. metavar="FILE"을 통해 meta type을 정의해줍니다.

line 5: parser.add_option()
a. '-p'를 통해 옵션의 형태를 취합니다.
b. dest='port'를 통해 변수에 가져올 도착지 이름을 정합니다.
c. type='int'를 통해 변수의 type을 정의해 줍니다.
d.help=''를 통해 -h명령어에 대한 description을 정의합니다.

line 6: action='store_true', default=False
위 두 옵션은 Flag값을 정의할 때 쓰입니다.
기본적으로 parser.add_options()을 5번 라인과 같은 형태를 취했을 때엔
<%program> -p <%values> 형식으로 사용되어 지지만, flag형태를 취하면
<%program> -a 만으로도 불러 올 수 있고 -a옵션이 활성화되면 Flag가 True로 변하게 됩니다.

즉 action='store_true'를 통해 옵션을 불러왔을때 default=False로 설정되어있던 값을 True로 가져오게 됩니다.

line 8: (options, args) = parser.parse_args()
 parsing한 옵션 값들을 변수로 불러오기 위해 options에 집어넣어줍니다.

line 10, 11, 12: 기본적으로 option을 사용하지 않으면 값에 None가 들어있게 됩니다.
만약 필수 옵션이라면 if문을 통해 그 옵션값이 None일 때, 프로그램을 종료 시킬 수 있습니다.

line 14, 15, 16: 각각 받아온 옵션값을 변수에 저장해 줍니다.

line 18. 19. 20: 각각 받아온 옵션값을 출력합니다.

--------------------------------------------- 실행 모습------------------
# python3 optparse -f TCPportscanner
None
False
TCPportscanner



# python3 optparse -f TCPportscanner -p 22
22
False
TCPportscanner



# python3 optparse -f TCPportscanner -p 22 -a
22
True
TCPportscanner



#python3 optparse -h
Usage: optparse [options]

Options:
  -h, --help            show this help message and exit
  -f FILE, --file=FILE  File name
  -p PORT               input port number

  -a                    flag tuto
--------------------------------------------- 실행 모습------------------