我正在使用现有的库,我希望它仅通过代理建立与套接字的连接。 目前的代码是
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, "www.host.com", 8080);
我希望通过代理建立此连接(SOCK4 / 5)
我试过
socket_bind($socket, '127.0.0.1', '9150');
哪个是vidalia服务器,我也试过一些来自互联网的代理,它们在firefox上作为袜子工作,但无法通过它连接此代码。
当我尝试上线时,我得到了以下错误。
警告:socket_bind():无法绑定地址[10048]:通常只允许使用每个套接字地址(协议/网络地址/端口)。
答案 0 :(得分:10)
不要冒犯你,但似乎你不了解TCP / IP网络的基础知识。 socket_函数无法帮助您处理SOCKS代理,因为他们没有SOCKS客户端。
函数socket_bind()用于设置连接的源地址。不适用于将其绑定到远程服务。基本上你指示你的套接字显示为来自127.0.0.1:9150并且它抱怨你可能在那里运行你的SOCKS代理。即使您有这个地址/端口可用也无济于事:您无法在其他任何地方从localhost连接。
在socket_create()之后和socket_connect()之前,只有正确使用socket_bind() - 建立连接后,您无法更改源地址。
清除此问题后,让我们解决您只能通过代理建立与套接字连接的问题"。老实说,你的问题在细节上是模糊的:你想要达到什么目的?您需要一个流,或者只需要通过HTTP请求调用一些远程Web服务器?
鉴于您对套接字的误解,并且您在问题中有#80; www.host.com",8080,我相信您正在寻找通过SOCKS代理从www.host.com:8080获取的网页。在这种情况下,您不需要重新发明轮子并使用cURL:请参阅How to use a SOCKS 5 proxy with cURL?
如果我的预感错了,你真的需要通过SOCKS代理的流,那么你需要一些外部库来为你做。没有标准的PHP扩展可以为您执行此操作。您可以查看https://github.com/clue/php-socks以获取SOCKS上的数据流。