관리 메뉴

IT창고

Network ICMP(Internet Contorl Message Protocol) 본문

보안/Network

Network ICMP(Internet Contorl Message Protocol)

방구석여포 2018. 3. 27. 13:24

ICMP에 대해 알아보겠습니다.

ICMP는 인터넷 제어 메세지 프로토콜로 네트워크가 연결된 컴퓨터간에 오류메세지를 전송받는데 주로 사용되며 네트워크 계층 중 3계층(Layer 3)에 해당됩니다.


네트워크 3계층은 서로 다른 네트워크와 네트워크 간의 연결구간으로 프로토콜은 IP, ICMP, IPSEC, routing 프로토콜이 있으며 PDU는 packet 입니다.

ICMP는 보안취약점이 많아 요즘엔 대부분 막아두며 ICMP대신에 SNMP를 사용합니다.




ICMP는 공통헤더와 타입별 헤더로 나눠집니다.

내용이 많기 때문에 https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol 여기를 참고합니다.


Tip. ip header 체크섬계산

1. 2byte를 넘지않기때문에 2byte씩 잘라서 모두 합을 합니다.

2. 만약 (45173) 1011 0000 0111 0101값이 있다면 여기에 <<16으로 쉬프트 연산을 하고 &and를 해줘서 될때까지 합니다.

3. 나온값에 1의 보수를 합니다.


바이트형태의 입력을 받아서 정수형태의 체크섬을 돌려주는 함수를 만들어보겠습니다.

==============================================

==============================================


ICMP 프로토콜은 request를 주면 반드시 reply를 받게 되어있습니다. icmp packet을 직접만들어 확인해보겠습니다.

==============================================

==============================================

 icmp는 헤더를 만들지않고 바로 구성하였습니다.


sniffer.py로 정상적으로 작동이 되는지 확인해보겠습니다.

type 8은 echo request번호입니다. 0은 reply번호로 정상적으로 동작했음을 알수있습니다.


sniffer의 소스는 아래의 내용을 기존의 소스에 추가했습니다.

==============================================

==============================================


이번에는 외부네트워크와 ICMP통신을 해보도록 하겠습니다.

야후 DNS서버와 ICMP통신을 해보겠습니다.

packet의 내용을 조금만 변경하면 됩니다. ip헤더는 서로 다른 네트워크간의 통신을 위한 헤더로 Layer2계층에서 이루어지는 근거리통신은 별로 필요가 없지만 다른 네트워크와 ICMP통신을 해야하는 지금같은 경우 필요하게 됩니다.

이더넷 구간에서는 쉽게 상대의 MAC주소를 알아볼수있지만 서로 다른 네트워크라면 상대의 MAC주소를 알아낼수가 없습니다.

이럴때는 서로 다른 네트워크의 입구인 라우터의 MAC주소를 지정하고 상대의 IP를 IP헤더에 지정해주면 됩니다.

106.10.250.11은 www.yahoo.com의 IP주소입니다. 정상적으로 ICMP통신이 된걸 확인해볼수있습니다.

Comments