2009-04-12 10 views
0

Il ne semble pas y avoir de méthode de Socket, ou ListenSocket qui me permettra d'accepter conditionnellement les connexions. Lorsque je reçois un SYN, je veux pouvoir décider si je veux cette connexion en fonction de la source, si je renvoie un SYN/ACK (accepter la connexion) ou un RST (un rejet forcé)..NET: Conditionnel Socket.Accept

Y a-t-il un désir de réaliser cela? Malheureusement, je ne peux pas fermer immédiatement la connexion après l'acceptation, il ne doit pas être ouvert du tout. Je voudrais également éviter d'avoir à travailler avec elle comme une prise RAW.

Répondre

1

Malheureusement, ce n'est pas possible. Il n'existe aucun moyen d'accepter conditionnellement l'utilisation d'une connexion de socket TCP. Vous ne pouvez filtrer une connexion qu'une fois celle-ci établie.

Mais sur quoi exactement essayez-vous de filtrer? Au moment où vous obtenez le paquet SYN, tout ce que vous savez est l'adresse IP de la source et le port auquel ils essaient de se connecter. Il semble qu'il serait préférable de filtrer sur la base de ces données en utilisant le pare-feu. Je réalise que ce n'est pas contrôlé via votre application mais c'est une alternative à considérer.

+0

Il s'agit d'un service de répéteur pour un protocole personnalisé sur TCP. Et j'en ai besoin pour commencer à rejeter les connexions locales si la connexion à distance ne peut pas être établie. En outre, certaines fonctionnalités de pare-feu sont également intégrées. –

0

Il semble que ce ne soit pas possible sans passer en mode RAW. Une fois que le socket passe en mode écoute de Winsock, il accepte tout et n'importe quoi, même AVANT que Socket.Accept est appelé.

Vous devez utiliser le mode RAW et analyser les paquets avec votre propre pile TCP si vous voulez cette fonctionnalité.

0

Grattez cela aussi. Windows XP SP2 et versions ultérieures ne prennent plus en charge l'envoi de paquets TCP sur des sockets RAW. Voir here pour plus de détails.