Gast
#2448455
Hallo, ich bin grade dabei für die Kommunikation mit einem FPGA ein Protokoll zu basteln welches direkt in Ethernet Frames gekapselt ist, also ohne IP dazwischen. Soweit ansich keine Kunst nur habe ich bei ersten Tests etwas merkwürdiges festgestellt. Beim Versuch im PC-Empfangsprogramm auf einen eigenen Ethertype (0x1234) zu filtern funktioniert es nicht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Wenn ich die Zeile: if( ( sock = socket(AF_PACKET, SOCK_PACKET, htons(0x1234))) == -1) durch if( ( sock = socket(AF_PACKET, SOCK_PACKET, htons(0x0800))) == -1) ersetze bekomme ich wie zu erwarten alle IPv4 Pakete angezeigt. beim ersetzen durch if( ( sock = socket(AF_PACKET, SOCK_PACKET, htons(0x0806))) == -1) die ARP Pakete beim ersetzen durch if( ( sock = socket(AF_PACKET, SOCK_PACKET, htons(ETH_P_ALL))) == -1) bekomme ich alles, inklusive der von mir gewünschten 0x1234 Pakete angezeigt. Warum funktioniert also das Filtern auf IPv4 (0x0800) aber auf ein eigenes Protokoll (0x1234) nicht? Wäre toll wenn mir da jemand weiterhelfen könnte.