| [데이터 통신 과제] 
 Packet Sniffer의 구현
 
 1.소스코드분석
 이 프로그램은 로소켓을 이용한 스니퍼 프로그램 이다. 로소켓의 “네트워크 계층으로 전송되는 모든 패킷을 볼 수 있는” 특성을 이용해 TCP 프로토콜의 패킷을 읽은 프로그램이다. 아래 소스에는 TCP 패킷만 읽는 것이므로 IP 헤더와 TCP 헤더만을 출력 했지만, ICMP, IGMP, UDP 패킷 등등도 출력할 수 있다. 또한 packet.h 의 헤더파일을 고침으로써 IP Header와 TCP header의 기본 값들을 바꿀 수 있다. 예를 들면 IP header의 version이나 헤더길이 등을 사용자가 임의대로 바꿀 수 있다.
 project1.c
 #include [stdio.h]
 #include [string.h]
 #include [sys/socket.h]
 #include [sys/ioctl.h]
 #include [net/if.h]
 #include [netinet/in.h]
 #include [arpa/inet.h]
 #include [unistd.h]
 #include [stdlib.h]
 #include [ctype.h]
 #include packet.h
 
 int main() {
 int sock, ret, len;
 char buffer[65535], *data;
 struct sockaddr_in from;
 struct in_addr src, dst;
 struct ifreq ifr;
 char *interface = eth0 ;
 struct ip_header_t *ip = (struct ip_header_t *) buffer;//ip header 선언
 struct tcp_header_t *tcp;//tcp header 선언
 
 sock = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
 ....
 |