ICMP (Internet Control Message Protocol) 프로그래밍

2017. 6. 28. 10:48NetworkHacking/Network





ICMP

- IP프로토콜은 호스트와의 관리 질의를 위한 메커니즘이 없다

- 호스트는 간혹 라우터나 다른 호스트가 동작하고 있는지 알 필요가 있다

- 그리고 네트워크 관리자는 다른 호스트나 라우터로부터 정보를 획득할 필요가 있다

- ICMP 메시지는 오류보고 메시지와 질의 메시지로 나누어진다

- 오류보고 메시지 : 라우터나 호스트가 IP패킷을 처리하는 도중에 탐지하는 문제를 보고

- 질의 메시지 : 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용


 Type(1byte)

Code(1byte) 

 Checksum(2byte)

Identifier(2byte)

Sequence (2byte)

Payload(data)

[ 질의 메시지 구조]



[ 실습 ]

에코요청 메시지( type 8 ) 와 에코응답 메시지( type 0 ) 의 쌍을 이용해 다른 호스트나 라우터가 활성화 되어있는지 확인할 수 있다

#vi ip.py

#vi icmp.py

#vi packet.py

#vi iping.py : setter를 이용한 각 클래스의 멤버변수 초기화

#vi sniffer.py


[ 실행결과 ]

[ 그림1 ]

setter를 이용해 각 멤버변수들을 초기화하고 socket으로 데이터를 전송

eth0으로 들어오고 나가는 패킷들을 sniffer에서 출력하고 있다

에코요청메시지 request 에 대한 응답으로 에코응답메시지 response 가 들어온다




# 이더넷 헤더와 아이피 헤더의 역할 #

이더넷 헤더는 같은 네트워크 상에서 MAC주소를 이용한 통신

아이피 헤더는 다른 네트워크 상에 있는 호스트와 통신하기 위해 IP주소를 사용한다


호스트 => " 라우터 " => 다른 네트워크 상의 호스트 : 패킷이 라우터를 통해서 외부로 빠져나간다


외부와의 ICMP통신을 해보자 !


1> 이더넷 헤더에서 맥주소는 라우터의 맥주소를 입력한다

2> 아이피 헤더에서 아이피주소는 외부 네트워크의 아이피주소를 입력한다


=> 처음 호스트에서 라우터로 패킷을 보낸다. 

=> 패킷의 아이피 헤더에 써있는 dst( 외부 IP주소 )를 읽고 외부의 해당 네트워크로 패킷이 이동된다( ex)request메시지 보냈다 )

=> 외부에서 해당 패킷을 읽고 라우터의 맥주소를 보고 라우터로 패킷( ex)response메시지 )을 보낸다

=> 라우터는 외부에서 온 아이피 헤더에 써있는 dst( 호스트IP )를 읽어서 처음 호스트에게 패킷을 보내준다

=> 내부와 외부에서의 통신이 성공했다


[ 실행결과 ]