Indy TIdSocksServer无法转发流量

问题描述

我正在尝试创建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组件的过程。按预期工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...