arp - ลบไม่ลบรายการ; ทำเครื่องหมายเพียงรายการว่าเป็น "ไม่สมบูรณ์"


10
$ sudo arp -avn
? (10.10.7.30) at 00:cc:cc:bb:dd:86 [ether] on eth0
...

$ sudo arp --delete 10.10.7.30

$ sudo arp -avn
? (10.10.7.30) at <incomplete> [ether] on eth0

หลังจากที่ผมคาดไว้ไม่มีรายการสำหรับ--delete 10.10.7.30รายการยังคงอยู่และถูกทำเครื่องหมาย<incomplete>โดยไม่คาดหมาย

ใช้อูบุนตู 10.04

คำตอบ:


10

รายการจะถูกลบออกเพียงอดทน

(หากคุณต้องการคำตอบที่สั้นที่สุด: ไม่สมบูรณ์ == ถูกลบ)

สมมติว่า "ลบ" เป็นคำที่ไม่ถูกต้องสำหรับการกระทำ สิ่งที่เกิดขึ้นจริงที่นี่คือรายการถูกตั้งค่าเป็นสถานะ"ส่งคำขอไม่มีคำตอบ" (เช่นกระบวนการ ARP "ไม่สมบูรณ์") ราวกับว่าเครื่องนั้นไม่สามารถเข้าถึงได้จริงๆ

ตอนนี้รายการจะถูกลบอย่างสมบูรณ์ในไม่ช้าเว้นแต่จะได้รับการตอบสนอง ARP ที่ถูกต้องใหม่ในระหว่างนี้ ในกรณีนั้นรายการจะถูกเพิ่มใหม่อีกครั้งแม้ว่าจะถูกลบออกแทนที่จะถูกทำเครื่องหมายว่าไม่สมบูรณ์ ดังนั้นจึงไม่มีมืออาชีพหรือต่อต้านพฤติกรรมนี้

แต่โปรดจำไว้ว่าเรากำลังพูดถึงแคช การลบสิ่งต่าง ๆ จากแคชนั้นยากและมีราคาแพง เป็นวิธีที่มีประสิทธิภาพมากขึ้นในการทำให้รายการใช้ไม่ได้และรอว่าจะถูกแทนที่ก่อนที่จะถูกลบออกในที่สุด แต่สำหรับระบบมันไม่มีความแตกต่างอย่างสิ้นเชิงถ้ารายการนั้นหายไปจากรายการหรือทำเครื่องหมายว่าไม่สมบูรณ์


และไม่มีทางที่จะลบมันจริงๆเพื่อที่ว่าในภายหลังจำเป็นต้องทราบว่าปลายทางจะเรียกใช้การค้นหา ARP "ใหม่" หรือไม่
Skaperen

1
แต่นั่นคือกรณีที่นี่ หากมีสิ่งใดค้นหารายการที่ระบุว่า "ไม่สมบูรณ์" จะมีการส่งคำขอ ARP ใหม่ หากตอบแล้วรายการนั้นจะถูกอัพเดตและจะไม่ "ไม่สมบูรณ์" อีกต่อไป ถ้าไม่มีคำตอบกลับรายการจะถูกลบออกจากรายการหลังจากเวลา (นั่นคือเหตุผลที่ฉันคิดว่ามันไม่มีประโยชน์อะไรที่จะ "- ลบ" รายการด้วยตนเองหากเครื่องมีชีวิตอยู่รายการจะถูกรีเฟรชถ้ามันหายไปจริงๆแล้วทำไม "- ลบ" รายการด้วยตนเองยังไง?)
กรรม Fusebox

... อยู่ในใจของฉันว่าคุณอาจต้องการ "เปลี่ยน" ที่อยู่ ARP สำหรับที่อยู่ IP ในกรณีพิเศษนี้คุณสามารถ "- ลบ" ด้วยตนเองและให้คำขอ ARP ถัดไปส่งคืนที่อยู่ใหม่ แต่สำหรับสถานการณ์นี้มันไม่สำคัญเลยถ้ารายการนั้นถูกลบอย่างชัดเจนจากรายการหรือทำเครื่องหมายว่า "ไม่สมบูรณ์" สำหรับเทคโนโลยีที่เกี่ยวข้องก็เหมือนกัน
Karma Fusebox

@KarmaFusebox คุณรู้หรือไม่ว่ามีแคชนี้อยู่ที่ไหน มันอยู่ในหน่วยความจำกระบวนการหรือไม่? ถ้าเป็นเช่นนั้นกระบวนการใด? หรือมันจะดูแลโดยเคอร์เนล? ในไฟล์บนดิสก์? อื่น?
JamesThomasMoon1979

@KarmaFusebox ลบรายการทำให้รู้สึกว่ารายการนอกจากนี้ยังได้เพิ่มด้วยตนเอง (และดังนั้นจึงมีการตั้งธงถาวร)
cha5on

7

เพียงเพื่อเติมเต็มคำตอบอื่น ๆ ทั้งหมดผมพบว่าการเชื่อมโยงนี้มีประโยชน์มาก

ในบางกรณีการใช้ipมีความเหมาะสมมากกว่าเช่นคำสั่ง:

# ip -s -s neigh flush all

ผลลัพธ์อาจขึ้นอยู่กับเคอร์เนล linux ของคุณ


มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ทุกคนที่มีปัญหากับคำตอบอื่น ๆ ควรลอง
jackgu1988

3

นอกเหนือจากคำตอบที่ดีอื่น ๆ มันคุ้มค่าพูดถึงว่ามันเป็นไปได้ที่จะทำให้สมบูรณ์แคช arp โดยการลบมัน หนึ่งในวิธีที่เจ็บปวดน้อยกว่าคือ:

ip link set arp off dev eth0 ; ip link set arp on dev eth0

สิ่งนี้ควรลบรายการทั้งหมดไม่ว่าจะอยู่ในสถานะใด

วิธีการอื่นรวมถึงการดาวน์และอัพอินเทอร์เฟซและวิธีที่คล้ายกันเพื่อให้แคช arp ถูกลบและสร้างใหม่อย่างสมบูรณ์


1
นี่คือคำตอบที่ถูกต้อง ฉันต้องการสิ่งนี้อย่างแน่นอน ไม่เพียงทำเครื่องหมายรายการ "ไม่สมบูรณ์" หรือ "ยังไม่ถึงสักพัก" ขอบคุณ.
จอห์นแฮมิลตัน

0

ฉันรู้ว่านี่อาจฟังดูชัดเจน แต่สำหรับผู้ที่ไม่คุ้นเคยกับเชลล์นี่เป็นคำแนะนำของฉัน:

เริ่มจากคำตอบของ @KarmaFusebox ทำไมไม่ทำอย่างนั้น ... :

arp -a | grep "incomplet" -i -v

มันจะแสดงเฉพาะรายการแคชที่มีอยู่ / ที่ใช้งานอยู่
ฉันคิดว่ามันคงเป็นคำสั่งที่สอดคล้องกับ POSIX และเป็นวิธีที่ใช้สคริปต์หากนั่นคือสิ่งที่คุณต้องการ


ฉันกำลังมองหาคำอธิบายที่สมเหตุสมผลว่าทำไมarpมีลักษณะเช่นนี้ ดูเหมือนว่าแปลก arpเป็นไปได้ว่าอาจถูกบังคับให้ลบ<incomplete>รายการหรือไม่
JamesThomasMoon1979

ดี @ JamesThomasMoon1979 ฉันอยากจะบอกว่าในระบบที่ดูเหมือนจะไม่ทำตัวแบบนี้ (เช่น: คอนโซล Windows) พวกเขาเป็นจริง ข้อแตกต่างคือพวกเขาไม่แสดงincompleteรายการในคำสั่ง arp cache list
Sopalajo de Arrierez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.