我有一个使用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地址,但我很难找到一种在失败的连接上获取它的方法。