OK, här är en ledtråd att peka dig i rätt riktning.
Utmaningen var: "Skriv en tcpdump / windump filter som kommer att fånga ICMPv6 Multicast Listener paket."
Låter enkelt, eller hur?
Med lite hjälp från Google hittar du att "typ" för multicast-lyssnare är 130, och ICMPv6 typ fältet är den första byten i huvudet. Så detta bör vara så enkelt som:
tcpdump-nn-p-v-s 0 icmp6 [0] = 130
Men om du kör kommandot får du tillbaka:
tcpdump: IPv6 övre skiktet protokollet stöds inte av proto [x]
Med andra ord kan du använda "icmp6" för att se alla ICMPv6 paket, men du kan inte använda den för att filtrera på någon av de ICMPv6 huvudet fält.
Så vi behöver en "Plan B". Räkna ut plan B och du har löst utmaningen. ![]()
Relaterade inlägg:


Den pragmatiska lösningen är, naturligtvis,
tcpdump-l-i någon icmp6 | grep-E '\ b160 \ b'
eller liknande.
Den pcap-baserad lösning beror på om du vill stödja IPv6 förlängning rubriker eller inte. Om inte, kan du helt enkelt använda en offset från IP-huvudet, om du vill stödja det, börjar det bli mer ont (se tcpdump-d ip6 protochain 58 för en BPF exempel på att jaga dessa huvuden!), Men sedan igen, icmp6 egentligen inte verkar stödja det heller. Finns det en lösning som inte involverar skriva din egen BPF, och stöder jagar protokollet kedjor?
/ * Steinar * /
Överens grep är det enklaste genomförandet. Bara gör det svårare att spara pcap filer.
För att citera RFC 2710: "Alla MLD meddelanden som beskrivs i detta dokument skickas med en länk-lokal IPv6 Source Adress, en IPv6-Hop gräns på 1 och en IPv6-router Alert alternativet [RTR-alert] i ett Hop-by-Hop Alternativ header ".
Så du behöver en förlängning header att hantera. Som för att behöva jaga rubriker, hittills har jag bara sett multicast lyssnaren paket med hop-by-hop header. Även om jag inte ser något i 2710 förbjöd användning av extra rubriker.
Man skulle kunna tänka sig IPsec-alternativ, men det låter lite svårbegripligt för MLD ...
Jag antar att om man antar att det är bara RTR-alert alternativ, är det av fast längd och du kan bara använda offset. Jag har ingen aning om du faktiskt kan göra iteration eller FALSKHET i textform pcap filter.
/ * Steinar * /
Hej, är denna funktion stöds inte för övre skikten.
Jag är inte säker är det kommer att fungera om nästa rubrik kommer att ingå.
Så om du vill filtrera icmp6 packtes av är att skriva och du vet att IPv6-header är 20 bytes kan du enkelt göra ip6 [21] & 130! = 0. Betyder första byte efter IPv6-huvudet, och det bör finnas ICMPv6 header