[데이터 통신 과제]
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);
.... |