1#!/usr/bin/env python 2 3# This file is part of Scapy 4# Scapy is free software: you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation, either version 2 of the License, or 7# any later version. 8# 9# Scapy is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with Scapy. If not, see <http://www.gnu.org/licenses/>. 16 17# scapy.contrib.description = RIPng 18# scapy.contrib.status = loads 19 20from scapy.packet import * 21from scapy.fields import * 22from scapy.layers.inet import UDP 23from scapy.layers.inet6 import * 24 25class RIPng(Packet): 26 name = "RIPng header" 27 fields_desc = [ 28 ByteEnumField("cmd", 1, {1 : "req", 2 : "resp"}), 29 ByteField("ver", 1), 30 ShortField("null", 0), 31 ] 32 33class RIPngEntry(Packet): 34 name = "RIPng entry" 35 fields_desc = [ 36 ConditionalField(IP6Field("prefix", "::"), 37 lambda pkt: pkt.metric != 255), 38 ConditionalField(IP6Field("nexthop", "::"), 39 lambda pkt: pkt.metric == 255), 40 ShortField("routetag", 0), 41 ByteField("prefixlen", 0), 42 ByteEnumField("metric", 1, {16 : "Unreach", 43 255 : "next-hop entry"}) 44 ] 45 46bind_layers(UDP, RIPng, sport=521, dport=521) 47bind_layers(RIPng, RIPngEntry) 48bind_layers(RIPngEntry, RIPngEntry) 49 50if __name__ == "__main__": 51 from scapy.main import interact 52 interact(mydict=globals(), mybanner="RIPng") 53 54