LIBNET flashbitnaver com LIBNET tar xvzf libnet tar
LIBNET flashbit@naver. com 조성규
LIBNET ■ 설치 □ 아래의 순서대로 설치한다. # # # tar xvzf libnet. tar. gz cd Libnet-1. 0. 2 a. /configure make install ■ 프로그래밍 순서 □ 임의의 네트워크 패킷을 생성하고 전송하기 위한 표준의 절차는 아래와 같다. ▪ ▪ ▪ Memory Initialization Network Initialization Packet Construction Packet Checksums Packet Injection 5
LIBNET □ Network Initialization ▪ 다음 단계는 네트워크 전송 인터페이스를 얻어오는 것이다. ▪ IP-layer 인터페이스 : libnet_open_raw_sock() (usually IPPROTO_RAW) (return : a raw socket with IP_HDRINCL set) ▪ Link-layer 인터페이스 : libnet_open_link_interface() □ Packet Construction ▪ 패킷은 모듈별로 생성되어진다. ▪ 각 Protocol Layer 별로 libnet_build로 시작되는 함수들이 있어야만 한다. ▪ IP-layer : libnet_build_ip() , libnet_build_tcp() ▪ link-layer : libnet_build_ethernet() ▪ libnet_build_ethernet() : 0의 offset으로 버퍼의 시작부에 채워진다. ▪ libnet_build_ip() : 적절한 위치에 IP header를 생성하기 위해서 14 byte(ETH_H) offset으로 채워진다. ▪ libnet_build_tcp() : 시작 부분으로 부터 34 bytes(ETH_H + IP_H) offset을 가지고 채워진다. 7
LIBNET Empty packet buffer IP header (20 bytes) IP header + TCP header (20 bytes) Ethernet + IP header + TCP header (14 bytes) (20 bytes) 8
LIBNET □ Packet Checksums ▪ 패킷을 생성하는 마지막 단계로 Checksum을 계산하는 것이다. ▪ Raw IP interface의 경우, Transport layer checksum 만을 계산하는 것이 필요하다. ▪ Link-layer interface의 경우, IP checksum 만을 계산하는 것이 필요하다. ▪ Checksum은 libnet_do_checksum() 을 통해서 계산되어진다. □ Packet Injection ▪ 마지막 단계로 네트워크에 패킷을 전송하는 것이다. ▪ IP-layer interface : libnet_write_ip() ▪ Link-layer interface : libnet_write_link_layer() ▪ return : 성공시(전송된 바이트수), 실패시(-1) 9
LIBNET ■ Using the Configure Script □ At the command line you can run the script to see what defines are used for that system. # libnet-config --defines □ At the command line to compile a simple program. # gcc –Wall `libnet-config --defines` test. c –o test `libnet-config --libs` □ In a Makefile. # DEFINES = `libnet-config --defines` □ In a Makefile. in # DEFINES = `libnet-config --defines` @DEFS@ 10
LIBNET ■ IP-layer vs Link-layer Raw IP Link-layer libnet_init_packet libnet_open_link_interface libnet_open_raw_sock libnet_build_ethernet libnet_build_ip libnet_build_icmp libnet_do_checksum(IP header checksum) libnet_write_ip libnet_do_checksum(transport layer header checksum) libnet_write_link_layer 11
LIBNET 12
LIBNET 13
LIBNET 14
LIBNET ■ Sample applications [별첨] libnet_ex 1. c : raw socket api – TCP packet libnet_ex 2. c : link-layer api / ICMP hostmask packet 15
- Slides: 16