Scapy? HTTP, DNS, TCP, IP, Ethernet 프로토콜의 메시지를 생성시키는 Python Library 입니다.
설치
Scapy는 Python 3 에서 실행하도록 설치해야합니다(쉬운 방법은 anaconda 와 함께 설치). 그리고, sudo 로 루트권한으로 패킷 생성해야합니다.
DNS패킷 생성하기
계층별 헤더 생성하기
아래 코드는 커널의 TCP 모듈을 거치지 않고, 직접 TCP 헤더를 생성해서 raw socket으로 전송하는 방식
iptables 설정에서 TCP RST를 무시하도록 설정해야함
https://stackoverflow.com/questions/9058052/unwanted-rst-tcp-packet-with-scapy
TCP three-way handshake
클라이언트에서 SYN flag, random sequence number 생성후 전송
TCP SYN 세그먼트 전송 후 SYN/ACK 수신(sr1())
ACK를 위하여 seq + 1, ack + 1 하여 ACK 전송(send())
HTTP GET 메소드 전송 후 응답 수신(sr())