Mémorandum.
Router solicit
#Continuez à lancer comme d'habitude
>>> sendp(Ether()/IPv6()/ICMPv6ND_RS())
#Je veux une réponse
>>> sr1(IPv6()/ICMPv6ND_RS())
La sollicitation DHCPv6 nécessite un ID client (RFC 3351)
>>> client_id=DUID_LLT(lladdr=get_if_hwaddr(conf.iface6))
>>> a=sr1(IPv6(dst="ff02::1:2")/UDP()/DHCP6_Solicit()/DHCP6OptClientId(duid=client_id))
>>> client_id=a[DHCP6OptClientId].duid
>>> server_id=a[DHCP6OptServerId].duid
Cela ressemble à ceci lorsqu'il est connecté à DHCPv6 solliciter, annoncer, demander, répondre. dnsmasq répond pour le moment.
a=sr1(IPv6(dst="ff02::1:2")/UDP()/DHCP6_Solicit()
/DHCP6OptClientId(duid=DUID_LLT(lladdr=get_if_hwaddr(conf.iface6))))
b=sr1(IPv6(src=a[IPv6].dst, dst=a[IPv6].src)/UDP()/DHCP6_Request()
/DHCP6OptServerId(duid=a[DHCP6OptServerId].duid)
/DHCP6OptClientId(duid=a[DHCP6OptClientId].duid))
Cisco ne répondra pas sans DHCP6OptIA_NA dans DHCPv6_Solicit. Si vous exécutez la description de la RFC 3351 telle quelle, elle sera jointe (elle n'est pas requise par la validation Ichiou).
a=sr1(IPv6(dst="ff02::1:2")/UDP()/DHCP6_Solicit()
/DHCP6OptClientId(duid=DUID_LLT(lladdr=get_if_hwaddr(conf.iface6)))
/DHCP6OptIA_NA(iaid=1)
)
b=sr1(IPv6(dst="ff02::1:2")/UDP()/DHCP6_Request()
/DHCP6OptServerId(duid=a[DHCP6OptServerId].duid)
/DHCP6OptClientId(duid=a[DHCP6OptClientId].duid)
/DHCP6OptIA_NA(iaid=1)
)
En outre, exécutez DHCPv6-RelayForward et RelayReply. L'adresse src dans l'exemple ci-dessous est extraite de la valeur lorsqu'elle a été affectée à stateful. Si vous utilisez slaac, vous devriez pouvoir le calculer à portée de main.
c=sr1(IPv6(dst="ff05::1:3", src=b[DHCP6OptIA_NA].ianaopts[0].addr)
/UDP(sport=547, dport=547)
/DHCP6_RelayForward(linkaddr="fd00::152", peeraddr="fe80::2000:1")
/DHCP6OptRelayMsg()/DHCP6_Solicit()
/DHCP6OptClientId(duid=DUID_LLT(lladdr="00:11:22:33:44:55"))/DHCP6OptIA_NA(iaid=2)
)