arp - man page & practices

시스템의 ARP 캐시를 조종하는 명령어

Synopsis

arp [-vn] [-H type] [-i if] [-ae] [hostname]

arp [-v] [-i if] -d hostname [pub]

arp [-v] [-H type] [-i if] -s hostname hw_addr [temp]

arp -Ds hostname ifname [netmask nm] pub

arp [-vnD] [-H type] [-i if] -f [filename]

Description

Arp는 커널의 IPv4 네트워크에 캐시된 이웃들을 출력하거나 조종하는 명령어이며, arp 테이블에 엔트리들을 추가하거나 삭제할 수 있다.

ARP는 Address Resolution Protocol 의 약자로, 주어진 IPv4 주소를 가지고 랜 대역 안에서 MAC 주소를 찾기 위해 사용되는 프로토콜이다.

Modes

arp처럼 아무런 모드를 명시하지 않을 경우에는, 디폴트로 현재 arp 테이블에 캐싱되어있는 내용만을 출력한다.

특정 하드웨어 주소 타입, 인터페이스명, 호스트 주소 등을 명시함으로써 출력할 엔트리들에 조건을 걸 수 있다.

arp -d address 모드는 ARP 테이블에서 엔트리를 삭제할 수 있으며, 루트 권한 혹은 네트워크 관리자의 특수한 권한이 반드시 필요하다.

기본적으로 IP 주소를 넘겨줘야 하지만, 호스트명을 준다고 하더라도 ARP 테이블에서 해당 엔트리를 검색하기 전에 이름을 먼저 해결한 뒤 수행된다.

arp -s address HW address 모드는 테이블에 새로운 엔트리를 추가할 때 사용한다.

이더넷 클래스의 경우에는 이러한 하드웨어 주소는 콜론으로 구분되며 16진수로 이루어진 6바이트 MAC 주소가 된다.

프록시 arp 엔트리를 추가하는 경우에는, 프록시가 설정될 전체 서브넷을 위한 넷마스크도 명시되어야 한다.

뒤에 pub 플래그를 붙이는 경우가 프록시 arp 를 추가하는 것이고, temp 플래그가 붙지 않을 경우에는 엔트리들은 ARP 캐시에 영구적으로 저장된다.

세팅을 좀 더 단순화시키고 싶을 경우에는, arp -Ds address ifname과 같이 하드웨어 주소 대신 인터페이스명을 넣음으로써, 해당 인터페이스의 하드웨어 주소를 자동적으로 가져오게 할 수 있다.

Options

  • -v, --verbose
    verbose 모드

  • -n, --numeric
    심볼릭 호스트, 포트, 유저를 표시하는 대신 숫자 형식으로 주소를 표현

  • -H type, --hw-type type, -t type
    ARP 캐시로부터 엔트리들을 읽어오거나 세팅할 때, arp 명령어가 어떤 클래스의 엔트리들을 체크해야할 지 타입을 알려주는 옵션. 디폴트 값은 ether(이더넷)이며, 설정 가능한 다른 값들로는 arcnet, pronet, ax25, netrom 등이 있다.

  • -e
    디폴트값으로, 여러 엔트리들을 출력할 때 리눅스 스타일로 컬럼별로 깔끔하게 맞춰서 표시(-a 옵션 사용시 BSD 스타일)

  • -D, --use-device
    하드웨어 주소 대신 인터페이스명을 넘겨줄 수 있다. arp는 인터페이스명에 해당하는 MAC 주소를 테이블에 추가하고, 프록시 ARP 엔트리를 세팅할 때 유용하다.

  • -i IF, --device IF
    특정한 인터페이스를 선택하여, ARP 캐시를 출력하거나 각종 조작을 할 때 명시된 인터페이스에 대해서만 수행된다. 만약 이 옵션이 사용되지 않을 경우에는 기본적으로 커널이 라우팅 테이블을 기반으로 하여 결정한다. pub 엔트리들에 대해서는, 명시된 인터페이스가 ARP 요청에 응답할 인터페이스가 된다.

  • -f filename, --file filename
    이번 명령어를 수행하는데 있어서 주소 정보를 명시된 파일로부터 가져온다. 여러개의 호스트들에 대한 엔트리를 한번에 요청할 때 사용할 수 있으며, 파일명이 명시되지 않을 경우 디폴트로 /etc/ethers 를 참조한다. 파일 내용에 대한 포맷은 라인별로 호스트명과 하드웨어 주소가 공백으로 구분되면 된다. 여기에 pub, temp, netmaks 플래그들이 추가될 수도 있다.

호스트명이 들어가야 하는 모든 위치에는, IP 주소를 입력할 수도 있다.

ARP 캐시테이블에 존재하는 각 엔트리들은 기본적으로 C 플래그(complete)를 가지며, 영구적인 엔트리는 M을, published 엔트리는 P를 갖는다.

Examples

# -n 숫자형식으로 출력, -i enp6s0 인터페이스의 -H 이더넷 타입들에 대해서 -e 리눅스 형식으로 출력, 그 중 p01 에 해당하는 엔트리 검색
bconfiden2@piggy:~$ arp -vn -H ether -i enp6s0 -e p01
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.101            ether   34:40:b5:86:ef:38   C                     enp6s0
Entries: 86	Skipped: 85	Found: 1
# -a로 BSD 포맷 출력, -i 로 특정 인터페이스에 대해서 모든 엔트리들 출력
bconfiden2@piggy:~$ arp -i enp6s0 -a
p09 (192.168.0.109) at 34:40:b5:87:03:c4 [ether] on enp6s0
jumbo (192.168.0.99) at 00:11:32:ef:51:87 [ether] on enp6s0
p04 (192.168.0.104) at 34:40:b5:87:14:86 [ether] on enp6s0
p03 (192.168.0.103) at 34:40:b5:86:d3:22 [ether] on enp6s0
p08 (192.168.0.108) at 34:40:b5:86:c9:18 [ether] on enp6s0
p07 (192.168.0.107) at 34:40:b5:87:0f:e0 [ether] on enp6s0
p02 (192.168.0.102) at 34:40:b5:86:e9:07 [ether] on enp6s0
p06 (192.168.0.106) at 34:40:b5:86:f8:6b [ether] on enp6s0
quoka (192.168.0.110) at b8:cb:29:d0:ec:83 [ether] on enp6s0
p01 (192.168.0.101) at 34:40:b5:86:ef:38 [ether] on enp6s0
? (192.168.0.114) at b8:cb:29:d0:ec:a3 [ether] on enp6s0
p05 (192.168.0.105) at 34:40:b5:86:cc:ec [ether] on enp6s0
# enp11s0 인터페이스에서 210.123.42.180 에 해당하는 엔트리를 제거
dmlab@piggy:/home/users/bconfiden2$ sudo arp -v -i enp11s0 -d 210.123.42.208
arp: SIOCDARP(dontpub)
# 제거 후 확인해보면 조회되지 않음
dmlab@piggy:/home/users/bconfiden2$ arp -v -i enp11s0 210.123.42.208
Entries: 85	Skipped: 85	Found: 0
210.123.42.208 (210.123.42.208) -- no entry
# ping 보내서 내부적으로 arp 응답을 받아와 엔트리에 추가
dmlab@piggy:/home/users/bconfiden2$ ping -c 1 210.123.42.208
PING 210.123.42.208 (210.123.42.208) 56(84) bytes of data.
64 bytes from 210.123.42.208: icmp_seq=1 ttl=128 time=0.393 ms

--- 210.123.42.208 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.393/0.393/0.393/0.000 ms
# arp 테이블에 추가되었음을 확인
dmlab@piggy:/home/users/bconfiden2$ arp -v -i enp11s0 210.123.42.208
Address                  HWtype  HWaddress           Flags Mask            Iface
210.123.42.208           ether   f0:2f:74:dc:dc:53   C                     enp11s0
Entries: 86	Skipped: 85	Found: 1