ฉันมีอาร์เรย์ของที่อยู่ mac และเมื่อไม่มีอยู่ในเครือข่าย ฉันต้องการทำบางอย่าง นี่คือแผนเดิมของฉัน:
mac_addresses=('1' '2' '3')
arp_output=$(อาร์พี)
สำหรับระดับใน "${mac_addresses[@]}"
ทำ
เสียงสะท้อน "$arp_output" | grep -iq "$level" || mac_count=$((mac_count+1))
เสร็จแล้ว
ถ้า [[ "$mac_count" = "${#mac_addresses[@]}" ]]
แล้ว
ทำอะไรสักอย่าง
ไฟ
ฉันใช้ที่อยู่ mac ของโทรศัพท์เพื่อทดสอบ มีเพียงองค์ประกอบเดียวในอาร์เรย์: โทรศัพท์ของฉัน
ฉันสังเกตเห็นว่าสคริปต์ทำงานไม่น่าเชื่อถือ เมื่อโทรศัพท์ของฉันเชื่อมต่อกับเครือข่าย สคริปต์ไม่ได้ทำอะไรเลย ดี. เมื่อฉันตัดการเชื่อมต่อโทรศัพท์ของฉันจากเครือข่าย (หรือที่เรียกว่าปิด wifi) มันยังคงไม่ทำอะไรเลย แม้ว่ามันควรจะเป็น ณ จุดนี้ (เพราะโทรศัพท์ของฉันไม่ได้อยู่ในเครือข่ายอีกต่อไปและนั่นเป็นเพียงเครื่องเดียวในอาร์เรย์ ดังนั้นมันควรทำ บางอย่าง ณ จุดนี้)
ดังนั้นฉันจึงลองวิธีอื่น: ใช้ sudo nmap -sn 192.168.2.*
. อย่างไรก็ตามสิ่งนี้ไม่ได้ผลเช่นกัน
เมื่อโทรศัพท์ของฉันอยู่ มันไม่ได้ทำอะไรเลย ฉันตัดการเชื่อมต่อโทรศัพท์ของฉัน และมันทำอะไรบางอย่าง ฉันเชื่อมต่อโทรศัพท์อีกครั้งและยังคงทำบางอย่าง แม้ว่าโทรศัพท์ของฉันจะอยู่บนเครือข่ายอีกครั้ง และมันไม่เกี่ยวกับวินาที โทรศัพท์ของฉันอยู่ในเครือข่ายเป็นเวลา 20 นาทีแล้วและยังคงทำบางอย่างอยู่
มีวิธีแก้ไขปัญหานี้หรือไม่? เป็นเพราะแคชบางอย่างหรือไม่?
แก้ไข: [ตอบกลับ Minsky]
ดูต่อไปนี้:
# "1" จะเป็นที่อยู่ mac ของโทรศัพท์ของฉัน
อาร์พ | grep -i "1" #โทรศัพท์เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
#โทรศัพท์ถูกตัดการเชื่อมต่อแล้ว
อาร์พ | grep -i "1" #โทรศัพท์ไม่ได้เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
อาร์พ | grep -i "1" #โทรศัพท์ไม่ได้เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
อาร์พ | grep -i "1" #โทรศัพท์ไม่ได้เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
ping -b 192.168.2.255
ผลผลิตขนาดใหญ่ 192.168.2.16 ไม่ปรากฏในเอาต์พุต
อาร์พ | grep -i "1" #โทรศัพท์ไม่ได้เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
#โทรศัพท์เชื่อมต่อใหม่แล้ว
อาร์พ | grep -i "1" #โทรศัพท์เชื่อมต่อกับ wifi
192.168.2.16 อีเธอร์ 1 C enp3s0
sudo nmap -sn 192.168.2.* | เกรป "1"
#ไม่มีการตอบกลับ; รหัสออก 1