2016-11-08 2 views
2

Als ich das Hallo Welt Beispiel in C++ von der Führung auf ZeroMQ erstellen finden Sie hier: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-ReceiveWie kann die Windows-Sicherheitswarnung für die Windows-Firewall unterdrückt werden?

und die Anwendung ausführen, ich ein Windows-Sicherheitswarnung erhalten, wenn ich die Anwendung auf Öffentlichkeit kommunizieren möchte, damit fragt oder private Netzwerke.

Es sieht wie folgt aus: Screenshot

Hier ist, wo es interessant.

Ich brauche nur mein Programm auf Port 5555 für Verbindungen von localhost abhören und ich tun nicht müssen eingehende Verbindungen auf Port 5555 zulassen. Das ist, weil ich nur zwischen Anwendungen auf dem localhost kommunizieren möchte.

Client und Server laufen beide auf demselben Computer.

Hier ist mein derzeitiger Prozess. Ich starte den Server, die Windows-Sicherheitswarnung wird angezeigt, da ich die Anwendung als Nicht-Administrator-Konto ausführe, habe ich nur Standardberechtigungen. Dann klicke ich auf Abbrechen auf dem Alert.

Durch Klicken auf "Abbrechen" in der Warnung wird eine explizite Eingabeverweigerungsregel für alle Ports für "HelloWorldServer.exe" abgelehnt. Dies ist völlig in Ordnung.

Dann starte ich den Client. Da der Client eine Verbindung zum lokalen Host herstellt. Ich muss eigentlich keine Nachrichten außerhalb des lokalen Rechners senden, und alle ihre Nachrichten kommen auf dem Server gut an.

Aufgrund einer expliziten Verweigerungsregel für eingehende Verbindungen zu HelloWorldServer.exe können die Nachrichten weiterhin vom Client auf dem lokalen Host eingehen. Dies ist ein wünschenswertes Ergebnis.

Jetzt ist die Frage, gibt es sowieso, um automatisch auf die Windows-Sicherheitswarnung zu reagieren, um auf Abbrechen zu klicken? Gibt es eine Möglichkeit, es zu unterdrücken, da die Erlaubnis nicht benötigt wird?

Die Eingabeaufforderung ist unerwünscht, da die Anwendung eine Sicherheitsanfälligkeit erstellen muss, wenn dies nicht der Fall ist.

Bitte nehmen Sie an, dass Named Pipes keine gültige Alternative zu TCP als Mittel zur Kommunikation zwischen Prozessen darstellen.

+0

Wie haben Sie den hörenden Sockel gebunden?Obwohl Sie beabsichtigen, nur den Socket mit lokalem Host zu verwenden, wenn Sie nicht korrekt binden, werden auch Remoteverbindungen zugelassen und die Firewall ausgelöst. Eine nützliche Beschreibung hier: [Verständnis INADDR_ANY für Socket-Programmierung - c] (http://StackOverflow.com/a/16510000/4581301) – user4581301

+0

'socket.bind (" tcp: // *: 5555 ");' die vollständiges Beispiel ist bei http://zguide.zeromq.org/cpp:hwserver – ComradeJoecool

+0

Odds sind gut, dass das '*' bedeutet, dass jede Adresse, lokal oder remote. Geben Sie 'socket.bind (" tcp: // localhost: 5555 ");' oder 'socket.bind (" tcp: //127.0.0.1: 5555 ");' versuchen Sie, den Port an lokalen Datenverkehr zu binden. – user4581301

Antwort

2

Beim Binden des Sockets kann der Aufrufer die IP-Adresse angeben, an die der Socket gebunden ist. Die kodierenden Proben durch ZeroMQ bereitgestellt spezifizieren

socket.bind ("tcp://*:5555"); 

wo * angeben, alle möglichen Adressen (INADDR_ANY in BSD-Socket-derived parlance) zu sein scheint, die den Windows-Firewall auslösen, wie es entfernte und lokale Adressen ermöglicht.

Aufruf socket.bind mit der lokalen Host-Adresse 127.0.0.1

socket.bind ("tcp://127.0.0.1:5555"); 

begrenzt die Buchsen an dem lokalen Rechner verbinden erlaubt und sollen die Firewall-Warnung für die meisten Windows-Firewall-Konfigurationen zum Schweigen bringen.

Verwandte Themen