[PYTHON] scapy IPv6

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)
)

Recommended Posts

scapy IPv6
Astuces Scapy