Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Monitory sieci wywołują funkcję RecognizeFrame analizatora, aby sprawdzić, czy analizator rozpoznaje nieprzypisane dane ramki. Nieodebrane dane mogą znajdować się na początku ramki, ale zazwyczaj nieodebrane dane znajdują się w środku ramki. Na poniższej ilustracji przedstawiono nieodebrane dane znajdujące się w środku ramki.
Usługa Network Monitor udostępnia następujące informacje, gdy wywołuje funkcję RecognizeFrame:
- Uchwyt do ramki.
- Wskaźnik do początku ramki.
- Wskaźnik na początek nieodebranych danych.
- Wartość MAC pierwszego protokołu w ramce.
- Liczba bajtów w nieodebranych danych; oznacza to, że bajty pozostają w ramce.
- Dojście do poprzedniego protokołu.
- Przesunięcie poprzedniego protokołu.
Gdy biblioteka DLL analizatora określa, że nieodebrane dane zaczynają się od protokołu analizatora, biblioteka DLL analizatora określa, gdzie rozpoczyna się następny protokół i który protokół następuje. Funkcje bibliotek DLL analizatora działają w następujący warunkowy sposób:
- Jeśli biblioteka DLL analizatora rozpoznaje nieodebrane dane, biblioteka DLL analizatora ustawia parametr pProtocolStatus i zwraca wskaźnik do następnego protokołu w ramce lub null. zwracana jest wartość NULL, jeśli bieżący protokół jest ostatnim protokołem w ramce.
- Jeśli biblioteka DLL analizatora rozpoznaje nieodebrane dane i identyfikuje następujący protokół (z informacji podanych w protokole), zwraca wskaźnik do uchwytu następnego protokołu w parametrze funkcji phNextProtocol.
- Jeśli biblioteka DLL analizatora nie rozpoznaje nieodebranych danych, biblioteka DLL analizatora zwraca wskaźnik na początek nieodebranych danych, a monitor sieci nadal próbuje przeanalizować nieodebrane dane.
Aby zaimplementować „RecognizeFrame”
Przetestuj, aby ustalić, czy protokół został rozpoznany.
Jeśli rozpoznasz niezidentyfikowane dane i wiesz, który protokół jest kolejny, ustaw pProtocolStatus na PROTOCOL_STATUS_NEXT_PROTOCOL, ustaw phNextProtocol na wskaźnik wskazujący uchwyt następnego protokołu, a następnie zwróć wskaźnik do następnego protokołu.
–lub–
Jeśli rozpoznasz nieoznaczone dane i nie wiesz, któremu protokołowi odpowiada, ustaw pProtocolStatus na PROTOCOL_STATUS_RECOGNIZED, a następnie zwróć wskaźnik do kolejnego protokołu.
–lub–
Jeśli rozpoznasz nieodebrane dane, a protokół jest ostatnim protokołem w ramce, ustaw wartość pProtocolStatus na PROTOCOL_STATUS_CLAIMED, a następnie zwróć wartość null.
–lub–
Jeśli nie rozpoznasz nieodebranych danych, ustaw pProtocolStatus na PROTOCOL_STATUS_NOT_RECOGNIZED, a następnie zwróć wskaźnik przekazany do Ciebie w pProtocol.
Poniżej przedstawiono podstawową implementację RecognizeFrame.
#include <windows.h>
LPBYTE BHAPI MyProtocol_RecognizeFrame( HFRAME hFrame,
LPBYTE pMacFrame,
LPBYTE pProtocol,
DWORD MacType,
DWORD BytesLeft,
HPROTOCOL hPrevProtocol,
DWORD nPreviuosProtOffset,
LPDWORD pProtocolStatus,
LPHPROTOCOL phNextProtocol,
LPDWORD InstData)
// Test unclaimed data.
// If unclaimed data is recognized, but you do not know what follows.
*pProtocolStatus = PROTOCOL_STATUS_RECOGNIZED;
return pProtocol + MY_PROTOCOL_LENGTH;
// If unclaimed data is recognized and you know what follows.
*pProtocolStatus = PROTOCOL_STATUS_NEXT_PROTOCOL;
phNextProtocol = GetProtocolFromTable(
hTable,
ItemToFind,
lpInstData);
return pProtocol + MY_PROTOCOL_LENGTH;
// If unclaimed data is recognized and the protocol is the last
// protocol in the frame.
*pProtocolStatus = PROTOCOL_STATUS_CLAIMED;
return NULL;
// If the unclaimed data is not recognized.
*pProtocolStatus = PROTOCOL_STATUS_NOT_RECOGNIZED;
return *pProtocol;
}