问题描述
我正在尝试创建SOCKS 4/5服务器,并且我希望使用Indy TIdSocksServer
组件作为基础。看起来很简单并且易于使用,但是我必须缺少一些东西。
我将TIdSocksServer
放到了新表单上,并配置了以下内容:
- 有效:真实
- AllowSocks4:是
- AllowSocks5:是
- 绑定:0.0.0.0:43334
- 默认端口:80
- 拦截:空
- IOHandler:空
我添加了代码,以在连接后在'connect'
中显示TMemo
:
procedure TForm1.IdSocksServer1Connect(AContext: TIdContext);
begin
Memo1.Lines.Add('connect');
end;
我在Linux主机上配置了ProxyChains:
/etc/proxychains.conf
...
socks5 10.0.0.56 43334
当我执行该应用程序并尝试使用ProxyChains连接时,出现以下错误:
kelly@ubuntu:~/home$ proxychains curl www.google.com
ProxyChains-3.1 (http://proxychains.sf.net)
|DNS-request| www.google.com
|S-chain|-<>-10.0.0.56:43334-<><>-4.2.2.2:53-<--timeout
|DNS-response|: www.google.com does not exist
curl: (6) Could not resolve host: www.google.com
我可以确认已建立连接,因为文本'connect'
已添加到备忘录中。我还使用了Wireshark,并观察了Ubuntu主机和Windows主机之间的三向握手和拆卸。
似乎问题在于流量正在到达SOCKS服务器,但没有转发。我承认这是绝对的最小代码,但给人的印象是TIdSocksServer
组件将负责转发流量,并且会增加支持功能,例如验证SOCKS5的凭据等。
解决方法
Remy在我的代码中发现了问题。为了验证服务器正在接收连接,我添加了一个写入TMemo组件的过程,这导致了死锁。要解决该错误,我所要做的就是删除更新TMemo组件的过程。按预期工作。