Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅ΠΆΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ WFP
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ) IP-Π°Π΄ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Block/Unblock by IP-adress ΠΈΠ»ΠΈ Block/Unblock by port (Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 7 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΠΏΠ°Π½Π΅Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ IP-Π°Π΄ΡΠ΅ΡΠ°). ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ°Π½Π΅Π»Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ°, Π²ΡΠ±ΠΎΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Add ΠΈΠ»ΠΈ Delete ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Back… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅ΠΆΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ WFP (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
- ΠΠ½ΡΡΡΡΠΊΡΠΈΡ
- ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
- Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΉ Server 2008 ΠΈ Vista Π² Windows Π±ΡΠ» Π²ΡΡΡΠΎΠ΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ WFP (Windows Filtering Platform — ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Windows), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ API ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΠ°Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠΈ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΆΠΈΠ·Π½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°ΡΠΈΡ. ΠΠ½Π΅ΡΠ΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΡΠ΅Π²ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΡΡΠΎΠ½ΡΠ»ΠΈ ΠΊΠ°ΠΊ kernel-mode, ΡΠ°ΠΊ ΠΈ user-mode ΡΠ°ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡΡΡ fwpkclnt. sys, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ — fwpuclnt. dll (Π±ΡΠΊΠ²Ρ «k» ΠΈ «u» Π² Π½Π°Π·Π²Π°Π½ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΎΠ·Π½Π°ΡΠ°ΡΡ kernel ΠΈ user ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ).
Π Ρ ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡΡΠ΅ΡΠ° Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ°ΡΠΈΠΊΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΠΏΠΎΡΡΡ.
Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ WFP, Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² WDK (Windows Driver Kit).
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΈΠΏΠ° Handle — Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ FwpmEngineOpen0, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ.
ΠΡΠΎΡΠΎΡΠΈΠΏ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
DWORD WINAPI FwpmEngineOpen0(
__in_optconstwchar_t *serverName,
__in UINT32authnService,
__in_optSEC_WINNT_AUTH_IDENTITY_W *authIdentity,
__in_optconst FWPM_SESSION0 *session,
__out HANDLE *engineHandle
);
Π³Π΄Π΅:
serverName ΠΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ NULL
authnService ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: RPC_C_AUTHN_WINNTΠΈ RPC_C_AUTHN_DEFAULT.
authIdentity ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΠ»ΡΡΡΡ. ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ NULL
session Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠΈΠΈ. ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ NULL
engineHandle Π£ΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ERROR_SUCCESS.
Π‘Π΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° ΡΡΠΈ Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Π΅ΠΉ:
1) ΠΠΎΠ΄ΡΡΠΎΠ²Π½ΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° — ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠ΅ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΡΠ΅ΡΠ΅ΠΉ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ X.25
2) ΠΠΎΠ΄ΡΡΠΎΠ²Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ — Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ ΡΡΠ°Π½Π·ΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ΅ΡΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅
3) ΠΠΎΠ΄ΡΡΠΎΠ²Π½ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ — Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠΈ Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ, Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, ΠΏΡΠΎΠΏΠΈΡΠ΅ΠΌ Π½Π°Ρ ΡΠΈΠ»ΡΡΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° FWPM_SUBLAYER0
typedefstruct FWPM_SUBLAYER0_ {
GUID subLayerKey;
FWPM_DISPLAY_DATA0displayData;
UINT16 flags;
GUID *providerKey;
FWP_BYTE_BLOB providerData;
UINT16 weight;
} FWPM_SUBLAYER0;
Π³Π΄Π΅:
subLayerKey Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ (GUID).
displayData ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ Π² ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΡΠΌΠ΅.
Flags Π€Π»Π°Π³. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ FWPM_SUBLAYER_FLAG_PERSISTENT
providerKey Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°, ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Π΅ΠΌ.
providerData Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°.
Weight ΠΠ΅Ρ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ. ΠΠΎΠ΄ΡΡΠΎΠ²Π½ΠΈ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ Π²Π΅ΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° FwpmSubLayerAdd0
DWORD WINAPI FwpmSubLayerAdd0(
__in HANDLE engineHandle,
__in const FWPM_SUBLAYER0 *subLayer,
__in_opt PSECURITY_DESCRIPTOR sd
);
Π³Π΄Π΅:
engineHandle ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ.
subLayer Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ
sd ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ERROR_SUCCESS.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΆΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΈΠ»ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΠΈ ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° FWPM_FILTER0:
typedefstruct FWPM_FILTER0_ {
GUIDfilterKey;
FWPM_DISPLAY_DATA0displayData;
UINT32 flags;
GUID *providerKey;
FWP_BYTE_BLOB providerData;
GUIDlayerKey;
GUIDsubLayerKey;
FWP_VALUE0 weight;
UINT32numFilterConditions;
FWPM_FILTER_CONDITION0 *filterCondition;
FWPM_ACTION0 action;
union{
UINT64 rawContext;
GUID providerContextKey;
};
GUID *reserved;
UINT64filterId;
FWP_VALUE0effectiveWeight;
} FWPM_FILTER0;
Π³Π΄Π΅:
filterKey Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ° (GUID).
displayData ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° Π² ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΡΠΌΠ΅.
FlagsΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ Π±Π΅ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ — FWPM_FILTER_FLAG_NONE
providerKey Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°, ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Π΅ΠΌ.
providerData Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°.
layerKeyΠ£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠΎΠ²Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠ»ΡΡΡ.
FilteringLayerIdentifiers — ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
subLayerKey Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠ»ΡΡΡ.
Filtering Sub-Layer Identifiers — ΡΠΏΠΈΡΠΎΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Π΅ΠΉ. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΡΠ½ΡΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ.
weightΠ²Π΅ΡΡΠΈΠ»ΡΡΡΠ°. ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡFWP_EMPTY — Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠ°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΡΠΈΠ»ΡΡΡΠ°.
FilterWeightIdentifiers — ΡΠΏΠΈΡΠΎΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
numFilterConditions ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΡΠΈΠ»ΡΡΡΠ°.
filterCondition ΠΌΠ°ΡΡΠΈΠ² ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΡΠΈΠ»ΡΡΡΠ°. Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΠΏΠΎ IP Π°Π΄ΡΠ΅ΡΡ, ΠΏΠΎ ΠΏΠΎΡΡΡ, ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅), Π° ΡΠ°ΠΊ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ.
actionΡΡΡΡΠΊΡΡΡΠ°, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ΅Π΅ ΠΏΡΠΈ Π²ΡΠ΄Π°ΡΠΈ Π²ΡΠ΅ΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ true.
Π Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ FWP_ACTION_BLOCK
rawContext ΠΠΎΡΡΡΠΏΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠ»ΡΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°.
Filter Context Identifiers — ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
providerContextKey ΠΠΎΡΡΡΠΏΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠ»ΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°.
Built-in Provider Context Identifiers — ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Reserved ΠΠ°ΠΏΠ°ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
filterId ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ°
effectiveWeight ΡΡΡΡΠΊΡΡΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²Π΅Ρ ΡΠΈΠ»ΡΡΡΠ°.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠ»ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° FwpmFilterAdd0
DWORD WINAPI FwpmFilterAdd0(
__in HANDLE engineHandle,
__in const FWPM_FILTER0 *filter,
__in_opt SECURITY_DESCRIPTOR sd,
__out_opt UINT64 *id
);
Π³Π΄Π΅:
engineHandle ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ.
filter Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠΈΠ»ΡΡΡ
SdΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ
id ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ° Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ERROR_SUCCESS.
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡΡΡΡ ΡΠ΅Π°Π½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ FwpmEngineClose0
DWORD WINAPI FwpmEngineClose0(
__in HANDLEengineHandle
);
Π³Π΄Π΅:
engineHandle ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠΈΠΈ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ERROR_SUCCESS.
ΠΠ»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ FwpmFilterDeleteById0
DWORD WINAPI FwpmFilterDeleteById0(
__in HANDLE engineHandle,
__inUINT64id
);
Π³Π΄Π΅:
engineHandle ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠΈΠΈ,
id ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ERROR_SUCCESS.
ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ FwpmSubLayerDeleteByKey0
DWORD WINAPI FwpmSubLayerDeleteByKey0(
__in HANDLE engineHandle,
__in constGUID *key
);
Π³Π΄Π΅:
engineHandle ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠΈΠΈ,
key Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ (GUID), ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π°Π»ΠΈΡΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PracticGUI. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π΅ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°. Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΉΠ»Ρ ConsoleFilter. exe ΠΈ PracticGUI. exe Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ «C:Program FilesFilter», ΠΈΠ½Π°ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π·Π°ΠΊΠΎΠ½ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ½Π΅Ρ ΡΠ°Π±ΠΎΡΡ. Π Π°Π±ΠΎΡΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ°Ρ 1 ΠΈ 2.
Π ΠΈΡΡΠ½ΠΎΠΊ 1. ΠΠ°ΡΠ°Π»ΡΠ½ΡΠΉ Π²ΠΈΠ΄ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
Π ΠΈΡΡΠ½ΠΎΠΊ 2. ΠΠΈΠ΄ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΎΡΠΌΠΎΡΡ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ².
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠΏΠΈΡΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Show Information. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 3.
Π ΠΈΡΡΠ½ΠΎΠΊ 3. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΠΎΠΈΡ ΡΠΈΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ ΡΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 4:
Π ΠΈΡΡΠ½ΠΎΠΊ 4. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠ»ΡΡΡΠ°Ρ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ BlockList
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ².
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠΈΠ»ΡΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ: Block/Unblock all traffic, Block/Unblock by IP-adress, Block/Unblock by port ΠΈΠ»ΠΈ Block/Unblock application.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΈΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ) Π²Π΅ΡΡ Π²Π°Ρ ΡΡΠ°ΡΠΈΠΊ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Block/Unblock all traffic. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ°Ρ 5 ΠΈ 6 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ:
Π ΠΈΡΡΠ½ΠΎΠΊ 5. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 6. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΡΡΠΎΠ².
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ) IP-Π°Π΄ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Block/Unblock by IP-adress ΠΈΠ»ΠΈ Block/Unblock by port (Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 7 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΠΏΠ°Π½Π΅Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ IP-Π°Π΄ΡΠ΅ΡΠ°). ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ°Π½Π΅Π»Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ°, Π²ΡΠ±ΠΎΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Add ΠΈΠ»ΠΈ Delete ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Back ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ° Apply. ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ IP-Π°Π΄ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΡ (ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: 192.168.0.1) Π²ΡΠ±ΡΠ°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Apply.
Π ΠΈΡΡΠ½ΠΎΠΊ 7. ΠΠΊΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ IP-Π°Π΄ΡΠ΅ΡΠ°.
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ°Ρ 8 ΠΈ 9 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠ»ΡΡΡΠ° ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠ»ΡΡΡΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 8. ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠ»ΡΡΡΠ°.
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ°Ρ 10 ΠΈ 11 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎ Π²Π²ΠΎΠ΄Π΅ Π½Π΅Π²Π΅ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π ΠΈΡΡΠ½ΠΎΠΊ 10. ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Π½Π΅Π²Π΅ΡΠ½ΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 11. ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Π½Π΅Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°.
ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠΈΠ»ΡΡΡΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Block/Unblock application. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ°Π½Π΅Π»Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 12:
Π ΠΈΡΡΠ½ΠΎΠΊ 12. ΠΠ°Π½Π΅Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΠ° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Add ΠΈ Delete Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Choose necessary program Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Back Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ, Apply Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ 13 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Apply Π΄ΠΎ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
Π ΠΈΡΡΠ½ΠΎΠΊ 13. ΠΡΠΈΠ±ΠΊΠ°, Π΅ΡΠ»ΠΈ Π½Π΅ Π²ΡΠ±ΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ConsoleFilter Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Reboot Filter. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 14:
Π ΠΈΡΡΠ½ΠΎΠΊ 14. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΈΠ»ΡΡΡΠ°.
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Π±ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΊΡ Reboot Filter, Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 15, Ρ ΠΎΡΠΈΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΈΠ»ΡΡΡΡ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°.
Π ΠΈΡΡΠ½ΠΎΠΊ 15. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΈΠ»ΡΡΡΠ°.
ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°», ΡΠΎ ΡΠΈΠ»ΡΡΡΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ «ΠΠ΅Ρ», ΡΠΎ ΡΠΈΠ»ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΡΡΡΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π€ΠΈΠ»ΡΡΡΡ ΠΎΠ±Π½ΡΠ»ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ ΠΠ»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΡΠ΅Π΄Π° VisualStudio 2012 ReleaseCandidate Ρ ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ WindowsDriverKit 8.0.
Π Π°Π±ΠΎΡΠ° Ρ WFP ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ C++ (ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ). ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ΅Π΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ C#(ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ).
ΠΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ BlockList.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ°ΡΠΈΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΈΠ»ΡΡΡ Π Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ ΠΎΡ Microsoft Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ — Windows Filtering Platform. ΠΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΠΏΠΎΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C++, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½Ρ ΠΈ ΡΠ³Π»ΡΠ±Π»Π΅Π½Ρ Π·Π½Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° C#. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΡΠ΅Π΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ — Visual Studio 2012 RC Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Windows Driver Kit 8.0.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
1. Windows Filtering Platform.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° WFP.
(http://msdn.microsoft.com/en-us/library/windows/hardware/gg463267.aspx)
2. WFPFunctions. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² WFP.
(http://msdn.microsoft.com/en-us/library/windows/desktop/aa364931(v=vs.85).aspx)
3. WFPErrorCodes. Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ WFP Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.
(http://msdn.microsoft.com/en-us/library/windows/desktop/bb540652(v=vs.85).aspx)
4. Windows Filtering Platform Π² Π·Π°ΡΠΈΡΠ΅ ΠΈ Π½Π°ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ. Π‘ΡΠ°ΡΡΡ Ρ ΠΆΡΡΠ½Π°Π»Π° Π₯Π°ΠΊΠ΅Ρ.
(http://www.xakep.ru/post/54 421/)
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
#include «stdafx.h»
#include
#include
#include
#include
#include «winreg.h»
#define bufSize 100
#pragma comment (lib, «fwpuclnt.lib»)
#pragma region ΠΡΠΎΡΠΎΡΠΈΠΏΡ
void AddAllFilters (GUID subLayerGUID, HANDLE engineHandle);
UINT64 AddFilter (GUID subLayerGUID, HANDLE engineHandle, UINT32 cond, char * str);
void AddFilter (GUID subLayerGUID, HANDLE engineHandle, GUID guid);
void DelFilter (HANDLE engineHandle);
void DelFilter (HANDLE engineHandle, GUID ID);
void DelSubLayer (HANDLE engineHandle, GUID _idSubLayer);
void CloseSeans (HANDLE engineHandle);
void AutoStart ();
#pragma endregion
void _tmain (int argc, char* argv[])
{
DWORD result;//Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° Error_Success
HANDLE engineHandle = NULL;//ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°
#pragma region ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°
result = FwpmEngineOpen0(
NULL,
RPC_C_AUTHN_WINNT,
NULL,
NULL,
&engineHandle);
if (result ≠ ERROR_SUCCESS)
{
printf («Engine Open failed with error: %dn», result);
system («pause»);
return;
}
printf («Engine Opened successfully! n»);
#pragma endregion
#pragma region ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ
//GUID {6AE8A860-A30E-4253−80A1-C1807E17AAFC}
GUID subLayerGUID = { 0x6ae8a860, 0xa30e, 0×4253, { 0×80, 0xa1, 0xc1, 0×80, 0x7e, 0×17, 0xaa, 0xfc } };
FWPM_SUBLAYER0 *mySubLayer={0}; //ΠΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°ΡΠΈ ΡΠΈΠ»ΡΡΡΡ
//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ Ρ Π΄Π°Π½Π½ΡΠΌ GUID
result = FwpmSubLayerGetByKey0(engineHandle,&subLayerGUID,&mySubLayer);
if (result≠ERROR_SUCCESS)
{
mySubLayer=new FWPM_SUBLAYER0();
mySubLayer->subLayerKey = subLayerGUID;
mySubLayer->flags = FWPM_SUBLAYER_FLAG_PERSISTENT;
mySubLayer->weight=0×01;
mySubLayer->displayData.description=L" Sublayer" ;
mySubLayer->displayData.name=L" Sublayer" ;
result = FwpmSubLayerAdd0(engineHandle, mySubLayer, NULL);
if (result ≠ ERROR_SUCCESS)
{
printf («SubLayer Added failed with error: %dn», result);
CloseSeans (engineHandle);
return;
}
printf («SubLayer Added successfully! n»);
}
else
printf («SubLayer is already exist. n»);
#pragma endregion
#pragma region ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ²
if (!(argc>1))//ΠΠΎΠ½ΡΠΎΠ»Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ°
{
//ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ
AddAllFilters (subLayerGUID, engineHandle);
printf («Filters added successfully! n»);
}
else//ΠΠΎΠ½ΡΠΎΠ»Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· GUI-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
{
AutoStart ();
//GUID {1C046A9A-9187−4629−8184−24836DFE5EEB}
GUID allFilterGUID = { 0x1c046a9a, 0×9187, 0×4629, { 0×81, 0×84, 0×24, 0×83, 0x6d, 0xfe, 0x5e, 0xeb } };
//ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ
AddFilter (subLayerGUID, engineHandle, allFilterGUID);
//Π£Π΄Π°Π»ΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ
DelFilter (engineHandle);
//ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ
AddAllFilters (subLayerGUID, engineHandle);
printf («Filters added successfully! n»);
//Π£Π΄Π°Π»ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ
DelFilter (engineHandle, allFilterGUID);
}
#pragma endregion
CloseSeans (engineHandle);
return;
}
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠ»ΡΡΡΠΎΠ²
void AddAllFilters (GUID subLayerGUID, HANDLE engineHandle)
{
DWORD result = NULL;
#pragma region ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΡΠ»ΠΎΠ²ΠΈΠΉ
char *buf = new char[bufSize]; //ΠΡΡΠ΅Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
int ipCount=0,//ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΏΠΎ IP
portCount=0,//ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΏΠΎ ΠΏΠΎΡΡΡ
appCount=0;//ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΏΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΠ· ΠΠ
FILE *f = fopen («C:\Program Files\Filter\BlockList.iff» ," r");
if (!f)
{
printf («File „BlockList.iff“ dosen’t exist! n»);
return;
}
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ — Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΈΠ»ΠΈ Π½Π΅Ρ
fgets (buf, bufSize, f);
buf[strlen (buf)-1]='';
FILE *filterFile = fopen («C:\Program Files\Filter\FilterList.iff» ," w");
if (!filterFile)
{
printf («File „FilterList.iff“ dosen’t create! n»);
return;
}
UINT64 filterID=NULL;
printf («Blocked all traffik: %s.n», buf);
if (!strcmp (buf," true")) //ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ
{
filterID = AddFilter (subLayerGUID, engineHandle, 0," All");
if (filterID≠-1)
fprintf (filterFile," %dn", filterID);
fclose (filterFile);
fclose (f);
return;
}
//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
fgets (buf, bufSize, f);
int n=1;//Π‘ΡΠ΅ΡΡΠΈΠΊ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊ
//Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΡΠ»ΠΎΠ²ΠΈΠΉ
while (!feof (f))
{
fgets (buf, bufSize, f);
//ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ°, ΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π°
if (feof (f))
break;
buf[strlen (buf)-1]='';
if (buf[0]=='')
{
n++;
continue;
}
switch (n)
{
case 1: ipCount++; break;
case 2: portCount++; break;
case 3: appCount++; break;
default: break;
}
}
printf («nIP %dnPort %dnApplications %dnn», ipCount, portCount, appCount);
if (ipCount+portCount+appCount==0)
{
printf («There is no conditions. n»);
return;
}
#pragma endregion
#pragma region Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ²
fseek (f, 0, SEEK_SET);
fgets (buf, bufSize, f);//ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π°, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ
fgets (buf, bufSize, f);//ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
int i;//ΡΡΠ΅ΡΡΠΈΠΊ ΡΠΈΠΊΠ»ΠΎΠ²
UINT32 buffer=0;//Π±ΡΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ
//ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ IP
for (i=0; i < ipCount; i++)
{
fscanf (f," %d" ,&buffer);//cΡΠΈΡΡΠ²Π°Π΅ΠΌ i-ΡΠΉ Π°Π΄ΡΠ΅Ρ
filterID = AddFilter (subLayerGUID, engineHandle, buffer," IP");
if (filterID≠-1)
fprintf (filterFile," %dn", filterID);
}
fgets (buf, bufSize, f);//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
//ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΏΠΎΡΡΡ
for (i=0; i < portCount; i++)
{
fscanf (f," %d" ,&buffer);//cΡΠΈΡΡΠ²Π°Π΅ΠΌ i-ΡΠΉ ΠΏΠΎΡΡ ΠΠ
filterID = AddFilter (subLayerGUID, engineHandle, buffer," Port");
if (filterID≠-1)
fprintf (filterFile," %dn", filterID);
}
fgets (buf, bufSize, f);//Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
//ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ
for (i=0; i < appCount; i++)
{
fgets (buf, bufSize, f);//cΡΠΈΡΡΠ²Π°Π΅ΠΌ i-ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΠ
buf[strlen (buf)-1]='';
filterID = AddFilter (subLayerGUID, engineHandle, 0, buf);
if (filterID≠-1)
fprintf (filterFile," %dn", filterID);
}
fclose (filterFile);
fclose (f);
#pragma endregion
}
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ
UINT64 AddFilter (GUID subLayerGUID, HANDLE engineHandle, UINT32 cond, char * str)
{
DWORD result = NULL;
#pragma region Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ°
FWPM_FILTER0_ myFilter={0};
UINT64 id=NULL;
RtlZeroMemory (&myFilter, sizeof (myFilter));
FWPM_FILTER_CONDITION0 condition;
myFilter.action.type= FWP_ACTION_BLOCK;
myFilter.subLayerKey = subLayerGUID;
myFilter.weight.type = FWP_EMPTY;
myFilter.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;
myFilter.displayData.description=L" Filter" ;
myFilter.displayData.name=L" Filter" ;
if (str=="All")
{
myFilter.numFilterConditions = 0;
printf («Added all blocked filter. n»);
}
else
{
myFilter.numFilterConditions = 1;
myFilter.filterCondition = &condition;
if (str=="IP")
{
FWP_V4_ADDR_AND_MASK addr;//Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΈΠ»ΡΡΡ
addr.addr=cond;
addr.mask=0xffffffff;
printf («Added IP: %dn», addr. addr);
condition.fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
condition.matchType=FWP_MATCH_EQUAL;
condition.conditionValue.type=FWP_V4_ADDR_MASK;
condition.conditionValue.v4AddrMask = &addr;
}
else
{
if (str=="Port")
{
UINT16 port = cond;//ΠΏΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΈΠ»ΡΡΡ
printf («Added port: %dn», port);
condition.fieldKey = FWPM_CONDITION_IP_REMOTE_PORT;
condition.matchType=FWP_MATCH_EQUAL;
condition.conditionValue.type=FWP_UINT16;
condition.conditionValue.uint16=port;
}
else
{
wchar_t *app = new wchar_t[bufSize];
swprintf (app, L" %S", str);//ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΈΠ»ΡΡΡ
FWP_BYTE_BLOB *applicationID = NULL;
result = FwpmGetAppIdFromFileName0(app,&applicationID);
if (result ≠ ERROR_SUCCESS)
{
printf («Add application „%s“ failed with error: %d.nn», str, result);
return -1;
}
printf («Added application: %sn», str);
condition.fieldKey = FWPM_CONDITION_ALE_APP_ID;
condition.matchType=FWP_MATCH_EQUAL;
condition.conditionValue.type=FWP_BYTE_BLOB_TYPE;
condition.conditionValue.byteBlob=applicationID;
}
}
}
#pragma endregion
#pragma region ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ°
result = FwpmFilterAdd0(engineHandle,&myFilter, NULL,&id);
if (result ≠ ERROR_SUCCESS)
{
printf («Filter Added failed with error: %dnn», result);
return -1;
}
#pragma endregion
return id;
}
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ»ΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄ΡΡΠΎΠ²Π΅Π½Ρ
void AddFilter (GUID subLayerGUID, HANDLE engineHandle, GUID guid)
{
DWORD result = NULL;
#pragma region Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ°
FWPM_FILTER0_ myFilter={0};
RtlZeroMemory (&myFilter, sizeof (myFilter));
myFilter.action.type= FWP_ACTION_BLOCK;
myFilter.subLayerKey = subLayerGUID;
myFilter.weight.type = FWP_EMPTY;
myFilter.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;
myFilter.displayData.description = L" Secondary filter" ;
myFilter.displayData.name = L" Secondary filter" ;
myFilter.filterKey = guid;
myFilter.numFilterConditions = 0;
#pragma endregion
#pragma region ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ°
result = FwpmFilterAdd0(engineHandle,&myFilter, NULL, NULL);
if (result ≠ ERROR_SUCCESS)
printf («Secondary filter added failed with error: %dnn», result);
else
printf («Secondary filter added successfully! n»);
#pragma endregion
}
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΏΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΌ ID
void DelFilter (HANDLE engineHandle)
{
#pragma region Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΏΠΎ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΌ ID
FILE *filterFile = fopen («C:\Program Files\Filter\FilterList.iff» ," r");
if (!filterFile)
{
printf («File „FilterList.iff“ dosen’t exist! n»);
return;
}
UINT64 id = NULL;
DWORD result = NULL;
while (!feof (filterFile))
{
fscanf (filterFile," %d" ,&id);//cΡΠΈΡΡΠ²Π°Π΅ΠΌ i-ΡΠΉ Π°Π΄ΡΠ΅Ρ
//ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ°, ΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π°
if (feof (filterFile))
break;
if (id==0)
continue;
result = FwpmFilterDeleteById0(engineHandle, id);
if (result≠ERROR_SUCCESS)
printf («Filter (ID=%d) close failed with error: %sn», id, result);
}
fclose (filterFile);
printf («Filters closed successfully! n»);
#pragma endregion
}
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° ΠΏΠΎ GUID
void DelFilter (HANDLE engineHandle, GUID ID)
{
#pragma region Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° ΠΏΠΎ GUID
DWORD result = FwpmFilterDeleteByKey0(engineHandle,&ID);
if (result ≠ ERROR_SUCCESS)
{
if (result == FWP_E_FILTER_NOT_FOUND)
printf («Secondary filter doesn’t exist. n»);
else
printf («Secondary filter closed failed with error: %dn», result);
return;
}
printf («Secondary filter closed successfully! n»);
#pragma endregion
}
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ
void DelSubLayer (HANDLE engineHandle, GUID _idSubLayer)
{
#pragma region Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠΎΠ²Π½Ρ
DWORD result = FwpmSubLayerDeleteByKey0(engineHandle,&_idSubLayer);
if (result ≠ ERROR_SUCCESS)
printf («SubLayer closed failed with error: %dn», result);
else
printf («SubLayer closed successfully! n»);
#pragma endregion
}
//ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°
void CloseSeans (HANDLE engineHandle)
{
#pragma region ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°
DWORD result = FwpmEngineClose0(engineHandle);
if (result ≠ ERROR_SUCCESS)
printf («Engine close failed with error: %dn», result);
else
printf («Engine closed successfully! n»);
system («pause»);
#pragma endregion
}
//ΠΠ°ΠΏΠΈΡΡ Π² Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ
void AutoStart ()
{
#pragma region ΠΠ°ΠΏΠΈΡΡ Π² Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ
DWORD result=NULL;
HKEY hKey = NULL;
result = RegCreateKeyEx (HKEY_LOCAL_MACHINE,
L" Software\Microsoft\Windows\CurrentVersion\Run" ,
NULL,
NULL,
REG_OPTION_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKey,
NULL);
if (result≠ERROR_SUCCESS)
printf («Open failed with error: %dn», result);
else
{
byte * buf = new byte[100];
buf = (LPBYTE)L" «C:\Program Files\Filter\ConsoleFilter.exe» «;
result = RegSetValueEx (hKey,
L" ConsoleFilter. exe" ,
NULL,
REG_SZ,
buf,
100);
if (result≠ERROR_SUCCESS)
printf («Add failed with error: %dn», result);
result = RegCloseKey (hKey);
if (result≠ERROR_SUCCESS)
printf («Close failed with error: %dn», result);
}
#pragma endregion
}
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ
using System;
using ADOX;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;using System. Text;
using System.Windows.Forms;
using System. IO;
namespace PracticGUI
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent ();
}
private void Form1_Load (object sender, EventArgs e)
{
label6.Enabled = false;
string path = FileAdress;
if (!File.Exists (path))// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»ΡΡΡΠΎΠ²
{
// ΠΡΠ»ΠΈ ΡΠ°ΠΉΠ»Π° Π½Π΅Ρ, ΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ» Ρ ΠΏΡΡΡΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»ΡΡΡΠΎΠ²
try
{
using (StreamWriter sw = File. CreateText (path))
{
sw.WriteLine («false»);
sw.WriteLine (««);
sw.WriteLine (««);
sw.WriteLine (««);
}
System.Diagnostics.Process proc = new System.Diagnostics.Process ();
proc.StartInfo.FileName = FilterAdress;
proc.StartInfo.Arguments = «Yes» ;
proc.Start ();//ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
proc.Close ();
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString (), «Error»);
Application.Exit ();
return;
}
}
else
{
try
{
System.Diagnostics.Process proc = new System.Diagnostics.Process ();
proc.StartInfo.FileName = FilterAdress;
proc.StartInfo.Arguments = «Yes» ;
proc.Start ();// ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
proc.Close ();
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString (), «Error»);
Application.Exit ();
return;
}
}
}
int reboot = 0;//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π±ΡΠ»ΠΈ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΈΠ»ΡΡΡΠΎΠ²
string FileAdress = «BlockList.iff», //Π€Π°ΠΉΠ» Π² ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠ»ΡΡΡΠΎΠ²
FilterAdress = «ConsoleFilter.exe» ;//ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ
//ΠΠ΅Π½ΡΠ΅Ρ ΠΏΠ°Π½Π΅Π»Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ
private void changeState (bool flag)
{
if (flag)
{
panel1.Visible = false;
panel2.Visible = true;
textBox1.Text = «» ;
}
else
{
panel1.Visible = true;
panel2.Visible = false;
}
}
private void label1_Click (object sender, EventArgs e)
{
string[] lines = File. ReadAllLines (FileAdress);
if (lines[0] == «true»)//ΠΡΠΎΠ²Π΅ΡΠΊΠ°: Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΠ»ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ
{
AddNewCondition («All», «false»);
MessageBox.Show («It was successfully unblocked», «Operation coplete», MessageBoxButtons. OK, MessageBoxIcon. Information);
}
else
{
AddNewCondition («All», «true»);
MessageBox.Show («It was successfully blocked», «Operation coplete», MessageBoxButtons. OK, MessageBoxIcon. Information);
}
}
private void label2_Click (object sender, EventArgs e)
{
changeState (true);
label6.Text = «Input IP-address» ;
}
private void label3_Click (object sender, EventArgs e)
{
changeState (true);
label6.Text = «Input port» ;
}
private void label4_Click (object sender, EventArgs e)
{
changeState (true);
label6.Text = «Choose necessary program» ;
label6.BorderStyle = BorderStyle. FixedSingle;
label6.Enabled = true;
}
private void label5_Click (object sender, EventArgs e)
{
string addr = textBox1. Text;
#region Add/Delete IP
if (label6.Text == «Input IP-address»)//ΠΡΠΎΠ²Π΅ΡΠΊΠ°, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· ΠΏΠ°Π½Π΅Π»Π΅ΠΉ Π·Π°ΠΏΡΡΠ΅Π½Π°
{
if (addr.Length < 7)//ΠΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ
{
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
addr.Trim ();
int n = 0,//ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² Π±Π»ΠΎΠΊΠ°Ρ Π°Π΄ΡΠ΅ΡΠ° (ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ)
nDot = 0;//ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠ΅ΠΊ Π² Π°Π΄ΡΠ΅ΡΠ΅
int[] array = new int[4]; //ΠΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π±Π»ΠΎΠΊΠΈ Π°Π΄ΡΠ΅ΡΠ°. ΠΠ»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π»ΠΈΡΠ½ΠΈΡ Π½ΡΠ»Π΅ΠΉ
for (int i = 0; i < addr. Length; i++)
{
char ch = addr[i];
if (ch >= 0×30 && ch <= 0×39)
{
n++;
if (n > 3)
{
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
continue;
}
if (ch == '.' || ch == ',')
{
//ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π±ΡΠ» Π½Π΅ ΡΠΎΡΠΊΠ°, Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ
if (n == 0 || addr. LastIndexOf (ch) == addr. Length — 1)
{
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
if (n == 3)
{
int a = Convert. ToInt32(addr.Substring (i — n, n));
if (a > 255)//ΠΠ»ΠΎΠΊ Π±ΠΎΠ»ΡΡΠ΅ 255
{
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
}
array[nDot] = Convert. ToInt32(addr.Substring (i — n, n));
n = 0;
nDot++;
continue;
}
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
if (nDot ≠ 3)
{
MessageBox.Show («Invalid IP-adress», «Error»);
return;
}
array[3] = Convert. ToInt32(addr.Substring (addr.Length — n, n));
//ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
addr = «» ;
for (int i = 0; i < 4; i++)
{
if (Convert.ToString (array[i], 16).Length < 2) addr += «0» + Convert. ToString (array[i], 16);
else addr += Convert. ToString (array[i], 16);
}
addr = Convert. ToUInt32(addr, 16).ToString ();
if (radioButton1.Checked == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
{
if (CheckCondition (addr) == false)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅
{
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠ°ΠΉΠ»
AddNewCondition («IP», addr);
}
else
{
MessageBox.Show («This IP already exists in the database», «Error»);
return;
}
}
else
{
if (CheckCondition (addr) == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅
{
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ· ΡΠ°ΠΉΠ»Π°
DeleteCondition («IP», addr);
}
else
{
MessageBox.Show («This IP not exists in the database», «Error»);
return;
}
}
}
#endregion
#region Add/Delete Port
int _a;
if (label6.Text == «Input port»)
{
if (addr.Length < 1)//ΠΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ
{
MessageBox.Show («Invalid port», «Error»);
return;
}
foreach (char ch in addr)
{
if (ch >= 0×30 && ch <= 0×39)
continue;
MessageBox.Show («Invalid port», «Error»);
return;
}
_a = Convert. ToInt32(addr);
if (_a < 1)
{
MessageBox.Show («Invalid port», «Error»);
return;
}
if (radioButton1.Checked == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
{
if (CheckCondition (addr) == false)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΡΡΠ° Π² ΡΠ°ΠΉΠ»Π΅
{
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ° Π² ΡΠ°ΠΉΠ»
AddNewCondition («Port», addr);
}
else
{
MessageBox.Show («This port already exists in the database», «Error»);
return;
}
}
else
{
if (CheckCondition (addr) == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΡΡΠ° Π² ΡΠ°ΠΉΠ»Π΅
{
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ° ΠΈΠ· ΡΠ°ΠΉΠ»Π°
DeleteCondition («Port», addr);
}
else
{
MessageBox.Show («This port not exists in the database», «Error»);
return;
}
}
}
#endregion
#region Add/Delete Programm
if (label6.Text == «Choose necessary program»)
{
if (textBox1.Text.Length == 0)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΡΠ±ΡΠ°Π½Π° Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
{
MessageBox.Show («Please choose necessary program», «Error»);
return;
}
if (radioButton1.Checked == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
{
if (CheckCondition (textBox1.Text) == false)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅
{
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ°ΠΉΠ»
AddNewCondition («Programm», textBox1. Text);
}
else
{
MessageBox.Show («This programm already exists in the database», «Error»);
return;
}
}
else
{
if (CheckCondition (textBox1.Text) == true)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅
{
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°
DeleteCondition («Programm», textBox1. Text);
}
else
{
MessageBox.Show («This Programm not exists in the database», «Error»);
return;
}
}
textBox1.ReadOnly = false;
label6.BorderStyle = BorderStyle. None;
}
#endregion
changeState (false);
label6.Enabled = false;
}
private void label7_Click (object sender, EventArgs e)
{
changeState (false);
textBox1.ReadOnly = false;
label6.BorderStyle = BorderStyle. None;
label6.Enabled = false;
}
private void label8_Click (object sender, EventArgs e)
{
ShowCondition ();
}
private void Form1_FormClosing (object sender, FormClosingEventArgs e)
{
if (reboot == 1)//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π±ΡΠ»ΠΈ Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠ»ΡΡΡΠΎΠ²
{
var result = MessageBox. Show («If you close this application without rebooting the filter, it will refresh after this program restarts. Do you want to reboot the filter now?», «Do you want to reboot the filter now?», MessageBoxButtons. YesNo, MessageBoxIcon. Question);
if (result == DialogResult. Yes)
{
try
{
System.Diagnostics.Process proc = new System.Diagnostics.Process ();
proc.StartInfo.FileName = FilterAdress;
proc.Start ();//ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
proc.Close ();
MessageBox.Show («The filter successfully rebooted», «Reboot filter», MessageBoxButtons. OK, MessageBoxIcon. Information);
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString (), «Reboot filter», MessageBoxButtons. OK, MessageBoxIcon. Error);
}
}
}
}
private void label9_Click (object sender, EventArgs e)
{
try
{
System.Diagnostics.Process proc = new System.Diagnostics.Process ();
proc.StartInfo.FileName = FilterAdress;
proc.StartInfo.Arguments = «Yes» ;
proc.Start ();//ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
proc.Close ();
MessageBox.Show («The filter successfully rebooted», «Reboot filter», MessageBoxButtons. OK, MessageBoxIcon. Information);
reboot = 0;
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString (), «Reboot filter», MessageBoxButtons. OK, MessageBoxIcon. Error);
}
}
private void label6_Click (object sender, EventArgs e)
{
//ΠΡΠ±ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡΡΠ΄Π°Π»Π΅Π½ΠΈΡ
textBox1.Visible = true;
OpenFileDialog openFile = new OpenFileDialog ();
openFile.Filter = «exe files (*.exe) | *.exe» ;
if (openFile.ShowDialog () == DialogResult. OK)
{
textBox1.Text = openFile.FileName.ToString ();
textBox1.ReadOnly = true;
}
}
//ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ IP Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
private string IPtoInfo (string IP16)
{
string IP10 = «», str = «» ;
int aa = 0;
IP16 = Convert. ToString (Convert.ToInt64(IP16, 10), 16);
if (IP16.Length == 7) IP16 = «0» + IP16;
for (int i = 0; i < 8; i += 2)
{
str = IP16. Substring (i, 2);
IP10 += Convert. ToInt32(str, 16).ToString ();
if (aa < 3)
{
IP10 += «.» ;
}
aa++;
}
return IP10;
}
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² ΡΠ°ΠΉΠ»
private void AddNewCondition (string column, string addr)
{
int num = 0;
switch (column)
{
case «All»: num = 0; break;
case «IP»: num = 1; break;
case «Port»: num = 2; break;
case «Programm»: num = 3; break;
}
List ListOfCondititon = new List ();
string[] lines = File. ReadAllLines (FileAdress);
int i = 0;
if (num == 0)//ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π²Π΅ΡΡ ΡΡΠ°ΡΠΈΠΊ
{
foreach (string s in lines)
{
if (i == 0)
{
ListOfCondititon.Add (addr);
i++;
}
else
{
ListOfCondititon.Add (s);
}
}
File.WriteAllLines (FileAdress, ListOfCondititon);
reboot = 1;
return;
}
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ
foreach (string s in lines)
{
if (s == «»)
{
if (num == 0)
{
ListOfCondititon.Add (addr);
}
num -= 1;
}
++i;
ListOfCondititon.Add (s);
}
if (column == «Programm»)
{
ListOfCondititon.Add (addr);
}
File.WriteAllLines (FileAdress, ListOfCondititon);
reboot = 1;
}
//ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅
private bool CheckCondition (string addr)
{
string[] lines = File. ReadAllLines (FileAdress);
foreach (string s in lines)
{
if (addr == s)
{
return true;
}
}
return false;
}
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°
private void DeleteCondition (string column, string addr)
{
List ListOfCondititon = new List ();
string[] lines = File. ReadAllLines (FileAdress);
foreach (string s in lines)
{
if (addr ≠ s)
{
ListOfCondititon.Add (s);
}
}
File.WriteAllLines (FileAdress, ListOfCondititon);
reboot = 1;
}
//ΠΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ
private void ShowCondition ()
{
int m = 0;//ΠΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΡΠΎ ΡΡΠΈΡΠ°Π»ΠΎΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° (ΠΏΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ ΡΠ΄)
string message = «» ;
List ListOfCondititon = new List ();
string[] lines = File. ReadAllLines (FileAdress);//Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ
if (lines[0] == «true»)
{
MessageBox.Show («All blocked», «Filters:», MessageBoxButtons. OK, MessageBoxIcon. Information);
return;
}
message += «List of IP-addresses:n» ;
foreach (string s in lines)
{
if (m ≠ 0 && m ≠ 1)
{
if (m == 2 && s ≠ «»)
{
message += IPtoInfo (s) + «n» ;
}
else
{
message += s + «n» ;
}
if (s == «»)
{
m++;
switch (m)
{
case 3: message += «List of Ports: n»; break;
case 4: message += «List of Programms: n»; break;
case 5: break;
}
}
}
else
{
m++;
}
}
MessageBox.Show (message, «Filters:», MessageBoxButtons. OK, MessageBoxIcon. Information);
return;
}
}
}