BaeBox

Scapy를 이용한 packet(pcap) generation 본문

개발 관련

Scapy를 이용한 packet(pcap) generation

배모씨. 2020. 2. 9. 16:11
반응형

이미지 출처 : https://www.pinclipart.com/maxpin/biJJRh/

 

Scapy : Python으로 작성된 컴퓨터 네트워크용 패킷 조작 도구.

프로토콜별로 패킷의 타입이 클래스로 정의되어 있으며, 해당 클래스를 이용하면 간단하게 패킷 데이터를 생성할 수 있다. 

Scapy는 아래와 같이 변수에 패킷 데이터(pcap)을 저장 간으하며, 저장된 pcap의 데이터를 출력 가능하다.

이런 식으로 패킷 데이터를 생성하여 준다.
기본적으로 제공하는 protocol들. class 형태로 제공된다.

 


CentOS 기준으로 설치 방법은 두 가지가 있다. 

  • Pip를 통해 설치하는 방법

  • Source 코드를 다운받아 컴파일 한 후 설치하는 방법

현 일자 (2020-02-07) 기준으로 pip 와 git 에서 제공하는 소스코드 모두 2.4.3 버전을 제공한다.
./run_scapy를 실행하면 scapy가 실행된다.


Scapy는 여러 종류의 패킷 데이터를 지원하지만, OT망에 사용되는 프로토콜의 패킷은 일부 지원하지 않는다. 예를 들면 Modbus 패킷을 지원하지 않는다.

하지만 걱정하지 마라. 손은 눈보다 빠르니까.

Modbus 패킷 데이터를 기본적으로 지원하지 않는다면, 그냥 Modbus 패킷 유형에 맞는 클래스를 생성해주면 되니까.

Scapy github에서도 contirbutor 디렉토리를 보면 Modbus 패킷을 받을 수 있다. 몰랐는데 지원했던 모양이다.

https://github.com/secdev/scapy/blob/master/scapy/contrib/modbus.py

 

secdev/scapy

Scapy: the Python-based interactive packet manipulation program & library. Supports Python 2 & Python 3. - secdev/scapy

github.com

나는 인터넷에 돌아다니는거 아무거나 가져다 썼다. 무슨 논문 같았는데 기억이 잘 안난다. 구글 뒤져보면 10분내로 나올거라고 생각한다.

내가 이용한 Modbus 클래스. 잘 되더라.
난수를 발생시켜서 패킷 데이터를 넣었다. 난수생성부가 비효율적인데, 저렇게 안하면 오류나더라...
생성된 패킷의 결과값.  Malformed 패킷을 원하지 않는다면 난수생성 범위를 제한해주면 된다.


https://scapy.readthedocs.io/en/latest/

 

Welcome to Scapy’s documentation! — Scapy 950 documentation

© Copyright 2008-2020 Philippe Biondi and the Scapy community Revision fa950e14.

scapy.readthedocs.io

https://scapy.net/

 

Scapy

Packet crafting for Python2 and Python3

scapy.net

 

반응형

'개발 관련' 카테고리의 다른 글

Dynamic(동적) Component 생성  (0) 2020.03.02
Component간 데이터 공유  (0) 2020.03.02
Brush와 Bisect  (0) 2020.01.29
간단한 D3 (Line, Bar)차트  (0) 2020.01.27
D3 차트의 구조  (0) 2020.01.27
Comments