首页 > 解决方案 > Indy TIdSocksServer 不转发流量

问题描述

我正在尝试创建一个 SOCKS 4/5 服务器,并且我想使用 IndyTIdSocksServer组件作为基础。它看起来很简单,使用起来也很简单,但我一定错过了一些东西。

我将 aTIdSocksServer放到了一个新表单上并配置了以下内容:

我添加了代码以'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 的凭据等。

标签: delphiindysocks

解决方案


Remy 用我的代码发现了这个问题。为了验证服务器是否正在接收连接,我添加了一个写入 TMemo 组件的过程,这会导致死锁。要修复错误,我所要做的就是删除更新 TMemo 组件的过程。按预期工作。


推荐阅读