Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP套接字包数据_Php_Sockets_Imap_Pack - Fatal编程技术网

PHP套接字包数据

PHP套接字包数据,php,sockets,imap,pack,Php,Sockets,Imap,Pack,我想是“连接主机:端口”?有人能给我解释一下吗?当我尝试发送命令“0000001登录密码”时,imap返回错误错误语法。看来我应该打包这个命令或者类似的东西 上有SOCKS协议的概述 这是一些快速连接到SOCKS代理的脏代码 fwrite($socket,pack(“C3”,0x05,0x01,0x00))表示发送字节5、1和0 在初始连接请求中,这意味着“SOCKS版本5”,支持1身份验证方法,并且一种身份验证方法是无身份验证 如果($server\u status==pack(“C2”,0x

我想是“连接主机:端口”?有人能给我解释一下吗?当我尝试发送命令“0000001登录密码”时,imap返回错误错误语法。看来我应该打包这个命令或者类似的东西

上有SOCKS协议的概述

这是一些快速连接到SOCKS代理的脏代码

fwrite($socket,pack(“C3”,0x05,0x01,0x00))表示发送字节5、1和0

在初始连接请求中,这意味着“SOCKS版本
5
”,支持
1
身份验证方法,并且一种身份验证方法是
无身份验证

如果($server\u status==pack(“C2”,0x05,0x00))
正在检查服务器是否响应“Socks版本
5
,请使用
无身份验证

fwrite($socket,pack(“C5”,0x05,0x01,0x00,0x03,strlen($desthost))。$desthost.pack(“n”,$port))正在发送连接请求:

  • 5(袜子版本5)
  • 1(TCP连接请求)
  • 0(保留)
  • 3(使用域名)
  • 域名的
    长度
  • 域名
  • 网络字节顺序中的端口号
如果(ord($server\u buffer[0])==5和&ord($server\u buffer[1])==0和&ord($server\u buffer[2])==0)
正在检查服务器响应

  • 5袜子第5版
  • 已批准0个请求
  • 0保留字节
有更多的字段,但它会忽略它们,并希望它们正好适合10个字节,如果它返回域地址或IPv6地址,这可能不是真的

此时,将建立到远程服务器的连接。然后,它将其升级到TLS,否则应按预期工作

对于此点之后的IMAP命令,请确保它们以“\r\n”结尾。您实际上没有为此显示代码,因此我们无法帮助调试它


SOCKS5在中正式规定。

中有SOCKS协议概述

这是一些快速连接到SOCKS代理的脏代码

fwrite($socket,pack(“C3”,0x05,0x01,0x00))表示发送字节5、1和0

在初始连接请求中,这意味着“SOCKS版本
5
”,支持
1
身份验证方法,并且一种身份验证方法是
无身份验证

如果($server\u status==pack(“C2”,0x05,0x00))
正在检查服务器是否响应“Socks版本
5
,请使用
无身份验证

fwrite($socket,pack(“C5”,0x05,0x01,0x00,0x03,strlen($desthost))。$desthost.pack(“n”,$port))正在发送连接请求:

  • 5(袜子版本5)
  • 1(TCP连接请求)
  • 0(保留)
  • 3(使用域名)
  • 域名的
    长度
  • 域名
  • 网络字节顺序中的端口号
如果(ord($server\u buffer[0])==5和&ord($server\u buffer[1])==0和&ord($server\u buffer[2])==0)
正在检查服务器响应

  • 5袜子第5版
  • 已批准0个请求
  • 0保留字节
有更多的字段,但它会忽略它们,并希望它们正好适合10个字节,如果它返回域地址或IPv6地址,这可能不是真的

此时,将建立到远程服务器的连接。然后,它将其升级到TLS,否则应按预期工作

对于此点之后的IMAP命令,请确保它们以“\r\n”结尾。您实际上没有为此显示代码,因此我们无法帮助调试它


SOCKS5是在中正式指定的。

它只是说,发送三个字节5、1和0,然后发送五个字节5、1、0、3,[主机长度]。它是二进制协议,任何地方都没有“连接”字。(连接由HTTP代理使用,而不是SOCKS代理)谢谢!但这些字节对代理来说意味着什么呢?如果代理受密码保护,我如何进行授权?这里有一个概述:,其中正式指定了SOCKS5,它只是说,发送三个字节5、1和0,然后发送五个字节5、1、0、3,[主机长度]。它是二进制协议,任何地方都没有“连接”字。(连接由HTTP代理使用,而不是SOCKS代理)谢谢!但这些字节对代理来说意味着什么呢?如果代理受密码保护,我该如何进行授权?这里有一个概述:,并且SOCKS5在“非常感谢”中正式指定!!让我问一下,什么是“\r\n”?发送到IMAP服务器的每个命令都必须以字符串“\r\n”结尾,例如
001登录用户密码\r\n
。这是一个回车/新品组合。非常感谢!!让我问一下,什么是“\r\n”?发送到IMAP服务器的每个命令都必须以字符串“\r\n”结尾,例如
001登录用户密码\r\n
。这是回车/换行组合。
<?php

$desthost = "imap.gmail.com";
$port     = 993;
$conflag  = STREAM_CLIENT_CONNECT;

try
{
    $socket = stream_socket_client( "tcp://host:port", $errno, $errstr, 15, $conflag );

    fwrite( $socket, pack( "C3", 0x05, 0x01, 0x00 ) );
    $server_status = fread( $socket, 2048 );
    if ( $server_status == pack( "C2", 0x05, 0x00 ) )
    {
        // Connection succeeded
    }
    else
    {
        die( "SOCKS Server does not support this version and/or authentication method of SOCKS.\r\n" );
    }

    fwrite( $socket, pack( "C5", 0x05, 0x01, 0x00, 0x03, strlen( $desthost ) ) . $desthost . pack( "n", $port ) );
    $server_buffer = fread( $socket, 10 );

    var_dump(unpack("C5", $server_buffer));


    if ( ord( $server_buffer[0] ) == 5 && ord( $server_buffer[1] ) == 0 && ord( $server_buffer[2] ) == 0 )
    {
        // Connection succeeded
    }
    else
    {
        die( "The SOCKS server failed to connect to the specificed host and port. ( " . $desthost . ":" . $port . " )\r\n" );
    }

    stream_socket_enable_crypto( $socket, TRUE, STREAM_CRYPTO_METHOD_SSLv23_CLIENT );
}
catch ( Exception $e )
{
    die( $e->getMessage() );
}

if ( $socket === FALSE )
{
    die( "bad socket" );
}

//fwrite( $socket, "GET /\n" );
echo fread( $socket, 8192 );
fwrite( $socket, pack( "C5", 0x05, 0x01, 0x00, 0x03, strlen( $desthost ) ) . $desthost . pack( "n", $port ) );