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地址。

posted on 2016-07-12 10:17  flyzeropv  阅读(13842)  评论(0编辑  收藏  举报