Well I've never worked with ipv6 addresses nor with the netlink interface. I found some source code which describes how to use the netlink interface to get ip addresses, it is however for ipv4 addresses but it should work with ipv6 with a few modifications. Basically changing the family to AF_INET6 and changing the way the addresses are displayed should be enough. Anyways the example program is here:
http://linux-kernel.skylab.org/20010902/msg00920.html
The example program does however require you to be root to bind to the socket. But to get netlink information it's not necessary to bind to a socket. So just remove the bind part and you can run it as a normal user. Hope that helps somehow.