arp === arp å½ä»¤ç¨äºæ¾ç¤ºåä¿®æ¹ IP å° MAC 转æ¢è¡¨ ## è¡¥å 说æ **arp å½ä»¤** æ¯ Address Resolution Protocolï¼å°åè§£æåè®®ï¼æ¯éè¿è§£æç½ç»å±å°åæ¥æ¾å¯»æ°æ®é¾è·¯å±å°åçä¸ä¸ªç½ç»åè®®å ä¸æå ¶éè¦çç½ç»ä¼ è¾åè®®ãè该å½ä»¤å¯ä»¥æ¾ç¤ºåä¿®æ¹ arp å议解æè¡¨ä¸çç¼å²æ°æ®ã è¿ä¸ªæ ¸å¿å议模åå®ç°RFC826ä¸å®ä¹ç Address Resolution Protocol [è¯æ³¨ï¼å³TCP/IPç第ä¸å±å°ç¬¬ä¸å±çå°å转æ¢åè®®]ï¼ç¨äºå¨ç´æ¥ç¸è¿çç½ç»ä¸æ¢ç¬¬äºå±ç¡¬ä»¶å°åå Ipv4 åè®®å°åä¹é´ç转æ¢ã ç¨æ·é¤éæ³å¯¹å ¶è¿è¡é ç½®ï¼å¦åä¸è¬ä¸ä¼ç´æ¥æä½è¿ä¸ªæ¨¡åã å®é ä¸ï¼å®æä¾å¯¹æ ¸å¿ä¸å ¶å®åè®®çæå¡ã ç¨æ·è¿ç¨å¯ä»¥ä½¿ç¨ packet(7) ç socketsï¼æ¶å° ARP å ï¼è¯æ³¨ï¼ä¸è¯åç»ï¼ã è¿æä¸ç§æºå¶æ¯ä½¿ç¨ netlink(7) socketsï¼å¨ç¨æ·ç©ºé´ç®¡ç ARP ç¼åçæºå¶ãæä»¬ä¹å¯ä»¥éè¿ ioctl (2) æ§å¶ä»»æ PF_INET socketä¸ç ARP 表 ARP 模åç»´æ¤ä¸ä¸ªç¡¬ä»¶å°åå°åè®®å°åæ å°çç¼åãè¿ä¸ªç¼åæå¤§å°éå¶ï¼æä»¥ä¸å¸¸ç¨çåæ§çè®°å½ï¼Entryï¼å°è¢«å徿¶é卿¸ é¤ï¼garbage-collectedï¼ï¼å徿¶é卿°¸è¿ä¸è½å 餿 ä¸ºæ°¸ä¹ çè®°å½ãæä»¬å¯ä»¥ä½¿ç¨ioctlsç´æ¥æçºµç¼å²ï¼ å¹¶ä¸å ¶æ§ç¶å¯ä»¥ç¨ä¸é¢å®ä¹ç sysctl è°èã 妿å¨éå®çæ¶é´ï¼è§ä¸é¢çsysctlï¼å ï¼ä¸æ¡ç°åæ å°æ²¡æè¯å®å馿¶ï¼ å认为ç¸é»å±çç¼åè®°å½å¤±æã 为äºå次åç®æ åéæ°æ®ï¼ARPå°é¦å è¯çè¯¢é®æ¬å°arpè¿ç¨ app_solicit 次ï¼è·åæ´æ°äºç MACï¼ä»è´¨è®¿é®æ§å¶ï¼å°åã å¦æå¤±è´¥ï¼å¹¶ä¸æ§çMACå°åæ¯å·²ç¥çï¼ååé ucast_solicit 次ç unicast probeã妿ä»ç¶å¤±è´¥ï¼åå°åç½ç»å¹¿æä¸ä¸ªæ°çARP请æ±,æ¤æ¶è¦ æå¾ åéæ°æ®çéå 妿 Linux æ¥å°ä¸ä¸ªå°å请æ±ï¼èä¸è¯¥å°åæå Linux 转åçå°åï¼å¹¶ä¸æ¥æ¶æ¥å£æå¼äºä»£ç arp æ¶ï¼Linux å°èªå¨æ·»å 䏿¡éæ°¸ä¹ ç代ç arp è®°å½ï¼å¦æå卿ç»å°ç®æ çè·¯ç±ï¼å䏿·»å 代ç arp è®°å½ã ### è¯æ³ ```shell arpï¼é项ï¼ï¼åæ°ï¼ ``` ### é项 ```shell -a # ä¸»æº ï¼æ¾ç¤º arp ç¼å²åºçæææ¡ç®ï¼ -H # å°åç±»å ï¼æå® arp æä»¤ä½¿ç¨çå°åç±»åï¼ -d # ä¸»æº ï¼ä» arp ç¼å²åºä¸å 餿å®ä¸»æºç arp æ¡ç®ï¼ -D # ä½¿ç¨æå®æ¥å£ç硬件å°åï¼ -e # 以 Linux çæ¾ç¤ºé£æ ¼æ¾ç¤º arp ç¼å²åºä¸çæ¡ç®ï¼ -i # æ¥å£ ï¼æå®è¦æä½ arp ç¼å²åºçç½ç»æ¥å£ï¼ -s # ä¸»æº MAC å°å ï¼è®¾ç½®æå®ç主æºç IP å°åä¸ MAC å°åçéææ å°ï¼ -n # 以æ°åæ¹å¼æ¾ç¤º arp ç¼å²åºä¸çæ¡ç®ï¼ -v # æ¾ç¤ºè¯¦ç»ç arp ç¼å²åºæ¡ç®ï¼å æ¬ç¼å²åºæ¡ç®çç»è®¡ä¿¡æ¯ï¼ -f # æä»¶ ï¼è®¾ç½®ä¸»æºç IP å°åä¸ MAC å°åçéææ å°ã ``` ### åæ° 主æºï¼æ¥è¯¢ arp ç¼å²åºä¸æå®ä¸»æºç arp æ¡ç®ã ### å®ä¾ æ¾ç¤ºarp ç¼å²åºå 容 ```shell [root@localhost ~]# arp -v Address HWtype HWaddress Flags Mask Iface 192.168.0.134 ether 00:21:5E:C7:4D:88 C eth1 115.238.144.129 ether 38:22:D6:2F:B2:F1 C eth0 Entries: 2 Skipped: 0 Found: 2 ``` æ·»å éæ arp æ å° ```shell arp -s IP MAC-ADDRESS arp -s 192.168.1.1 00:b1:b2:b3:b4:b5 ``` å é¤ arp ç¼åæ¡ç® ```shell arp -d 192.168.1.1 ```