How to scan ipv6 enabled hosts on my LAN?

Best to ping a special all nodes on a link multicast address - ff02::1 - and wait for the responses:

~ $ ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::a11:96ff:fe04:50cc wlan0: 56 data bytes
64 bytes from fe80::a11:96ff:fe02:50ce: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from fe80::1eaf:f7ff:fe64:ec8e: icmp_seq=1 ttl=64 time=1.82 ms (DUP!)
64 bytes from fe80::6676:baff:feae:8c04: icmp_seq=1 ttl=64 time=4047 ms (DUP!)
64 bytes from fe80::5626:96ff:fede:ae5f: icmp_seq=1 ttl=64 time=4047 ms (DUP!)
64 bytes from fe80::5626:96ff:fede:ae5f: icmp_seq=1 ttl=64 time=3049 ms (DUP!)
64 bytes from fe80::6676:baff:feae:8c04: icmp_seq=1 ttl=64 time=3049 ms (DUP!)
[...]
^C

A couple of points here:

  • you must specify the interface: -I eth0
  • The responses are link-local addresses - they can easily be converted to your global address by replacing the leading fe80: with your subnet's prefix, e.g. with 2001:db8:1234:abcd: if that's your subnet's prefix.

See http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml for some other multicast addresses other than ff02::1 that may be of an interest.