端口已打开但无法与其连接

时间:2013-11-19 08:37:07

标签: php sockets

我已经使用套接字来检查代理的状态以及端口(IP:端口)以查看代理是否正常工作,我使用套接字来做(不是curl或fsockopen

我正在使用this codes第二个例子稍作修改。

我将尝试用实例解释当前的问题。

IP:109.195.98.21有2个开放端口(80,3129)

套接字可以打开这两个端口但是3129是真正的可以连接并使用它作为代理,即使它打开也不可能用于端口80,我真的无法理解原因以及我如何才能检测到开放打开并可以与之连接的端口(3129)。有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

因此,这个简化的代码将让您检查端口是否打开以及它是否正常。

<?php
  $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
  $response = socket_connect( $socket, '109.195.98.21', 3129 );

  if ( $response === false ) {
    printf( 'socket_connect failed: %s',
      socket_strerror( socket_last_error( $socket ) ) );
  } else {
    printf( 'Connected!' );
    socket_close( $socket );
  }
?>

但是,既然你是在一个真正的代理之后,正如你所说,只是在服务器上打开80和3129之间没有区别,你必须向下游发送一些数据,看看会发生什么

这取决于正在运行的代理。 SOCKS? HTTP?

对于HTTP,您需要发送HTTP请求并期望得到合理的响应。无论您请求什么,某些HTTP代理都会重定向到不需要的位置。因此,您需要发送一个微小的HTTP负载,看看它能带给您什么。

对于SOCKS,请阅读协议http://en.wikipedia.org/wiki/SOCKS#Protocol并发送所需的有效负载以验证它们是否有效。

使用socket_writesocket_read

更多信息:

当然,更简单的方法是使用netcatcurl