[PYTHON] scapy IPv6

Memorandum.

Router solicit

#Wirf weiter wie gewohnt
>>> sendp(Ether()/IPv6()/ICMPv6ND_RS())
#Ich möchte eine Antwort
>>> sr1(IPv6()/ICMPv6ND_RS())

Für DHCPv6-Anfragen ist eine Client-ID erforderlich (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

Es sieht so aus, wenn es mit DHCPv6 verbunden ist. Werben, werben, anfordern, antworten. dnsmasq antwortet vorerst.

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 antwortet nicht ohne DHCP6OptIA_NA in DHCPv6_Solicit. Wenn Sie die Beschreibung von RFC 3351 so ausführen, wie sie ist, wird sie angehängt (für die Ichiou-Validierung nicht erforderlich).

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

Führen Sie außerdem DHCPv6-RelayForward und RelayReply aus. Die src-Adresse im folgenden Beispiel wird aus dem Wert extrahiert, als sie stateful zugewiesen wurde. Wenn Sie Slaac verwenden, sollten Sie in der Lage sein, es zur Hand zu berechnen.

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
Scapy-Tipps