Comment puis-je utiliser TIdTelnet pour envoyer des commandes?
Je suis en train de simuler la "nouvelle identité" bouton dans Vidalia (le Tor GUI) à partir de mon programme. J'ai demandé à ce sujet, basé sur Rob Kennedy réponse, j'ai essayé dans mon application:
IdTelnet1.Host:='127.0.0.1';
IdTelnet1.Port:=9051;
IdTelnet1.Connect(-1);
IdTelnet1.SendCmd('SIGNAL NEWNYM');
Mais il n'a pas fonctionné pour moi. Même après que j'ai envoyer la commande, je reçois le même proxy.
Je suis en utilisant Indy 9.
Je ne sais pas si je ne sais pas comment utiliser TIdTelnet ou je ne sais pas comment faire pour envoyer la commande spécifique.
OriginalL'auteur steve0 | 2010-10-21
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser le SendCmd() la méthode avec TIdTelnet. TIdTelnet utilise un interne thread de lecture qui lit en permanence à partir de la douille (Telnet est un protocole asynchrone qui peut recevoir des données à tout moment). SendCmd() effectue sa propre lecture interne de recevoir l'envoyé de commande de la réponse. La lecture, deux opérations interfèrent les uns avec les autres (ce problème existe également dans Indy 10 TIdCmdTCPClient composant pour la même raison).
Pour envoyer un sortant de commande avec TIdTelnet, vous devez utiliser son SendCh() la méthode d'envoi de chaque personnage individuellement (si vous mettez à niveau à Indy 10, TIdTelnet a un SendString() la méthode de whch gère pour vous) et ensuite attendre jusqu'à ce que le OnDataAvailable événement à traiter la réponse au besoin.
À moins que TOR est fait à l'aide de la véritable protocole Telnet (Telnet séquences et tout et tout), alors vous êtes mieux de les utiliser TIdTCPClient au lieu de TIdTelnet. TIdTelnet est un Telnet client spécifique, pas d'un usage général, client TCP/IP comme TIdTCPClient est.
Un client telnet est souvent utilisée pour le test de protocoles à base de texte, mais surtout parce qu'il est facilement disponible dans la plupart des OS installe. Cependant, Telnet est un protocole qui lui est propre, avec sa propre sémantique, et Indy mise en œuvre de TIdTelnet joue, et donc de ne pas faire un bon usage général protocole client. Utilisation TIdTCPClient directement pour que, par exemple:
Client.Connect; Client.SendCmd('AUTHENTICATE ...', 250); Client.SendCmd('signal NEWNYM', 250'); Client.Write('quit'); Client.Disconnect;
en Indy 10.5.5 encore il n'y pas de SendString.
Le
TIdTelnet.SendString()
méthode a été introduite dans 10.5.8.OriginalL'auteur Remy Lebeau