ghkdtlwns987
[네트워크] ICMP 헤더 본문
ICMP 헤더는 다음과 같이 그려진다.
ICMP 메시지는 IP 네트워크에서 진단이나 제어 용도로 사용되고, 오류에 대한 응답으로 생성된다.
예를들어 ping 명령어로 특정 사이트에 메세지를 보내면 응답이 오는데, 이는 ICMP 메시지를 이용한 예이다.
ICMP 헤더는 8byte 로 되어있는데, ICMP 헤더의 첫 번재 byte 타입과 두 번째 byte인 코드를 주목해야 한다.
-> IP Header 크기만 알수 있다면 ICMP 헤더의 시작 부분을 알 수 있다.
def getIPHeaderLen(ipheader):
ipheaderlen = ipheader[0] & 0x0F #ICMP 헤더가 시작되는 위치가 된다.
ipheader *= 4
return ipheaderlen
ipheader[0] 은 (Version + Header Length) (8byte) 라고 했다.
여기서 Header Length 만 추출하려면 (ipheader[0] & 0x0F) 하면 된다.
그렇다면 ICMP 가 시작되는 위치를 python 코드로 짜게 되면 다음과 같아질 것이다.
offset = ipheaderlen
icmp = data[offset:]
그럼 이렇게 코드작성을 하면 된다는것을 알았으니,
ICMP 타입과 코드값만 추출하는 함수를 구현할 수 있다.
def getTypeCode(icmp):
icmpheader = struct.unpack('!BB',icmp[:2])
icmp_type = icmpheader[0]
icmp_code = icmpheader[1]
return(icmp_type, icmp_header)
-> 이 코드는 getTypeCode(icmp) IP헤더 이후 부분을 인자로 입력 받아 최초 2byte 를 1byte, 1byte로 구분해
python tuple 자료로 변환한다. 이 값들은 곧 ICMP 타입과 코드값이 된다.
'네트워크' 카테고리의 다른 글
[네트워크] 패킷 포워딩 (0) | 2021.01.21 |
---|---|
[네트워크] Ubuntu 18.04 vmware 무선랜 세팅 (0) | 2020.09.06 |
[네트워크] IP 헤더 (0) | 2020.09.04 |
[네트워크] 스니핑 (0) | 2020.09.03 |
Comments