티스토리 뷰
지난번에 특정 IP에 포트 범위에 대해 NMAP을 사용하는 파이선을 만들어 보았습니다. 이후에 계속 NMAP을 보고 있는데 옵션이 너무 다양하고 이미 만들고자 하는 내용이 옵션으로 제공되고 있는 것들도 많더라구요. 앞으로 더 NMAP을 공부하겠지만, 이번에는 파이선도 병행해서 공부하는 것이라 문법에 익숙해 지기 위해 앞으로도 쭉 삽질을 계속할 예정입니다.
이번에는 NMAP에서 서브넷마스크와 포트범위를 지정해줄 수 있는 것의 적용, 그리고 결과정보를 파일로 저장하는 것, 마지막으로 오픈된 포트만 결과에 나올 수 있도록 만들어 보았습니다.
IP를 입력할 때 서브넷마스크를 적용하려면 IP/SUBNET 형식으로 작성하면 됩니다.
포트를 여러개 입력할 경우, 다양한 방법이 있는 것 같은데 저는 콤마로 연결하여 사용하였습니다.
결과정보를 파일로 저장할 경우도 여러 옵션이 있지만 -oA 옵션을 사용하였습니다.
마지막으로 오픈된 포트만 결과에 저장하기 위해 --open 옵션을 주었습니다.
# NMAP [TARGET_IP/SUBNET] -p [PORT_LIST] --open -oA [OUTPUT PATH/FILENAME]
결과 정보를 디렉토리 공유된 위치에 저장시켜 윈도우에서 파일을 열어보았습니다. 저장된 파일은 XML 형식으로 저장이 되네요. 앞으로 이 XML 형식의 파일을 파싱하여 엑셀에 이쁘게 만들어 주면 좋을 듯 합니다.
실제 결과가 어떻게 저장되는지 확인해보기 위해 엑셀파일로 열어보았습니다. 이때 읽기 전용 문서로 열어야 보이네요.
콘솔화면과는 다르게 정말 다양한 정보가 저장되었습니다. 이제 작성된 내용들이 어떤 내용들이고, 어떤 점을 주위깊게 봐야할 지 다시 알아보는 시간을 가져봐야 겠네요. 우선은 오픈된 포트 검사가 우선이기 때문에 이 부분만 정리해보니 이렇게 만들어 지네요. 역시 Well-Known 포트는 이름도 함께 써주네요. 보기 편하겠습니다.
이제 다음엔 어떤 좋은 옵션이 있는지 알아보고, XML 데이터에서 유의미한 데이터는 무엇인지 파악해야 할 것이며, 마지막에는 XML을 파싱하여 엑셀파일로 예쁘게 저장될 수 있도록 만들어 봐야겠습니다.
Fin
import os from datetime import datetime # 디폴트 값 DEFAULT_TARGET_IP="192.168.0.1/24" DEFAULT_TARGET_PORT="20,21,22,23,24,25,80,81,443,8080,8081" DEFAULT_DIR_DOC="/media/sf_Shared" print("This is check port using NMAP") print("Default IP : " + DEFAULT_TARGET_IP ) print("Default PORT : " + str(DEFAULT_TARGET_PORT)) print("Default Doc Directory : " + DEFAULT_DIR_DOC) print("Developed by SalaYH") print("++++++++++++++++++++++++++++++++++++") # Target IP / Subnet 입력 print ("IP Example : 192.168.0.17, 192.168.0.1/24") TARGET_IP = raw_input("Input IP : ") if len(TARGET_IP) == 0: TARGET_IP = DEFAULT_TARGET_IP # Port 입력 print ("Port Example : 21,22,...") PORT = raw_input("Input Start PORT : ") if len(PORT) == 0: TARGET_PORT = DEFAULT_TARGET_PORT else: TARGET_PORT = PORT # 결과파일 저장 디렉토리 입력 CHECK_SAVE_RESULT=raw_input("Do you want to save result to files? (Y/n) : ") if len(CHECK_SAVE_RESULT) == 0 or CHECK_SAVE_RESULT.lower() == "y" : CHECK_SAVE_RESULT="y" DIR_DOC = raw_input("Input directory of saving result : ") if len(DIR_DOC) == 0: DIR_DOC = DEFAULT_DIR_DOC elif not os.path.isdir(DIR_DOC): print("Not exist directory(" + DIR_DOC + ")") print("If you don't want to make new directory, then use default directory : " + DEFAULT_DIR_DOC) # 디렉토리가 존재하지 않는 경우 CHECK_MKDIR=raw_input("Do you want to make directory? (y/N) : ") if len(CHECK_MKDIR) == 0: print("You didn't type anthing, so It is using default directory."); DIR_DOC=DEFAULT_DIR_DOC elif CHECK_MKDIR.lower() == "n": DIR_DOC=DEFUALT_DIR_DOC else: os.mkdir(DIR_DOC) print("++++++++++++++++++++++++++++++++++++") print("Check Open PORT") print(" - IP : " + TARGET_IP) print(" - PORT : " + TARGET_PORT) COMMAND = "/usr/bin/nmap " + TARGET_IP + " -p " + TARGET_PORT + " --open" TODAY = datetime.now().strftime('%Y-%m-%d') if CHECK_SAVE_RESULT.lower() == "y": COMMAND = COMMAND + " -oA " + DIR_DOC + "/NMAP_CHECK_OPEN_PORT_RESULT_" + TODAY + ".xml" process = os.popen(COMMAND) results = str(process.read()) print(results) print("") print("End Check PORT") |
'Python' 카테고리의 다른 글
| Python을 이용한 NMAP 활용 툴 만들기 #01 (0) | 2019.03.07 |
|---|
- Total
- Today
- Yesterday
check_open_port_3.py