//This war die Delphi-Umwandlung von fltdefs.h, aber wo ist die Quelle?
Maßeinheit fltdefs;
////////////////////////////////////////////////////////////////////////////////
//
Umwandlung //-Delphi von fltdefs.h für Gebrauch mit dem IPHLPAPI.DLL
//
////////////////////////////////////////////////////////////////////////////////
Schnittstelle
Gebrauch
Windows;
const
IPHLPAPI = „IPHLPAPI.DLL“;
//-Bytereihe
Art
TByteArray = Reihe [0. Pred (MaxInt)] vom Byte;
PByteArray = ^TByteArray;
//-Datenarten
Art
FILTER_HANDLE = Zeiger;
PFILTER_HANDLE = ^FILTER_HANDLE;
INTERFACE_HANDLE = Zeiger;
PINTERFACE_HANDLE = ^INTERFACE_HANDLE;
Aufzählung //-GlobalFilter
const
GF_FRAGMENTS = 2;
GF_STRONGHOST = 8;
GF_FRAGCACHE = 9;
Art
GLOBAL_FILTER = ganze Zahl;
PGLOBAL_FILTER = ^GLOBAL_FILTER;
Aufzählung //-PFAddressType
const
PF_IPV4 = 0;
PF_IPV6 = 1;
Art
PFADDRESSTYPE = ganze Zahl;
PPFADDRESSTYPE = ^PFADDRESSTYPE;
Aufzählung //-PFForwardAction
const
PF_ACTION_FORWARD = 0;
PF_ACTION_DROP = 1;
Art
PFFORWARD_ACTION = ganze Zahl;
PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
Aufzählung //-PFFrameType
const
PFFT_FILTER = 1;
PFFT_FRAG = 2;
PFFT_SPOOF = 3;
Art
PFFRAMETYPE = ganze Zahl;
PPFFRAMETYPE = ^PFFRAMETYPE;
Art
_PF_FILTER_DESCRIPTOR = verpackte Aufzeichnung
dwFilterFlags: DWORD;
dwRule: DWORD;
pfatType: PFADDRESSTYPE;
SrcAddr: PByteArray;
SrcMask: PByteArray;
DstAddr: PByteArray;
DstMask: PByteArray;
dwProtocol: DWORD;
fLateBound: DWORD;
wSrcPort: Wort;
wDstPort: Wort;
wSrcPortHighRange: Wort;
wDstPortHighRange: Wort;
Ende;
PF_FILTER_DESCRIPTOR = _PF_FILTER_DESCRIPTOR;
PPF_FILTER_DESCRIPTOR = ^PF_FILTER_DESCRIPTOR;
Art
_PF_FILTER_STATS = verpackte Aufzeichnung
dwNumPacketsFiltered: DWORD;
Info: PF_FILTER_DESCRIPTOR;
Ende;
PF_FILTER_STATS = _PF_FILTER_STATS;
PPF_FILTER_STATS = ^PF_FILTER_STATS;
Art
_PF_INTERFACE_STATS = verpackte Aufzeichnung
pvDriverContext: Zeiger;
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: Reihe [0..0] PF_FILTER_STATS;
Ende;
PF_INTERFACE_STATS = _PF_INTERFACE_STATS;
PPF_INTERFACE_STATS = ^PF_INTERFACE_STATS;
Art
_PF_LATEBIND_INFO = verpackte Aufzeichnung
SrcAddr: PByteArray;
DstAddr: PByteArray;
Schablone: PByteArray;
Ende;
PF_LATEBIND_INFO = _PF_LATEBIND_INFO;
PPF_LATEBIND_INFO = ^PF_LATEBIND_INFO;
Art
_PFLOGFRAME = verpackte Aufzeichnung
Zeitstempel: LARGE_INTEGER;
pfeTypeOfFrame: PFFRAMETYPE;
dwTotalSizeUsed: DWORD;
dwFilterRule: DWORD;
wSizeOfAdditionalData: Wort;
wSizeOfIpHeader: Wort;
dwInterfaceName: DWORD;
dwIPIndex: DWORD;
bPacketData: Reihe [0..0] des Bytes;
Ende;
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); // ging nie zurück.
PFERROR_NO_FILTERS_GIVEN = (ERROR_BASE + 1);
PFERROR_BUFFER_TOO_SMALL = (ERROR_BASE + 2);
ERROR_IPV6_NOT_IMPLEMENTED = (ERROR_BASE + 3);
////////////////////////////////////////////////////////////////////////////////
//
//-Filterfunktionen exportiert durch IPHLPAPI
//
////////////////////////////////////////////////////////////////////////////////
Funktion PfCreateInterface (
dwName: DWORD;
Untätigkeit: PFFORWARD_ACTION;
outAction: PFFORWARD_ACTION;
bUseLog: BOOL;
bMustBeUnique: BOOL;
var ppInterface: INTERFACE_HANDLE): DWORD;
stdcall; externer IPHLPAPI Name „_PfCreateInterface@24“;
Funktion PfDeleteInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; externer IPHLPAPI Name „_PfDeleteInterface@4“;
Funktion PfAddFiltersToInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR;
pfHandle: PFILTER_HANDLE): DWORD;
stdcall; externer IPHLPAPI Name „_PfAddFiltersToInterface@24“;
Funktion PfRemoveFiltersFromInterface (
ih: INTERFACE_HANDLE;
cInFilters: DWORD;
pfiltIn: PPF_FILTER_DESCRIPTOR;
cOutFilters: DWORD;
pfiltOut: PPF_FILTER_DESCRIPTOR): DWORD;
stdcall; externer IPHLPAPI Name „_PfRemoveFiltersFromInterface@20“;
Funktion PfRemoveFilterHandles (
pInterface: INTERFACE_HANDLE;
cFilters: DWORD;
pvHandles: PFILTER_HANDLE): DWORD;
stdcall; externer IPHLPAPI Name „_PfRemoveFilterHandles@12“;
Funktion PfUnBindInterface (
pInterface: INTERFACE_HANDLE): DWORD;
stdcall; externer IPHLPAPI Name „_PfUnBindInterface@4“;
Funktion PfBindInterfaceToIndex (
pInterface: INTERFACE_HANDLE;
dwIndex: DWORD;
pfatLinkType: PFADDRESSTYPE;
LinkIPAddress: PByteArray): DWORD;
stdcall; externer IPHLPAPI Name „_PfBindInterfaceToIndex@16“;
Funktion PfBindInterfaceToIPAddress (
pInterface: INTERFACE_HANDLE;
pfatLinkType: PFADDRESSTYPE;
IP address: PByteArray): DWORD;
stdcall; externer IPHLPAPI Name „_PfBindInterfaceToIPAddress@12“;
Funktion PfRebindFilters (
pInterface: INTERFACE_HANDLE;
pLateBindInfo: PPF_LATEBIND_INFO): DWORD;
stdcall; externer IPHLPAPI Name „_PfRebindFilters@8“;
Funktion PfAddGlobalFilterToInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; externer IPHLPAPI Name „_PfAddGlobalFilterToInterface@8“;
Funktion PfRemoveGlobalFilterFromInterface (
pInterface: INTERFACE_HANDLE;
gfFilter: GLOBAL_FILTER): DWORD;
stdcall; externer IPHLPAPI Name „_PfRemoveGlobalFilterFromInterface@8“;
////////////////////////////////////////////////////////////////////////////////
//
//-Maschinenbordbuch-API. Merken, dass es höchstens ein Maschinenbordbuch gibt und es hergestellt werden muss
// vor jeder möglicher Schnittstelle, die es benötigt, wird verursacht. Es gibt keine Weise, a einzustellen
//-Maschinenbordbuch auf eine vorhandene Schnittstelle. Das Maschinenbordbuch kann an irgendwelchen oder an allen von angewendet werden
// die Schnittstellen.
//
///////////////////////////////////////////////////////////////////////
Funktion PfMakeLog (
hEvent: Quergriff): DWORD;
stdcall; externer IPHLPAPI Name „_PfMakeLog@4“;
Funktion PfSetLogBuffer (
pbBuffer: PByteArray;
dwSize: DWORD;
dwThreshold: DWORD;
dwEntries: DWORD;
pdwLoggedEntries: PDWORD;
pdwLostEntries: PDWORD;
pdwSizeUsed: PDWORD): DWORD;
stdcall; externer IPHLPAPI Name „_PfSetLogBuffer@28“;
Funktion PfDeleteLog (
): DWORD;
stdcall; externer IPHLPAPI Name „_PfDeleteLog@0“;
////////////////////////////////////////////////////////////////////////////////
//
// erhalten Statistiken. Merken pdwBufferSize in einem IN/OUT Parameter. Wenn
// ERROR_INSUFFICIENT_BUFFER wird, die allgemeinen Statistiken sind zurückgebracht
vorhandenes // und die korrekte Byteanzahl ist *pdwBufferSize innen. Wenn nur
//-Schnittstellenstatistiken sind, liefern einen Puffer der Größe erforderlich
// nur PF_INTERFACE_STATS. Wenn die Filterbeschreibungen auch benötigt werden,
// liefern dann einen großen Puffer oder verwenden den zurückgebrachten Zählimpuls vom ersten Ruf
//, zum eines Puffers der genügenden Größe zuzuteilen. Das für eine geteilte Schnittstelle merken,
//, das dieser zweite Anruf mit ERROR_INSUFFICIENT_BUFFER verlassen kann. Dieses kann geschehen
//, wenn die anderen Sharers Filter in der Zwischenzeit addieren. Dieses sollte nicht für geschehen
// eine EINZIGARTIGE Schnittstelle.
//
////////////////////////////////////////////////////////////////////////////////
Funktion PfGetInterfaceStatistics (
pInterface: INTERFACE_HANDLE;
ppfStats: PPF_INTERFACE_STATS;
pdwBufferSize: PDWORD;
fResetCounters: BOOL): DWORD;
stdcall; externer IPHLPAPI Name „_PfGetInterfaceStatistics@16“;
////////////////////////////////////////////////////////////////////////////////
//
//-Test ein Paket. Dieser Anruf wertet das Paket gegen gegeben aus
//-Schnittstellen und bringen die filterntätigkeit zurück.
//
////////////////////////////////////////////////////////////////////////////////
Funktion PfTestPacket (
pInInterface: INTERFACE_HANDLE;
pOutInterface: INTERFACE_HANDLE;
cBytes: DWORD;
pbPacket: PByteArray;
ppAction: PPFFORWARD_ACTION): DWORD;
stdcall; externer IPHLPAPI Name „_PfTestPacket@20“;
Implementierung
Ende.
|