0. Scapy란?
Scapy는 파이썬 기반의 네트워크 패킷 생성, 조작, 분석 및 전송 도구입니다.
주로 네트워크 프로토콜 분석, 패킷 스니핑, 네트워크 공격 시뮬레이션 등에 사용됩니다.
- Scapy의 주요 기능
1. 패킷 생성 : 사용자가 정의한 형식으로 패킷을 생성할 수 있으며, 다양한 프로토콜(TCP, UDP, ICMP 등)을 지원합니다.
2. 패킷 전송 및 수신 : 생성된 패킷을 네트워크로 전송하고, 그에 대한 응답을 받을 수 있습니다.
3. 패킷 분석 : 수집한 네트워크 패킷을 다양한 필터링 옵션을 사용하여 분석할 수 있습니다.
4. 네트워크 공격 시뮬레이션 : 네트워크 취약점을 테스트하는 데 유용하며, DoS공격, ARP 스푸핑 등의 시뮬레이션이 가능합니다.
5. 스니핑 : 네트워크에서 흐르는 패킷을 실시간으로 감지하고 처리할 수 있습니다.
Scpay는 사용자에게 매우 유연한 네트워크 패킷 제어 능력을 제공하기 때문에, 네트워크 보안, 침투 테스트, 연구 목적 등 다양한 분야에서 사용되고 있습니다.
1. Scpay 설치 (칼리리눅스)
sudo apt install -y scapy

2. 실행
scapy

실행이 되면 터미널 인터페이스가 사용자모드($), 관리자모드(#)이 아닌 >>> 형태로 전환됩니다.
ifaces
ifcaes는 Scapy에서 시스템의 네트워크 인터페이스 정보를 제공하는 객체로, 각 네트워크 인터페이스에 대한 정보를 확인할 수 있습니다. 이 객체는 네트워크 인터페이스 이름, MAC 주소, IPv4주소, IPv6주소 등의 정보를 보여줍니다.

위 사진은 ifaces 실행 화면입니다.
- source : 해당 인터페이스가 시스템(sys)에서 가져온 것임을 나타냅니다.
- Index : 네트워크 인터페이스의 고유 인덱스 번호입니다.
- Name : 네트워크 인터페이스의 이름입니다. 일반적으로 lo, eth0, eth1의 이름으로 불립니다.
따라서 위 사진은 시스템에서 세가지 네트워크 인터페이스가 있고, 그 중 eth1이 활성화된 IP 주소를 가지고 있음을 보여줍니다.

ifconfig를 했을 때 나오는 정보와 동일합니다.
3. 예제

3.1 패킷 전송
Scapy를 사용하여 ICMP echo요청(핑 패킷) 을 로컬 호스트(127.0.0.1)로 보내고, 그에 대한 응답을 받은 상황입니다.
sr1(IP(dst="127.0.0.1")/ICMP())
- sr1() : Scapy에서 패킷을 전송하고 첫번째 응답을 기다리는 함수입니다. 패킷을 한번 보내고 이에 대한 첫 번째 응답을 수신합니다.
- IP(dst="127.0.0.1") : IP계층 패킷을 생성하여, 목적지 주소는 자신으로 합니다.
- ICMP() : ICMP 패킷을 생성합니다. 여기서는 ICMP 에코 요청 패킷을 보냅니다.
이 명령은 결국 자기 자신에게 ping을 보내는 것과 같은 역할입니다.
3.2 결과 설명
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
- Begin emission: 패킷 전송을 시작했음을 나타냅니다.
- Finished sending 1 packets: 1개의 ICMP 패킷을 성공적으로 전송했음을 나타냅니다.
- Received 2 packets, got 1 answers, remaining 0 packets:
- 2개의 패킷을 수신했다는 의미인데, 이는 ICMP 요청과 ICMP 응답(echo reply) 패킷이 모두 수신된 경우입니다.
- 1개의 응답을 받았으며, 남은 패킷은 없다는 뜻입니다.
3.3 패킷 정보
<IP version=4 ihl=5 tos=0x0 len=28 id=26989 flags= frag=0 ttl=64 proto=icmp chksum=0x1372 src=127.0.0.1 dst=127.0.0.1 |
<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 unused=b'' |>>
- IP 헤더 정보
- src=127.0.0.1: 출발지 주소가 127.0.0.1로, 로컬 호스트에서 전송된 패킷임을 나타냅니다.
- dst=127.0.0.1: 목적지 주소 역시 127.0.0.1로, 자신에게 보낸 패킷입니다.
- proto=icmp: 이 패킷이 ICMP 프로토콜을 사용하고 있음을 나타냅니다.
- ICMP 헤더 정보
- type=echo-reply: ICMP 에코 요청에 대한 응답 패킷입니다.
- code=0: ICMP 에코 응답에서 code=0은 정상적인 응답임을 의미합니다.
- chksum=0xffff: 패킷의 체크섬 값입니다.