(Przepraszam jeśli nie jestem w stanie postawić pytanie poprawnie. Angielskiego w nie mój język podstawowy).Prawidłowy sposób analizowania pakiet sieciowy w C
Próbuję analizować pakiet synce ESMC. Jest to pakiet protokołu powolnego Ethernetu.
Podejście 1: Do parsowania tego pakietu użyłem metody bajt po bajcie podobnej do tej, którą wykonano here.
Podejście 2: Innym sposobem na przeanalizowanie pakietu byłoby zdefiniowanie "struktury" reprezentującej cały pakiet i uzyskanie dostępu do poszczególnych pól w celu pobrania wartości w określonym przesunięciu. Jednak w tym podejściu struktura może zawierać dopełnienie i wyrównanie (co nie jest pewne), ale w systemie Linux różne nagłówki pakietów są definiowane w formie struktury, np. iphdr w ip.h. Pakiety IP (bufor) można odlewać do 'iphdr', aby pobrać pola nagłówków ip, więc musi działać.
Które podejście lepiej przeanalizować pakiet sieciowy w C?
Czy dopełnienie i zmiana struktury mają znaczenie podczas analizowania pakietu za pomocą podejścia 2? Jeśli tak, w jaki sposób nagłówki linuksowe przezwyciężyły ten problem?
Wszystkie kompilatory mają funkcjonalność do blokowania struktur lub wyrównywania pól elementów, a także do użycia pól bitowych dla pól krótszych o jeden bajt. –
@JoachimPileborg - które podejście byłoby lepsze, portabale i efektywne? – Abhirav
Przenośne między kompilatorami, systemami operacyjnymi, sprzętem lub ich kombinacją? Wydajniejsza, szybka, zużywająca mniej pamięci lub inne kryteria? Oba podejścia mają zalety, a który jest "najlepszy" zależy w dużej mierze od twoich celów. –