//This era la conversione di Delfi di fltdefs.h, ma dove è la fonte?
fltdefs dell'unità;
////////////////////////////////////////////////////////////////////////////////
//
Conversione di // Delfi di fltdefs.h per uso con il IPHLPAPI.DLL
//
////////////////////////////////////////////////////////////////////////////////
interfaccia
usi
Windows;
const
IPHLPAPI = “IPHLPAPI.DLL„;
Allineamento di byte di //
tipo
TByteArray = allineamento [0. Pred (MaxInt)] del byte;
PByteArray = ^TByteArray;
Tipi di dati di //
tipo
FILTER_HANDLE = indicatore;
PFILTER_HANDLE = ^FILTER_HANDLE;
INTERFACE_HANDLE = indicatore;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE;
Enumerazione di // GlobalFilter
const
GF_FRAGMENTS = 2;
GF_STRONGHOST = 8;
GF_FRAGCACHE = 9;
tipo
GLOBAL_FILTER = numero intero;
PGLOBAL_FILTER = ^GLOBAL_FILTER;
Enumerazione di // PFAddressType
const
PF_IPV4 = 0;
PF_IPV6 = 1;
tipo
PFADDRESSTYPE = numero intero;
PPFADDRESSTYPE = ^PFADDRESSTYPE;
Enumerazione di // PFForwardAction
const
PF_ACTION_FORWARD = 0;
PF_ACTION_DROP = 1;
tipo
PFFORWARD_ACTION = numero intero;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
Enumerazione di // PFFrameType
const
PFFT_FILTER = 1;
PFFT_FRAG = 2;
PFFT_SPOOF = 3;
tipo
PFFRAMETYPE = numero intero;
PPFFRAMETYPE = ^PFFRAMETYPE;
tipo
_PF_FILTER_DESCRIPTOR = annotazione imballata
dwFilterFlags: DWORD;
dwRule: DWORD;
pfatType: PFADDRESSTYPE;
SrcAddr: PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray;
DstMask: PByteArray;
dwProtocol: DWORD;
fLateBound: DWORD;
wSrcPort: Parola;
wDstPort: Parola;
wSrcPortHighRange: Parola;
wDstPortHighRange: Parola;
estremità;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR;
tipo
_PF_FILTER_STATS = annotazione imballata
dwNumPacketsFiltered: DWORD;
Info: PF_FILTER_DESCRIPTOR;
estremità;
PF_FILTER_STATS = _PF_FILTER_STATS;
PPF_FILTER_STATS = ^PF_FILTER_STATS;
tipo
_PF_INTERFACE_STATS = annotazione imballata
pvDriverContext: Indicatore;
dwFlags: DWORD;
dwInDrops: DWORD;
dwOutDrops: DWORD;
eaInAction: PFFORWARD_ACTION;
eaOutAction: PFFORWARD_ACTION;
dwNumInFilters: DWORD;
dwNumOutFilters: DWORD;
dwFrag: DWORD;
dwSpoof: DWORD;
dwReserved1: DWORD;
dwReserved2: DWORD;
liSyn: LARGE_INTEGER;
liTotalLogged: LARGE_INTEGER;
dwLostLogEntries: DWORD;
FilterInfo: Allineamento [0..0] di PF_FILTER_STATS;
estremità;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS;
tipo
_PF_LATEBIND_INFO = annotazione imballata
SrcAddr: PByteArray;
DstAddr: PByteArray;
Mascherina: PByteArray;
estremità;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO;
tipo
_PFLOGFRAME = annotazione imballata
Timestamp: LARGE_INTEGER;
pfeTypeOfFrame: PFFRAMETYPE;
dwTotalSizeUsed: DWORD;
dwFilterRule: DWORD;
wSizeOfAdditionalData: Parola;
wSizeOfIpHeader: Parola;
dwInterfaceName: DWORD;
dwIPIndex: DWORD;
bPacketData: Allineamento [0..0] del byte;
estremità;
PFLOGFRAME = _PFLOGFRAME;
PPFLOGFRAME = ^PFLOGFRAME;
const
FILTER_PROTO_ANY = $00;
FILTER_PROTO_ICMP = $01;
FILTER_PROTO_TCP = $06;
FILTER_PROTO_UDP = $11;
FILTER_TCPUDP_PORT_ANY = $00;
const
FILTER_ICMP_TYPE_ANY = $FF;
FILTER_ICMP_CODE_ANY = $FF;
const
FD_FLAGS_NOSYN = $01;
FD_FLAGS_ALLFLAGS = FD_FLAGS_NOSYN;
const
LB_SRC_ADDR_USE_SRCADDR_FLAG = $00000001;
LB_SRC_ADDR_USE_DSTADDR_FLAG = $00000002;
LB_DST_ADDR_USE_SRCADDR_FLAG = $00000004;
LB_DST_ADDR_USE_DSTADDR_FLAG = $00000008;
LB_SRC_MASK_LATE_FLAG = $00000010;
LB_DST_MASK_LATE_FLAG = $00000020;
const
ERROR_BASE = 23000;
PFERROR_NO_PF_INTERFACE = (ERROR_BASE + 0); // non ha rinviato mai.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1);
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2);
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3);
////////////////////////////////////////////////////////////////////////////////
//
Funzioni del filtro da // esportarici da IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
funzione PfCreateInterface (
dwName: DWORD;
inerzia: PFFORWARD_ACTION;
outAction: PFFORWARD_ACTION;
bUseLog: BOOL;
bMustBeUnique: BOOL;
ppInterface di varietà: INTERFACE_HANDLE): DWORD;
stdcall; nome esterno “_PfCreateInterface@24„ di IPHLPAPI;
funzione PfDeleteInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; nome esterno “_PfDeleteInterface@4„ di IPHLPAPI;
funzione PfAddFiltersToInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE): DWORD;
stdcall; nome esterno “_PfAddFiltersToInterface@24„ di IPHLPAPI;
funzione PfRemoveFiltersFromInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR): DWORD;
stdcall; nome esterno “_PfRemoveFiltersFromInterface@20„ di IPHLPAPI;
funzione PfRemoveFilterHandles (
pInterface: INTERFACE_HANDLE;
cFilters: DWORD;
pvHandles: PFILTER_HANDLE): DWORD;
stdcall; nome esterno “_PfRemoveFilterHandles@12„ di IPHLPAPI;
funzione PfUnBindInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; nome esterno “_PfUnBindInterface@4„ di IPHLPAPI;
funzione PfBindInterfaceToIndex (
pInterface: INTERFACE_HANDLE;
dwIndex: DWORD;
pfatLinkType: PFADDRESSTYPE;
LinkIPAddress: PByteArray): DWORD;
stdcall; nome esterno “_PfBindInterfaceToIndex@16„ di IPHLPAPI;
funzione PfBindInterfaceToIPAddress (
pInterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE;
IP address: PByteArray): DWORD;
stdcall; nome esterno “_PfBindInterfaceToIPAddress@12„ di IPHLPAPI;
funzione PfRebindFilters (
pInterface: INTERFACE_HANDLE;
pLateBindInfo: PPF_LATEBIND_INFO): DWORD;
stdcall; nome esterno “_PfRebindFilters@8„ di IPHLPAPI;
funzione PfAddGlobalFilterToInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; nome esterno “_PfAddGlobalFilterToInterface@8„ di IPHLPAPI;
funzione PfRemoveGlobalFilterFromInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; nome esterno “_PfRemoveGlobalFilterFromInterface@8„ di IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
Api del ceppo di //. Si noti che ci è al massimo un ceppo e deve essere generato
// prima di tutta l'interfaccia che lo ha bisogno è generato. Non ci è senso regolare la a
ceppo di // su un'interfaccia attuale. Il ceppo può applicarsi a c'è ne o a tutti di
// le interfacce.
//
///////////////////////////////////////////////////////////////////////
funzione PfMakeLog (
hEvent: Manico a t): DWORD;
stdcall; nome esterno “_PfMakeLog@4„ di IPHLPAPI;
funzione PfSetLogBuffer (
pbBuffer: PByteArray;
dwSize: DWORD;
dwThreshold: DWORD;
dwEntries: DWORD;
pdwLoggedEntries: PDWORD;
pdwLostEntries: PDWORD;
pdwSizeUsed: PDWORD): DWORD;
stdcall; nome esterno “_PfSetLogBuffer@28„ di IPHLPAPI;
funzione PfDeleteLog (
): DWORD;
stdcall; nome esterno “_PfDeleteLog@0„ di IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
// ottiene le statistiche. Notare pdwBufferSize in un parametro di IN/OUT. Se
// ERROR_INSUFFICIENT_BUFFER è restituito, le statistiche comuni è
// disponibile ed il numero di byte corretto è dentro *pdwBufferSize. Se soltanto
le statistiche dell'interfaccia di // sono necessarie, forniscono un amplificatore del formato
// PF_INTERFACE_STATS soltanto. Se le descrizioni del filtro inoltre sono necessarie,
// allora fornisce un grande amplificatore, o usa il conteggio restituito dalla prima chiamata
// per assegnare un amplificatore del formato sufficiente. Si noti che per un'interfaccia comune,
// che questa seconda chiamata può venire a mancare con ERROR_INSUFFICIENT_BUFFER. Ciò può accadere
// se gli altri condivisori aggiungono i filtri nell'interim. Ciò non dovrebbe accadere per
// un'interfaccia UNICA.
//
////////////////////////////////////////////////////////////////////////////////
funzione PfGetInterfaceStatistics (
pInterface: INTERFACE_HANDLE;
ppfStats: PPF_INTERFACE_STATS;
pdwBufferSize: PDWORD;
fResetCounters: BOOL): DWORD;
stdcall; nome esterno “_PfGetInterfaceStatistics@16„ di IPHLPAPI;
////////////////////////////////////////////////////////////////////////////////
//
Prova di // un pacchetto. Questa chiamata confronterà il pacchetto con dato
le interfacce di // e restituiscono l'azione di filtrazione.
//
////////////////////////////////////////////////////////////////////////////////
funzione PfTestPacket (
pInInterface: INTERFACE_HANDLE;
pOutInterface: INTERFACE_HANDLE;
cBytes: DWORD;
pbPacket: PByteArray;
ppAction: PPFFORWARD_ACTION): DWORD;
stdcall; nome esterno “_PfTestPacket@20„ di IPHLPAPI;
esecuzione
estremità.
|