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

Php 端口已打开,但无法与其连接,php,sockets,Php,Sockets,我使用socket检查带有端口(IP:Port)的代理的状态,以查看代理是否工作,我使用socket进行检查(而不是curl或fsockopen) 我使用的是第二个例子,有一些改动 我将尝试用一个实例来解释我目前遇到的问题 IP:109.195.98.21有2个开放端口(803129) 套接字可以打开两个端口,但是3129是真正的一个可以连接并使用它作为代理的端口,即使端口80是打开的,也不可能,我真的不明白原因,也不明白我如何才能检测到打开的端口,它是打开的,并且可以像(3129)一样连接.有

我使用socket检查带有端口(IP:Port)的代理的状态,以查看代理是否工作,我使用socket进行检查(而不是curl或fsockopen)

我使用的是第二个例子,有一些改动

我将尝试用一个实例来解释我目前遇到的问题

IP:109.195.98.21有2个开放端口(803129)


套接字可以打开两个端口,但是3129是真正的一个可以连接并使用它作为代理的端口,即使端口80是打开的,也不可能,我真的不明白原因,也不明白我如何才能检测到打开的端口,它是打开的,并且可以像(3129)一样连接.有什么想法吗?谢谢。

因此,此简化代码将允许您检查端口是否打开,仅此而已

<?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,请阅读协议并发送所需的有效载荷,以验证它们是否有效

使用,用于此

更多信息:

  • 改为使用
    fsockopen
    ,它支持与代理进行开箱即用的对话,并且比尝试模拟协议更容易

当然,更简单的方法可能是使用
netcat
curl

你的问题有点不清楚。你到底想做什么,什么失败了?请显示相关代码。@CodeCaster好的,我已经编辑了我的Q,这个网站也在做同样的工作,你也可以单击此处查看使用netstat来查看端口是否正确lly已打开并检查yo防火墙。将更多信息放入问题中,源和目标IP和端口,…数据方向..@user我是指您的最后一句话:“Socket可以打开两个端口,但是3129是真正的一个可以连接并使用它作为代理的端口,即使端口80是打开的,也不可能,我真的不明白原因,也不明白我如何才能检测到打开的端口,它是打开的,并且可以像(3129)一样与之连接。”“。我真的不明白你的意思。网站->nmap shell执行->结果返回浏览器,你不需要在那里进行套接字编程吗?请注意,在某些情况下使用端口扫描是不合法的。”