네트워크 보안 수업 4일차 - 코리아 정보보안 IT학원

2016. 5. 2. 16:50네트워크 보안 수업/네트워크 취약점 분석

반응형

L3(Network)


- 서로 다른 네트워크 간의 통신


- 주소체계: IP address

- 1바이트 4자리 혹은 6자리 숫자로 이루어진 주소체계

- 각 숫자를 '.',':' 으로 구분


- 프로토콜: IP, ICMP, routing protocol(RIP, OSPF, ...)


- 장비: router, L3 S/W, F/W, ...


- PDU (Protocol Data Unit): Packet


0000 45 앞에 4는 ip버젼, 뒤에 5는 ip header의 크기. 오른쪽으로 2번 시프트 연산 후 저장

0100 0101 가변적인 크기. 그러므로 크기는 20바이트


0000 00 서비스타입. 딱히... 그냥 0


0000 00 3c ip packet 전체의 크기. 이더넷 헤더의 크기를 제외한 전체 크기


0000 49 86 id 분할된 패킷을 다시 재조합 할 때 쓰임


0000   00 00 플래그. 16개의 비트중 3개의 비트를 플래그가 씀

000 더이상 분할된 플래그가 없다.

001 분할된 플래그가 있다

010 플래그가 분할되지 않았다.

100 예약

나머지 5개 비트는 사용하지 않음



0000 80 TTL 홉의 갯수, 경로 상에 몇개의 라우터가 있는지

 

0000 01 프로토콜 타입 icmp = 1 tcp = 6 udp = 17

0000 51 c7 체크섬

0000 c0 a8 0f 10 출발지 ip

0010 c0 a8 0f 13 도착지 ip



icmp header


- icmp == ping(x)

*icmp(internet control message Protocol)


- 네트워크 상에 에러를 제어



#include <stdio.h>

#include <unistd.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <netinet/ip.h>

#include <net/if.h>

#include <net/if_arp.h>

#include <linux/if_packet.h>

#include <linux/if_ether.h>

#include <net/ethernet.h>

#include <arpa/inet.h>


int main(int argc, char *argv[])

{

        int sock = 0;

        struct sockaddr_ll sll;


        char data[42] = {0,};


        //create socket

        sock = socket(PF_PACKET, SOCK_RAW, 0);


        //socket struct

        sll.sll_family = PF_PACKET;

        sll.sll_ifindex = if_nametoindex("enp0s3");

        sll.sll_halen = 6;


        //data fill


        // dst mac address

        data[0] = 0xff;

        data[1] = 0xff;

        data[2] = 0xff;

        data[3] = 0xff;

        data[4] = 0xff;

        data[5] = 0xff;


        //src mac address

        data[6] = 0x08;

        data[7] = 0x00;

        data[8] = 0x27;

        data[9] = 0xe1;

        data[10] = 0x98;

        data[11] = 0xd1;


        //ether type

        data[12] = 0x08;

        data[13] = 0x06;


        //hw type

        data[14] = 0x00;

        data[15] = 0x01;


        //proto type

        data[16] = 0x08;

        data[17] = 0x00;


        //hw len

        data[18] = 0x06;


        //proto len

        data[19] = 0x04;


        //opcode

        data[20] = 0x00;

        data[21] = 0x01;


        //sender mac address

        data[22] = 0x08;

        data[23] = 0x00;

        data[24] = 0x27;

        data[25] = 0xe1;

        data[26] = 0x98;

        data[27] = 0xd1;


        //sender ip address

        data[28] = 0xc0;

        data[29] = 0xa8;

        data[30] = 0x19;

        data[31] = 0x0b;


        //target mac address

        data[32] = 0x00;

        data[33] = 0x00;

        data[34] = 0x00;

        data[35] = 0x00;

        data[36] = 0x00;

        data[37] = 0x00;


        //target ip address

        data[38] = 0xc0;

        data[39] = 0xa8;

        data[40] = 0x19;

        data[41] = 0x01;


        //send


                sendto(sock, data, sizeof(data), 0, (struct sockaddr *)&sll, sizeof(sll));


        return 0;

}




반응형