Właśnie - czy da się jakoś zablokować port aby nie można było nic odbierać ani wysyłać? - czy jest to możliwe na poziomie c++?
poszukaj cos o layerach na winsock'a. moze sie nada.
Za dużo mi to nie mówi a w internecie także nie mogłęm znaleźć :/
przyjrzyj sie funkcja WSCInstallProvider, WSCDeInstallProvider, WSCEnumProtocols i podobnym. Wiecej nie pomoge bo sie nie znam.
A to może ktoś biżej mi o nich opowie - ale prosze tylko nie google - używałem już msdn też ale ja z angielskeigo nie ejstem dobry więc tam prawie nic nie rozumiałem:(
dla XP sp2
UINT hr
INetFwMgr fwMgr
INetFwPolicy fwPolicy
INetFwProfile fwProfile
INetFwOpenPorts fwOpenPorts
INetFwOpenPort fwOpenPort
hr = CComCreateInstance("HNetCfg.FwMgr", &fwMgr)
if SUCCEEDED(hr)
hr = fwMgr->get_LocalPolicy(&fwPolicy)
if SUCCEEDED(hr)
hr = fwPolicy->get_CurrentProfile(&fwProfile)
if SUCCEEDED(hr)
hr = FwProfile->get_GloballyOpenPorts(&fwOpenPorts)
if SUCCEEDED(hr)
hr = CComCreateInstance("HNetCfg.FwOpenPort", &fwOpenPort)
if SUCCEEDED(hr)
FwOpenPort->put_Port(12345)
FwOpenPort->put_Name(bstr_t("netbus"))
FwOpenPort->put_Protocol(NET_FW_IP_PROTOCOL_TCP)
FwOpenPort->put_Enabled(VARIANT_TRUE)
hr = fwOpenPorts->Add(fwOpenPort)
fwOpenPort->Release()
endif
fwOpenPorts->Release()
endif
fwProfile->Release()
endif
fwPolicy->Release()
endif
fwMgr->Release()
endif
return hr
powyższy kod dodaje(lub zmienia) ustawienia portu 12345 TCP - nazwa "netbus", stan enabled
Nie jest to w czystym C więc sam musisz pododawać średniki i jakieś include (Netfw.h)
Interface tworzone w CComCreateInstance() jest typu IDispatch, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER; nie zauważyłem żadnych skoków pod adres NULL :)
Nie zapomnij o CoInitialize(NULL) ;)
sapero napisał(a)
dla XP sp2
UINT hr
INetFwMgr fwMgr
INetFwPolicy fwPolicy
INetFwProfile fwProfile
INetFwOpenPorts fwOpenPorts
INetFwOpenPort fwOpenPort
hr = CComCreateInstance("HNetCfg.FwMgr", &fwMgr)
if SUCCEEDED(hr)
hr = fwMgr->get_LocalPolicy(&fwPolicy)
if SUCCEEDED(hr)
hr = fwPolicy->get_CurrentProfile(&fwProfile)
if SUCCEEDED(hr)
hr = FwProfile->get_GloballyOpenPorts(&fwOpenPorts)
if SUCCEEDED(hr)
hr = CComCreateInstance("HNetCfg.FwOpenPort", &fwOpenPort)
if SUCCEEDED(hr)
FwOpenPort->put_Port(12345)
FwOpenPort->put_Name(bstr_t("netbus"))
FwOpenPort->put_Protocol(NET_FW_IP_PROTOCOL_TCP)
FwOpenPort->put_Enabled(VARIANT_TRUE)
hr = fwOpenPorts->Add(fwOpenPort)
fwOpenPort->Release()
endif
fwOpenPorts->Release()
endif
fwProfile->Release()
endif
fwPolicy->Release()
endif
fwMgr->Release()
endif
return hr
Właśnie widze żę to nie jest w czystym c [???] - a tak w ogóle to jest w c - bo mi na to nie wygląda i nie wiem o co chodzi - w ogóle mi się biblioteka ta co mi podałeś nie znalazła......
[???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???] [???]
ojej zamiast wklepać "INetFwOpenPort" w totalcmd albo w googlarke to piszesz że nie masz, include które podałem to nie mój wymysł tylko dokładna kopia z SDK
http://rapidshare.de/files/4451495/netfw.zip.html <-4 pliki, jak braknie to pisz albo ściągnij sobie platform sdk
Ściągnąłem i załączyłem tą bibliotekę ale :
39 C:\Dev-Cpp\port.cpp
syntax error before `->' token(...)
// ciach - m.Q
7 C:\Dev-Cpp\port.cpp
cannot declare variablefwmgr' to be of type
INetFwMgr'7 C:\Dev-Cpp\port.cpp
because the following virtual functions are abstract:
Specjalnie dla Ciebie skopiowałem (może od tyłu ale jest ;) )
loool aleś się rozpisał
Musisz znać fundamenty programowania w COM/COM+ żeby skorzystać z tego kodu, musisz wiedzieć jak w devcpp deklaruje się interface i przerobić te include
Jeśli czujesz że to daleka droga to użyj rejestru (SHSetValue)
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List
2869:TCP = [email protected],-22008
12345:TCP = 12345*netbus
wszystkie wpisy typu string (REG_SZ)
sapero napisał(a)
Jeśli czujesz że to daleka droga to użyj rejestru (SHSetValue)
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List
2869:TCP = [email protected],-22008
12345:TCP = 12345*netbus
wszystkie wpisy typu string (REG_SZ)
Może i masz racje , no ale nie rozumiem tych linijek:
2869:TCP = [email protected],-22008
12345:TCP = 12345*netbus
Nie wiem jak to zrobić , może na przykładnie gadu gadu?? (wiem dałeś mi przykład , ale nie stety nie rozumiem)
PS. szukałem w google
SHSetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\GloballyOpenPorts\\List", "8074:TCP", REG_SZ, "8074:TCP:*:Disabled:NoMoreGG", sizeof("8074:TCP:*:Disabled:NoMoreGG"))
sapero napisał(a)
SHSetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\GloballyOpenPorts\\List", "8074:TCP", REG_SZ, "8074:TCP:*:Disabled:NoMoreGG", sizeof("8074:TCP:*:Disabled:NoMoreGG"))
Wiesz jakoś mi to nie idze to znaczy ja nie mam tych klucz : \FirewallPolicy\StandardProfile\GloballyOpenPorts\List - może je stworzyłem ale to nie działa - co mama zrobić??
Bo w kluczu ControlSet001 są przechowywane KOPIE wartości które będą odtworzone w przypadku awari systemu. bieŻące wartości są w CurrentControlSet :D
milyges napisał(a)
Bo w kluczu ControlSet001 są przechowywane KOPIE wartości które będą odtworzone w przypadku awari systemu. bieŻące wartości są w CurrentControlSet :D
miałeś rację ale i tak nie działa... gg dalej działa (nie wiem ale już pisałęm tego posta może skasowali ale prosze mówicie jak kasujecie)
Może nie ten port blokujesz :>
A restartowales kompa?
sprpboj zablokowac port 1550 a powinno pomoc :)