2009-04-04 5 views

Antwort

0

die Verbindung akzeptieren, auf der IP aussehen, wenn es nicht erlaubt ist, schließen Sie die Verbindung

bearbeiten:

ich Sie sprechen über TCP-Verbindung gehe mal davon . Wenn Sie den Port abhören und eine Verbindung von einem Client kommt, führt die API den TCP-3-Wege-Handshake aus, und der Client weiß, dass dieser Port angehört wird.

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, das Senden von Paketen zu verhindern (d. H. Die Verbindung zu akzeptieren), so dass Sie zuerst die IP-Adresse sehen und dann entscheiden können.

Die einzige Möglichkeit, die ich mir vorstellen kann, ist die Paketfilterung basierend auf der Quell-IP auf der Netzwerkschicht (z. B. mit Firewall).

1

Zwei Gründe, warum ich will nicht die Verbindung akzeptieren, um die Remote-IP-Adresse zu überprüfen:

1). Der Client würde sehen, dass sich an diesem Port ein abhörender Socket befindet. Wenn ich die Clientverbindung ablehne, möchte ich nicht, dass sie wissen, dass an diesem Port ein Socket abgehört wird.

2). Diese Technik ist nicht so effizient und erfordert mehr CPU-, RAM- und Netzwerknutzung; Es ist also nicht gut im Falle eines Denial-of-Service-Angriffs.

1

Bei der Verwendung von ATM kommt das CONNECT ACK-Paket vom letzten Switch, nicht vom End-Client. Also, Sie müssten accept() auf dem Socket aufrufen, dann die Adresse anschauen (basierend auf der übergebenen addr_family), und an diesem Punkt einfach den Socket schließen. Zu dem Zeitpunkt, wenn es den Anforderer erreicht, wird es wahrscheinlich nur einen Fehler erhalten.

Und ich bin mir nicht sicher, wie viele Ressourcen Sie davon halten, aber das Annehmen einer Verbindung ist auf einem sehr niedrigen Niveau und wird nicht wirklich ein Problem sein. Es ist ziemlich einfach, sie fallen zu lassen.

Wenn Sie unter eine DoS-Attacke geraten, kann Ihr Code für eine voreingestellte Zeitspanne aufhören zu hören, so dass der Angreifer nur Fehler bekommt, wenn Sie sich solche Sorgen machen.

Spielt es wirklich eine Rolle, ob der Client weiß, dass eine Steckdose zu hören ist? Versuchen Sie Telnet verwenden, um eine Verbindung zu Ihrem localhost auf Port 137 und sehen, wie schnell die Dateifreigabe in Windows die Verbindung abbricht ... (Wenn Sie es sogar aktiviert haben, und wenn ich mich an die richtige Portnummer erinnerte .. heh ..)

Aber auf der SOCKET-Ebene werden Sie nicht in der Lage sein zu tun, was Sie wollen. Sie sprechen davon, auf die TCP-Ebene zu gelangen und die eingehenden Verbindungsanforderungen zu betrachten und sich dort mit ihnen zu befassen.

Dies kann getan werden, aber Sie sprechen über einen Kernel-Treiber, um es zu tun. Ich bin mir nicht sicher, ob Sie das überhaupt im Benutzermodus tun können.

Wenn Sie Kernel-Hilfe mit diesem wollen, lassen Sie es mich wissen. Ich kann Ihnen vielleicht einige Beispiele oder Anleitungen geben.

Nur meine eigenen zwei Cent und IMVHO ...

6

SO_CONDITIONAL_ACCEPT Socket-Option. Here

Auch ziemlich sicher, dass es in XP und Server 2003 verfügbar ist, nicht nur Vista.

+0

Wahr, ABER: [Obwohl ein abhörender Socket versteckt wird,] "überwiegen die Nachteile der Aktivierung von SO_CONDITIONAL_ACCEPT diese Einschränkung" [weil die App, nicht der TCP/IP-Stack, einen DoS-SYN-Angriff auf ihrem besitzen.] –

Verwandte Themen