Linux获取网卡的IPv6地址
最近正在看《Uinx网络编程》,看到使用ioctl获取网卡的IPv4地址,就想着如何获取IPv6地址?百度搜索一番也没有找到很好的结果,突然想起前一段时间看到过使用strace跟踪系统调用的一篇文章,就打算跟踪一下ifconfig命令,看看ifconfig是怎样获取IPv6地址的
$ strace -o out ifconfig ens33 Link encap:Ethernet HWaddr 00:50:56:3d:e2:ca inet addr:192.168.31.172 Bcast:192.168.31.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe3d:e2ca/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24774 errors:0 dropped:0 overruns:0 frame:0 TX packets:20456 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3668629 (3.6 MB) TX bytes:15440678 (15.4 MB)
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:320 errors:0 dropped:0 overruns:0 frame:0 TX packets:320 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:23760 (23.7 KB) TX bytes:23760 (23.7 KB) |
strace命令产生的结果保存在out文件中,现在来打开它
原来ifconfig命令是从/proc/net/if_inet6文件中获取到的IPv6地址
$ cat /proc/net/if_net6 00000000000000000000000000000001 01 80 10 80 lo fe80000000000000025056fffe3de2ca 02 40 20 80 ens33 |
文件中的每一行记录了一个网卡的信息,第一串数字就是十六进制的IPv6地址。