mit C++ alle ports abschotten

Wie kann man (z.B. durch einen Befehl ) einen, oder mehrere Ports schließen?
Bitte auch die benötigte Header angeben.
 
Ich frage mich gerade, was du dir unter "Ports schließen" vorstellst.

1. Wenn kein Programm auf dem Port lauscht, kann man sich sowieso nicht dahin verbinden.
2. Wenn ein Programm auf einem Port lauscht und du den Port lokal "dichtmachen" willst, dann ist das derselbe Effekt, als wenn du das Programm beendest.

Oder hast du Software am laufen, die unbedingt laufen muss, aber nicht raustelefonieren darf?
 
Da muss ich gleich jemanden enttäuschen - C++ ist nicht allmächtig ;)
D.h Dein Problem ist OS abhängig und Du wirst sehr wahrscheinlich auf die vom OS zur Verfügung gestellten Funktionen zurückgreifen müssen.

Unter Windows z.B wäre die einfachste Lösung (solange das Programm sich auf dem "normalen" Wege verbindet) in die Initialisierung des Sockets einzumischen.

Ich würde das z.B von einer DLL erledigen lassen. Diese muss
1) beim laden den Prozessnamen überprüfen (z.B mit GetModuleFileName )
2) aus einer Configurationsdatei die "verbotenen" Namen auslesen
und falls der Prozessname darin vorkommt, einfach
"WSAStartup" patchen (den Anfang des funktion mit z.B MOV EAX,1; RETN 8 überscheiben). Das klappt bei z.B mit Thunderbird (startet, kann sich aber nicht verbinden) wie auch IE (kann sich auch nicht verbinden) und ein paar kleineren Programmen. Man kann auch "socket" funktion unbrauchbar machen (den Anfang mit
MOV EAX,INVALID_SOCKET; RETN 0xC übrschfreiben) wobei das imho aber mehr programmspezifische Probleme machen könnte.
Die DLL operiert hierbei als "Controller" (so ähnlich haben die PFWs in der grauen Vorzeit funktioniert). Der Vorteil einer DLL ist, dass sie im Speicher des Prozesses läuft und man keine großartigen Verrenkungen machen muss (weder Hooks noch andere Systemeingriffe) um diese Überwachung zu bewerkstelligen und auch der Patch an sich ist viel einfacher.

3)bleibt dafür zu sorgen, dass die DLL bei jedem Programm geladen wird.
z.b durch einen künstlichen Hook oder Eintrag in
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls (bzw. für Vista http://blogs.msdn.com/nickkramer/archive/2006/04/18/577962.aspx )
 
Zurück
Oben