관리 메뉴

IT창고

Network APR(Address Resolution Protocol) 본문

보안/Network

Network APR(Address Resolution Protocol)

방구석여포 2018. 3. 21. 14:36

ARP(Address Resolution Protocol)는 네트워크를 하기전 상대의 MAC주소를 알아내서 통신을 할수있게하는 프로토콜입니다.

타입은 0x0806으로 리눅스에서는 ping을 보낸다고 할때 보내기전 ARP를 보내 mac cache table에 정보를 수집합니다.

윈도우의 경우에는 수시로 mac주소를 조회해서 arp를 수집합니다.


 

ARP의 헤더는 위와 같습니다. 크기는 고정크기를 가집니다.


00:0c:29:cc:aa:71 -> ff:ff:ff:ff:ff:ff

이더넷 헤더 : b'\xff\xff\xff\xff\xff\xff\x00\x0c)\xcc\xaaq\x08\x06' 

- 도착지 mac주소 : \xff\xff\xff\xff\xff\xff

- 출발지 mac주소 : \x00\x0c)\xcc\xaaq

- 이더넷 타입 : \x08\x06'  -> 0x0806은 ARP프로토콜


ARP 헤더 : b'\x00\x01\x08\x00\x06\x04\x00\x01\x00\x0c)\xcc\xaaq\xc0\xa8\x01\x08\x00\x00\x00\x00\x00\x00\xc0\xa8\x01\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'


b'\x00\x01' : hw type -> eth, token


b'\x08\x00' : protocol type: ipv4, ipv6, ....


b'\x06'  : 하드웨어 주소의 길이


b'\x04'   : 프로토콜 주소의 길이


b '\x00\x01' : opcode(request, reply)


b'\x00\x0c)\xcc\xaaq'                      b'\xc0\xa8\x01\x08'

sender mac address                            sender ip address


b'\00\x00\x00\x00\x00\x00'           b'\xc0\xa8\x01\t'

target mac address                            target ip address


ARP헤더의 정보를 바탕으로 파이썬 클래스로 따로 만들어보았습니다.


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

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


위의 만든 클래스를 사용하여 쉽게 ARP헤더를 만들어보았습니다. 

이렇게 만든 ARP프로토콜은 근거리 네트워크에서는 신호를 주면 무조건 응답을 해주게 되어있습니다.

위에서 만든 ARP로 다른 리눅스에게 ARP통신을 해보겠습니다.

확인을 해보면 지금 ARP통신을 보낸 PC는 192.168.1.9입니다. opcode를 확인하면 request응답을 확인해볼수있습니다. 192.168.1.2는 윈도우 PC로서 윈도우는 arp cache table를 수시로 수집을 합니다.


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

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

Comments