1.개발 결과
스크립트 동작으로, 점검 서버와 클라이언트 간 네트워크 구조 상 ICMP Type 및 Code 별 전송이 가능하였다. 실상 많은 노력이 들어간 형태는 아니지만, 차후 ICMP 패킷을 수동 조작하는 도구(과거 패킷 조작 도구)를 이용한 방법을 개선할 수 있었다.
1) 실행 결과
- python 화면

- WireShark 패킷 캡쳐 화면

2) 목적 달성도 (90%)
현재, ICMP 패킷을 수동으로 매번 입력하는 부분을 py 파일을 이용한 스크립트화로 개선하였기에, 반복 작업의 소요 시간을 단축 할 수 있었다. 다만 몇 가지 조건의 아쉬운 부분은 차후 필요할 시 개선이 필요하다.
■ 점검대상 IP를 사용자가 직접 입력하도록 args 형태로의 구현
■ py 파일로 실행됨에 따른 python 및 scapy 설치 필요
2.개발 목적
ICMP Type 및 Code 별 전송되는 패킷의 자동 생성
3.개발 사유
ICMP 관련 진행사항으로 hping3 명령어 또는 패킷 조작 도구에서 수동으로 Type 및 Code를 입력하는 단순 반복 작업이 필요하거나 진행하는 부분을 확인
현재 필요한 사항은 "ICMP Type 및 Code 별로 패킷을 전송"만 필요함에 따라, 스크립트 파일을 작성하여 한 번에 끝내도록 하는데 목적을 가짐
4.설계 단계
네트워크 패킷 조작 모듈 "SCAPY"를 이용하여 ICMP 패킷을 조작할 수 있도록 계획
1단계 : ICMP 패킷 내 Type 및 Code 설정
■ ICMP Type 및 Code는 RFC 792 문서 참조
2단계 : SCAPY를 통해 ICMP 패킷을 전송할 함수 구현 (Function)
5.구현 단계
1) 소스코드 및 기능 설명
- python scapy 설정
from scapy.all import *
- IP 설정
# SRC/DST IP
ip_src = ""
ip_dst = ""
- ICMP Type 및 Code 설정 : Type 및 Code는 RFC 792 내역을 참조
# ICMP Type and Code List
ICMP_Type_List = [0, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
# Type Default Code : 0
ICMP_Code_List = [0]
# Type 3 : Destination Unreachable
ICMP_3_List = [0, 1, 2, 3, 4, 5]
# Type 5 : Redirect
ICMP_5_List = [0, 1, 2, 3]
# Type 11 : Time Exceeded
ICMP_11_List = [0, 1]
- ICMP 패킷 전송 함수 구현
# ICMP Function
def ICMP_SEND(ip_src, ip_dst, icmp_type, icmp_code):
# Create the IP and ICMP layers
ip_layer = IP(src=ip_src, dst=ip_dst)
icmp_layer = ICMP(type=icmp_type, code=icmp_code)
# Combine The IP and ICMP
packet = ip_layer/icmp_layer
#send the ICMP Packet
send(packet)
- ICMP Type 및 Code 별 패킷 전송 방식 구현
# ICMP Send Start
for ICMP_Type_item in ICMP_Type_List:
try:
# Type 3 : Destination Unreachable
if ICMP_Type_item == 3:
for ICMP_Code_item in ICMP_3_List:
result = ICMP_SEND(ip_src, ip_dst, ICMP_Type_item, ICMP_Code_item)
print(result)
# Type 5 : Redirect
elif ICMP_Type_item == 5:
for ICMP_Code_item in ICMP_5_List:
result = ICMP_SEND(ip_src, ip_dst, ICMP_Type_item, ICMP_Code_item)
print(result)
# Type 11 : Time Exceeded
elif ICMP_Type_item == 11:
for ICMP_Code_item in ICMP_11_List:
result = ICMP_SEND(ip_src, ip_dst, ICMP_Type_item, ICMP_Code_item)
print(result)
# Default Code 0
else:
for ICMP_Code_item in ICMP_Code_List:
result = ICMP_SEND(ip_src, ip_dst, ICMP_Type_item, ICMP_Code_item)
print(result)
except:
print("[Error Type : Type %s]" % ICMP_Type_item)
2) 구현단계에서 발생된 문제점 및 해결 방법
- 단순 코드임으로, 해당사항 없음
'개발' 카테고리의 다른 글
| [WEB] Node.js 웹 사이트 구축 1 (환경 구성) (0) | 2024.01.05 |
|---|---|
| [Python] m3u8 스트리밍 영상 다운로드 (Feat.불법 다운로드 대응) (0) | 2023.06.08 |
| ChatGPT로 메일 서버 구축해보기 (1) : 메일서버 어떻게 구축해? (0) | 2023.02.05 |
| [Python] Flask 테스트 웹 만들기 _ 1편 : HTTP 서버 만들기 (0) | 2022.11.25 |
| [Python][자동화] NMAP 스캔 결과를 이미지 저장 (0) | 2022.11.15 |