컴공 일기152
게시글 주소: https://dev.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)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.

퀵소트에 콜백이 쓰이나요..?
엇 쓰이지 않나용?
저는 자구 공부 하나도 안하고 벼락치기로 시험봤어서.. 진짜 몰라서 여쭤본거에요,,
퀵소트 정렬을 call back 구조로 구현해본 예제입니다! 도움이 될 수 있으면 좋겠어요 :)
아 c 내장함수에 qsort란게 있군요 MyCmp의 규칙으로 정렬을 해주는게 Go에서의 Sort를 보는 것 같네요
어어 맞아요! 내장함수에 qsort 함수가 있는데, 그때 함수 하나를 사용하게 되어 있어요! 그러다 보니까, 자연스럽게 call back 형식이 되는 듯 합니다 ㅎㅎ 물론, call back을 쓰지 않고 구현하는 경우도 있는 것 같구요..!
하나 배워갑니다..!
감사드립니다 (__)
뭔 말인지 모르겠는데 정상인가
이해되게끔 글을 썼어야 하는데... 글을 잘 못 써서 그런 것 같아요 ㅠㅠ 공부기록 + 살짝공유용으로 쓴 글이니 넓은 마음으로 양해해주시면 감사하겠습니다...!
아뇨아뇨 컴퓨터의 세계가 저에게 낯설어서 그런거죠 ㅋㅋㅋㅋ
대단하십니다