我试图从我的程序模拟Vidalia(
Tor GUI)中的“新身份”按钮.
I asked about that,根据Rob Kennedy的回答,我在我的申请中尝试了这个:
IdTelnet1.Host:='127.0.0.1'; IdTelnet1.Port:=9051; IdTelnet1.Connect(-1); IdTelnet1.SendCmd('SIGNAL NEWNYM');
但它对我没用.即使我发送命令后,我也得到相同的代理.
我正在使用Indy 9.
我不知道我是否不知道如何使用TIdTelnet或者不知道如何发送该特定命令.
解决方法
您不能将SendCmd()方法与TIdTelnet一起使用. TIdTelnet使用内部读取线程连续从套接字读取(因为Telnet是一种可以随时接收数据的异步协议). SendCmd()执行自己的内部读取以接收发送命令的响应.两个读取操作相互干扰(出于同样的原因,这个问题也存在于Indy 10的TIdCmdTCPClient组件中).
要使用TIdTelnet发送传出命令,必须使用其SendCh()方法单独发送每个字符(如果升级到Indy 10,TIdTelnet有一个SendString()方法,则为您处理),然后等待OnDataAvailable事件到根据需要处理响应.
除非TOR实际上使用真正的Telnet协议(Telnet序列和所有),否则最好使用TIdTCPClient而不是TIdTelnet. TIdTelnet是一个特定于Telnet的客户端,而不是像TIdTCPClient那样的通用TCP / IP客户端.