본문 바로가기

[ ★ ]Study/Network37

ARP 스푸핑 ( 추후 계속 추가 ) ARP 스푸핑에서 이 스푸핑(Spoofing) 은 '속이다' 라는 의미가 있다 일반적으로 우리는 컴퓨터들을 구분할 때 IP를 통해서 구분한다고 익히 들어왔고, 공부해왔을 것이다.TCP 또는 UDP 프로토콜을 이용하여 소켓 프로그래밍에서도 상대방에게 데이터를 전송할 때도 IP주소를 이용하였다.하지만, 로컬 네트워크 환경에서는 상대방 호스트를 구분하기 위하여 IP주소가 사용될 뿐문 아니라 하드웨어 주소(MAC) 주소가 통신에 함께 사용된다.그 이유는 로컬 네트워크상에서는 Ethernet 헤더에 프로토콜을 포함하는 데이터가 Encapsulation이 되어 전송되기 때문이다. 따라서 로컬 네트워크상에서는 데이터 전송이 이뤄지기 전에 먼저 상대방의 IP 주소를 이용하여 하드웨어 주소인 MAC주소를 알아야 한다.이.. 2017. 6. 18.
pcap_addr 구조체 struct pcap_addr{ struct pcap_addr 8next; struct sockaddr *addr; struct sockaddr *netmask; struct sockaddr *broadaddr; struct sockaddr *dstaddr; }; typedef struct pcap_addr pcap_addr_t; 2017. 6. 13.
pcap_findalldevs 함수 pcap_findalldevs 함수는 사용자 PC에 있는 모든 네트워크 디바이스 정보를 가져오는 함수이다. 함수를 호출하면서 전달하는 매개변수로는 pcap_if_t 타입의 포인터 변수가 저장된 주소값과 에러 메시지가 저장될 버퍼의 주소값을 전달하고 있다. pcap_if_t의 구조체는 pcap.h 파일에 다음과 같이 정의되어 있다. struct pcap_if{ struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; bpf_u_int32 flags; }; typedef struct pcap_if pcap_if_t; pcap_if 구조체 정의를 보면 구조체의 멤버 name, description, addresses, f.. 2017. 6. 13.
RAW 소켓 TCP, UDP 서버 & 클라이언트 프로그램과 달리 RAW 소켓은 사용자가 직접 구현해야 되는 소켓이라고 볼 수 있다. TCP, UDP는 소켓 관련 라이브러리 및 운영체제에서 프로토콜 헤더를 작성하여 데이터를 전송하기 때문에 직접 프로토콜 헤더를 작성하지 않아도 데이터를 송수신할 수 있었다. 단순하게 데이터를 송수신하는 기능을 구현하기에는 이와 같이 프로토콜 헤더를 자동으로 만들어주는 것이 편리하다. 하지만 프로토콜 헤더를 직접 다루어야 하는 경우도 있기 때문에 RAW 소켓을 공부할 필요가 있다. RAW소켓이란 소켓을 생성할 때 지정하는 옵션을 이용하여 데이터를 전송할 때 직접 프로토콜 헤더를 만들고 수신할 때도 프로토콜 헤더를 포함하여 수신하겠다는 의미로 소켓을 생성하는 것이다. 추가로 윈도우에서 RA.. 2017. 6. 12.
UDP 클라이언트 프로그램 UDP 클라이언트 예제 - UDP Client example 전체 소스 코드 #include #include #include #include #include #include #include #define PORT 9998 int main(void){ int sock; struct sockaddr_in target_addr; char recv_buffer[1024]; int recv_len; int addr_len; const char *msg = "hello network!"; if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ perror("socket "); return 1; } memset(&target_addr, 0x00, sizeof(target_addr));.. 2017. 6. 12.
UDP 서버 예제 프로그램 UDP 서버 예제 프로그램 - UDP server example 전체 소스 코드 #include #include #include #include #include #include #include #define PORT 9999 int main(void){ int sock; struct sockaddr_in addr, client_addr; char recv_buffer[1024]; int recv_len; int addr_len; if((sock = socket(AF_INET, SOCK_DGRAM, 0)) 2017. 6. 12.