如何删除iproute2的IPv6地址?

我试图编写一个可以改变本地机器IP地址的应用程序。 在做一些实验的时候,我注意到如果我刚刚连接到无线networking,我被分配了一个IPv6地址,它是MAC地址的函数。 考虑以下命令序列:

<disconnect wireless and reconnect> $ ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:7d:7c:42 inet addr:192.168.2.98 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe7d:7c42/64 Scope:Link UP BROADCAST RUNNING MULTICAST... $ sudo ip addr flush dev eth0 $ ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:7d:7c:42 UP BROADCAST RUNNING MULTICAST... $ sudo dhclient eth0 $ ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:7d:7c:42 inet addr:192.168.2.98 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST 

请注意,刷新后,我将丢失IPv4和IPv6地址,但在使用dhclient进行续订后,我只会重新初始化IPv4地址。 为什么是这样? 我能做些什么来自动重新分配我的IPv6地址?

而不是刷新接口的所有IP地址,只能刷新IPv4地址。 这里有一个例子,我有一个IPv4和IPv6地址的接口:

 # ip address show qemu-br2 5: qemu-br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether ca:b8:97:12:0a:30 brd ff:ff:ff:ff:ff:ff inet 192.168.20.1/24 scope global qemu-br2 valid_lft forever preferred_lft forever inet6 fe80::c8b8:97ff:fe12:a30/64 scope link valid_lft forever preferred_lft forever 

要只刷新IPv4:

 # ip -4 address flush qemu-br2 

看到IPv6仍然存在:

 # ip address show qemu-br2 5: qemu-br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether ca:b8:97:12:0a:30 brd ff:ff:ff:ff:ff:ff inet6 fe80::c8b8:97ff:fe12:a30/64 scope link valid_lft forever preferred_lft forever 

一般来说,您可以添加-4-6来使iproute2命令分别只对IPv4或IPv6地址起作用。