Radius 函数

目录

添加备注

用户贡献的笔记 5 个笔记

andac dot aydin at code64 dot de
18 年前
如果您一直收到错误消息

致命错误:未知函数:radius_auth_open() in...

并且您的服务器是 Windows 系统(例如标准 xampp 安装),您可能没有在 php.ini 中删除 “extension=php_radius.dll” 前面的注释符号 “;”。

如果您这样做,但仍然出现错误

此外,请确保您编辑了正确的 php.ini,因为 xampp 安装了多个 php.exe,但只有 “xampp/apache/bin/php.ini” 是正确的!

我花了 2 天时间才发现这个问题!
SysCo/al - developer [at] sysco[dot] ch
16 年前
纯 PHP radius 类(不需要 radius 包!)

我们已经实现了遵循 RFC 2865 规则的纯 PHP radius 类。使用此类,还可以执行 WWW 领域身份验证。

可在 http://developer.sysco.ch/php/ 找到类摘要、完整类实现(LGPL)、辅助文件和示例。

<?php

// (...)

class Radius
{
// (...)

public function Radius($ip_radius_server = '127.0.0.1', $shared_secret = '', $radius_suffix = '', $udp_timeout = 5, $authentication_port = 1812, $accounting_port = 1813)
{
// (...)
}

// (...)

function AccessRequest($username = '', $password = '', $udp_timeout = 0)
{

// (...)

$_socket_to_server = socket_create(AF_INET, SOCK_DGRAM, 17); // UDP 数据包 = 17

if ($_socket_to_server === FALSE)
{
// (...)
}
elseif (
FALSE === socket_connect($_socket_to_server, $this->_ip_radius_server, $this->_authentication_port))
{
// (...)
}
elseif (
FALSE === socket_write($_socket_to_server, $packet_data, $packet_length))
{
// (...)
}
else
{
// (...)
$read_socket_array = array($_socket_to_server);
$write_socket_array = NULL;
$except_socket_array = NULL;

$received_packet = chr(0);

if (!(
FALSE === socket_select($read_socket_array, $write_socket_array, $except_socket_array, $this->_udp_timeout)))
{
if (
in_array($_socket_to_server, $read_socket_array))
{
if (
FALSE === ($received_packet = @socket_read($_socket_to_server, 1024))) // @ 用于,如果远程主机关闭连接,则不会显示错误
{
// (...)
}
else
{
socket_close($_socket_to_server);
}
}
}
else
{
socket_close($_socket_to_server);
}
}

// (...)

return (2 == ($this->_radius_packet_received));
}
}

?>

示例
<?php
require_once('radius.class.php');
$radius = new Radius('127.0.0.1', 'secret');
if (
$radius->AccessRequest('user', 'pass'))
{
echo
"身份验证已通过.";
}
else
{
echo
"身份验证已拒绝.";
}
?>
shaun at verticalevolution dot com
18 年前
为了扩展 jengo at phpgroupware dot org 的简单示例,您可以通过使用以下代码将 NAS IP 地址添加到请求中

radius_put_addr($radius, RADIUS_NAS_IP_ADDRESS, '127.0.0.1');

并且不使用 radius_put_attr 或 radius_put_string。我还必须使用 radius_put_string 用于用户名和密码。
brett at silcon dot com
18 年前
以下是一个更长的示例,它确实执行了挑战响应,并且可以与 SecurID 身份验证管理器一起使用。

http://www.webtrotter.com/securid_radius.txt

(脚本不允许我发布它,因为行太长,而且它只是一个例子)。
jengo at phpgroupware dot org
18 年前
以下是如何针对 radius 进行身份验证的简单示例。注意:这不会处理挑战响应。

<?php
$radius
= radius_auth_open();
if (!
radius_add_server($radius,'localhost',0,'radiussecret',5,3))
{
die(
'Radius 错误: ' . radius_strerror($radius));
}

if (!
radius_create_request($radius,RADIUS_ACCESS_REQUEST))
{
die(
'Radius 错误: ' . radius_strerror($radius));
}

radius_put_attr($radius,RADIUS_USER_NAME,'username');
radius_put_attr($radius,RADIUS_USER_PASSWORD,'password');

switch (
radius_send_request($radius))
{
case
RADIUS_ACCESS_ACCEPT:
echo
'登录成功';
break;
case
RADIUS_ACCESS_REJECT:
echo
'登录失败';
break;
case
RADIUS_ACCESS_CHALLENGE:
echo
'请求挑战';
break;
default:
die(
'Radius 错误: ' . radius_strerror($radius));
}
?>
To Top