✨컴공주✨ [1052682] · MS 2021 · 쪽지

2022-08-12 00:08:36
조회수 275

컴공 일기152

게시글 주소: https://orbi.kr/00057958226



집 내부 네트워크에서 송수신되는 데이터들의 목적지와 출발지를 기록한다면...



void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

{

    struct tm *ltime;

    char timestr[16];

    time_t local_tv_sec;


    /*

     * unused parameters

     */

    (VOID)(param);

    (VOID)(pkt_data);


    /* convert the timestamp to readable format */

    local_tv_sec = header->ts.tv_sec;

    ltime=localtime(&local_tv_sec);

    strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);

    

    //printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);

    if (header->len < 14) return;


    ether_header* pEther = (ether_header*)pkt_data;


    printf("%02X-%02X-%02X-%02X-%02X-%02X <- %02X-%02X-%02X-%02X-%02X-%02X (type: %04X)\n",

        pEther->dst[0], pEther->dst[1], pEther->dst[2],

        pEther->dst[3], pEther->dst[4], pEther->dst[5],

        pEther->src[0], pEther->src[1], pEther->src[2],

        pEther->src[3], pEther->src[4], pEther->src[5],

        pEther->type);


    

}


이 함수 같은 경우는 call back 함수입니다. 이 함수를 토대로 데이터들을 뽑아낼 수 있어요. 그렇기 때문에, 따지고 보면 call back은 일종의 interface 이기도 하구요. 알고리즘에선 성능이 아주 좋은 Quicksort 정렬을 할 때 이 call back구조가 사용되기도 합니다. 하여튼..


프롬프트 창에서 알아낸 호스트들의 MAC주소인데요. Frame데이터에 동봉된 EthernetHeader엔 이 주소들이 기록되어 있습니다. 서로 송수신을 하는 것이고, 그에 따라 이 MAC주소는 출발지가 되기도 하고, 목적지가 되기도 하지요. 말하자면 이것들이 어떤 데이터를 현재 주고받고 있는지 추적하고 있는 코드라고 볼 수 있습니다. 이런 것들을 공부하는 것이 네트워크 이론이라고 할 수 있겠네요 :) 


추가적으로 type으로는 이 데이터들의 프로토콜을 알 수 있습니다. ARP프로토콜인지, ip V4 프로토콜인지 등등..!


저는 현재 Iptime 공유기를 쓰고 있다는 것도 아실 수 있을 겁니다. 

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.