출력 파일에 모든 IP가 한 번만 나타나도록 멀티캐스트 핑에서 모든 노드로의 출력을 필터링하려면 어떻게 해야 합니까?
- 새 장치가 네트워크에 연결되면 연결 타임스탬프가 있는 파일에 기록됩니다.
- 장치가 네트워크를 떠나면 해당 파일에서 제거됩니다.
- 마지막에 출력 파일에는 타임스탬프가 결합된 네트워크에서 현재 연결할 수 있는 장치가 표시됩니다.
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 time=0.018 ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=1 ttl=64 time=0.490ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=1 ttl=64 time=0.739ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=2 ttl=64 time=0.037ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=2 ttl=64 time=0.513ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=2 ttl=64 time=0.674ms(DUP!) fe80::dddd:dddd:dddd:dddd의 64바이트: icmp_seq=2 ttl=64 time=228ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=3 ttl=64 time=0.033ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=3 ttl=64 time=0.460ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=3 ttl=64 time=0.611 ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=4 ttl=64 time=0.045ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=4 ttl=64 time=0.485ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=4 ttl=64 time=0.609ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=5 ttl=64 time=0.035ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=5 ttl=64 time=0.518ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=5 ttl=64 time=0.580ms(DUP!) fe80::eeee:eeee:eeee:eeee의 64바이트: icmp_seq=5 ttl=255 time=201ms(DUP!) fe80::dddd:dddd:dddd:dddd의 64바이트: icmp_seq=5 ttl=64 time=237ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=6 ttl=64 time=0.032ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=6 ttl=64 time=0.508ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=6 ttl=64 time=0.540ms(DUP!) fe80::aaaa:aaaa:aaaa:aaaa의 64바이트: icmp_seq=7 ttl=64 time=0.038 ms fe80::bbbb:bbbb:bbbb:bbbb의 64바이트: icmp_seq=7 ttl=64 time=0.550ms(DUP!) fe80::cccc:cccc:cccc:cccc에서 64바이트: icmp_seq=7 ttl=64 time=0.640ms(DUP!) fe80::dddd:dddd:dddd:dddd의 64바이트: icmp_seq=7 ttl=64 time=76.6ms(DUP!) ip6-allnodes 핑 통계 --- 7개 패킷 전송, 7개 수신, +18개 중복, 0% 패킷 손실, 시간 6020ms rtt 최소/평균/최대/mdev = 0.018/30.086/237.386/72.776ms
답변1
Ping은 이에 적합한 도구가 아닙니다. 주소가 여러 개인 경우에도 각 장치는 한 번만 응답합니다. IPv6에서는 여러 주소를 갖는 것이 일반적입니다.
노력하다NDPMon. 그 목적은 이웃 검색 이벤트를 추적하는 것입니다. 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
불행히도 나는 참여자를 명시적으로 나열할 방법이 없다는 것을 알고 있습니다.