Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Network Monitors meghívja az elemző RecognizeFrame függvényét annak megállapításához, hogy az elemző felismeri-e a keret nem igényelt adatait. Előfordulhat, hogy a nem igényelt adatok egy keret elején találhatók, de a nem igényelt adatok általában a keret közepén találhatók. Az alábbi ábrán a keret közepén található nem igényelt adatok láthatók.
A Network Monitor a következő információkat adja meg, amikor meghívja a RecognizeFrame függvényt:
- Egy fogópont a kerethez.
- A keret kezdőpontjára mutató mutató.
- Mutató a nem igényelt adatok elejére.
- A keret első protokolljának MAC-értéke.
- A nem törölt adatok bájtjainak száma; vagyis a keretben fennmaradó bájtok.
- Az előző protokoll hivatkozása.
- Az előző protokoll eltolása.
Amikor az elemző DLL megállapítja, hogy a nem igényelt adatok az elemzési protokolllal kezdődnek, az elemző DLL határozza meg, hogy hol kezdődik a következő protokoll, és melyik protokoll következik. Az elemző DLL a következő feltételes módokon működik:
- Ha az elemző DLL felismeri a nem igényelt adatokat, az elemző DLL beállítja a pProtocolStatus paramétert, és egy mutatót ad vissza a keret következő protokolljához, vagy NULL. NULL lesz visszaadva, ha az aktuális protokoll az utolsó protokoll a keretben.
- Ha az elemző DLL felismeri a nem igényelt adatokat, és azonosítja az azt követő protokollt (a protokollban megadott információk alapján), akkor az elemző DLL a függvény phNextProtocol paraméterében lévő következő protokoll leírójára mutató mutatót ad vissza.
- Ha az elemző DLL nem ismeri fel a nem elismert adatokat, az elemző DLL visszaadja a mutatót a nem elismert adatok elejére, és a Network Monitor továbbra is megpróbálja elemezni a nem igényelt adatokat.
RecognizeFrame implementálása
Tesztelje annak megállapítását, hogy felismeri-e a protokollt.
Ha felismeri a nem igényelt adatokat, és tudja, hogy melyik protokollt követi, állítsa pProtocolStatus PROTOCOL_STATUS_NEXT_PROTOCOL értékre, állítsa phNextProtocol egy mutatóra, amely a következő protokoll fogópontjára mutat, majd visszaad egy mutatót a következő protokollhoz.
–vagy–
Ha felismeri a nem igényelt adatokat, és nem tudja, hogy melyik protokollt követi, állítsa pProtocolStatus PROTOCOL_STATUS_RECOGNIZED értékre, majd adjon vissza egy mutatót a következő protokollhoz.
–vagy–
Ha felismeri a nem igényelt adatokat, és a protokoll egy keretben az utolsó protokollként szerepel, állítsa be a pProtocolStatus értéket PROTOCOL_STATUS_CLAIMED-re, majd adjon vissza NULL.
–vagy–
Ha nem ismeri fel a nem igényelt adatokat, állítsa a pProtocolStatus értékét PROTOCOL_STATUS_NOT_RECOGNIZED-ra, majd adja vissza a mutatót, amely átadásra került önnek a pProtocol-ban.
Az alábbiakban a RecognizeFramealapszintű implementációját ismertetjük.
#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;
}