네트워크
raw 소켓 #3
메밀국수가생각나
2020. 10. 7. 10:57
요청 메시지인 경우 Type = 8
응답 메시지인 경우 Type = 0
ICMP 메시지 구성
ping 요청 패킷과 응답 패킷의 시간을 보고 패킷 전송에 소요된 시간을 출력한다.
40번째 줄에서 identifier에 들어갈 ID를 생성하고 있다.
58번째 줄에서 시그널 알람을 설정
65번째 줄에서 sig_alrm() 실행
sig_alrm() 함수
메시지 센드
121-127 ICMP 패킷 구성
127 - gettimeofday() 현재 시각을 icmp_date에 할당하고 있다.
133에서 원격지로 sendto()로 보내고 있다.
107에서 1초마다 시각을 실어서 ICMP 메시지를 계속 보내고 있다.
다시 핑 프로그램으로 돌아와서
69 - recvfrom()으로 메시지를 받는다.
77 - IP 헤더의 프로토콜 타입이 ICMP인지 확인한다.
80 - 자신이 보낸 메시지인지 확인한다.
84 - 에코 응답인지 확인한다.
85 - identifier가 내가 보낸 것과 같은지 확인한다.
88 - 현재의 시각
89 - ICMP에 들어있는 시각
90 - 88번과 89번에서 잰 시각의 차이를 계산해서 94번에서 출력한다.