2

我有一个使用 stream_socket_server() 和 stream_socket_accept() 运行的 PHP 通信服务器,这是一个相当复杂的事情,它使用 SSL 连接和证书来确定远程端被授权连接到服务器。我的日志中出现的一件事是连接失败。出于安全目的,我正在尝试提供有关这些连接的更多详细信息。

我目前通过为 stream_socket_accept() 调用设置错误处理程序来获取有关失败连接的大部分错误详细信息:

public function on_ssa_error($errno, $errstr)
    {
    $this->ssa_error .= " ERROR [$errno]: $errstr\n";
    }

public function on_select_read()
    {
    $this->ssa_error = "";
    set_error_handler(array($this, "on_ssa_error")); 
    $rsocket = stream_socket_accept($this->ss, 0);
    restore_error_handler();

    if ($rsocket !== FALSE)
        // Finish setting up the socket connection and start using it
    else
        // Report the error in $this->ssa_error
    }

…当我有一个失败的连接时,我往往会得到这样的错误:

ERROR [2]: stream_socket_accept(): SSL operation failed with code 1. OpenSSL Error messages: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate
ERROR [2]: stream_socket_accept(): Failed to enable crypto
ERROR [2]: stream_socket_accept(): accept failed: Success

......这部分有用,因为它将错误连接的原因识别为错误证书,但我真的很想有一些东西表明错误请求的来源,理想情况下是源的 IP 地址或 Mac 地址。

有没有办法使用 stream_socket_xxx 代码获取失败连接的 IP 地址?我知道可以获取已接受连接的 IP 地址,但我很难想办法在失败的连接上获取它。

4

0 回答 0