ARP 패킷 분석
분석 목표
ARP의 Packet의 구조와 실제 ARP (Request)의 신호를 비교하여 분석한다.
또한 이후 LIBPCAP의 이더넷 구조체를 통해 직접 ARP Pecket 을 만들어든다.
ARP란?
Address Resolution Protocol, 즉 주소 결정 프로토콜로 네트워크 상에서 IP 주소를 MAC 주소로 대응시키기 위해 사용되는 프로토콜이다.
예시
IP 1.1.1.1이 IP 2.2.2.2에게 IP Pecket을 전송하려고 할 때
IP 2.2.2.2의 물리적 네트워크 주소를 모른다면,
ARP 프로토콜을 사용하여 목적지 2.2.2.2와 브로드캐스팅 MAC 주소인 FFFFFFFFFFFF를 가지는 ARP Request Packet을 네트워크 상에 전송한다.
IP 2.2.2.2는 자신의 IP 주소가 목적지를 표현하는 곳에 있는 Packet을 수신하면 자신의 MAC 주소를 1.1.1.1에게 전달하는 ARP Reply Packet을 전송한다.
ARP Packet 분석
색깔 별로 ARP 패킷을 대응 시킨 파일이다.
앞에 12 byte는 목적지 MAC과 근원지 MAC주소를 담은 Network 계층 데이터이고
뒤에 24 byte는 단지 Packet의 크기를 맞추기 위해 생성된 Padding 부분이다.
Libpcap
Ethernet header
#define ETHER_ADDR_LEN 6 struct ethhdr { unsigned char h_dest[ETHER_ADDR_LEN]; /* destination eth addr */ unsigned char h_source[ETHER_ADDR_LEN]; /* source ether addr */ unsigned short h_proto; /* packet type ID field */ };
ARP header
/* ARP Header, (assuming Ethernet+IPv4) */ #define ARP_REQUEST 1 /* ARP Request */ #define ARP_REPLY 2 /* ARP Reply */ #define ARP_HDR_ADDR_LEN 6 /* MAC Address Length */ #define ARP_IP_ADDR_LEN 4 /* IP Address Length */ typedef struct arphdr { u_int16_t htype; /* Hardware Type */ u_int16_t ptype; /* Protocol Type */ u_char hlen; /* Hardware Address Length */ u_char plen; /* Protocol Address Length */ u_int16_t oper; /* Operation Code */ u_char sha[ARP_HDR_ADDR_LEN]; /* Sender hardware address */ u_char spa[ARP_IP_ADDR_LEN]; /* Sender IP address */ u_char tha[ARP_HDR_ADDR_LEN]; /* Target hardware address */ u_char tpa[ARP_IP_ADDR_LEN]; /* Target IP address */ }arphdr_t;