如何過濾從多播 ping6 到所有節點的輸出,以便在一瞬間獲得所有可存取的 IPv6 裝置?

如何過濾從多播 ping6 到所有節點的輸出,以便在一瞬間獲得所有可存取的 IPv6 裝置?

如何過濾從多播 ping 到所有節點的輸出,以便在輸出檔案中每個 IP 只出現一次?

  1. 如果新設備加入網絡,則會將其寫入帶有加入時間戳記的檔案中。
  2. 如果裝置離開網絡,它就會從該檔案中刪除。
  3. 最後,輸出檔案顯示網路中目前可存取的裝置以及加入時間戳
     ping6 -I eth1 ip6-allnodes
        從 fe80::aaaa:aaaa:aaaa:aaaa eth1 PING ip6-allnodes(ip6-allnodes):56 個資料位元組
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=1 ttl=64 時間=0.018 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=1 ttl=64 time=0.490 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=1 ttl=64 時間=0.739 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=2 ttl=64 時間=0.037 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=2 ttl=64 時間=0.513 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=2 ttl=64 時間=0.674 ms(DUP!)
        來自 fe80::dddd:dddd:dddd:dddd 的 64 個位元組:icmp_seq=2 ttl=64 time=228 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=3 ttl=64 時間=0.033 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=3 ttl=64 time=0.460 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=3 ttl=64 時間=0.611 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=4 ttl=64 時間=0.045 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=4 ttl=64 時間=0.485 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=4 ttl=64 時間=0.609 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=5 ttl=64 時間=0.035 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=5 ttl=64 時間=0.518 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=5 ttl=64 時間=0.580 ms(DUP!)
        來自 fe80::eeee:eeee:eeee:eeee 的 64 個位元組:icmp_seq=5 ttl=255 時間=201 毫秒(DUP!)
        來自 fe80::dddd:dddd:dddd:dddd 的 64 個位元組:icmp_seq=5 ttl=64 時間=237 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=6 ttl=64 時間=0.032 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=6 ttl=64 time=0.508 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=6 ttl=64 time=0.540 ms(DUP!)
        來自 fe80::aaaa:aaaa:aaaa:aaaa 的 64 個位元組:icmp_seq=7 ttl=64 時間=0.038 ms
        來自 fe80::bbbb:bbbb:bbbb:bbbb 的 64 個位元組:icmp_seq=7 ttl=64 時間=0.550 ms(DUP!)
        來自 fe80::cccc:cccc:cccc:cccc 的 64 個位元組:icmp_seq=7 ttl=64 時間=0.640 ms(DUP!)
        來自 fe80::dddd:dddd:dddd:dddd 的 64 個位元組:icmp_seq=7 ttl=64 時間=76.6 ms(DUP!)
        ip6-allnodes ping 統計數據 ---
        發送 7 個資料包,接收 7 個資料包,+18 個重複資料包,0% 資料包遺失,時間 6020ms
        rtt 最小值/平均值/最大值/mdev = 0.018/30.086/237.386/72.776 毫秒

答案1

Ping 不是執行此操作的合適工具。每個設備僅應答一次,即使它有多個位址。在 IPv6 中擁有多個位址是很正常的。

嘗試新民主黨星期一。其目的是追蹤鄰居發現事件。它可以記錄 IPv6 位址首次出現的時間、MAC 位址變更的時間等。

答案2

與 Sander 相同的想法,不同的工具([iproute2][1] 的監視命令)

$ ip -6 monitor all
[ROUTE][NEIGH]fdcc:216f:1d2c::24 dev eth0 lladdr 00:1a:92:7f:ea:3e REACHABLE
...

不過,如何同時取得所有可存取的路由器和節點有點困難。鄰居和路由表很快就會過時,這是有原因的,但這並不意味著躍點已經消失。這只是一種方便的方式,允許節點隨時出現和消失,而無需進一步加入/離開訊息。

話雖如此,您應該研究一下多播的一般工作原理,至少在某些思科交換器(具有多播偵聽器發現,MLD 的交換器)上,您可以直接存取多播表,因此您的問題改為:誰加入了該ff0x::1組。

理論上,Linux 核心也保存此訊息,如下所示:

$ ip -6 maddr
inet6 ff02::1:ffeb:ea92
inet6 ff02::1:ff00:16 users 3
inet6 ff02::1

不幸的是,我不知道如何明確列出加入者。

相關內容