Pure PHP radius class (do not need the radius package !)
We have implemented a pure PHP radius class following the RFC 2865 rules. Using this class, it is also possible to do WWW realm authentication.
Class abstract, full class implementation (LGPL) with helper files and examples can be found at http://developer.sysco.ch/php/
<?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 packet = 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))) // @ used, than no error is displayed if the connection is closed by the remote host
{
// (...)
}
else
{
socket_close($_socket_to_server);
}
}
}
else
{
socket_close($_socket_to_server);
}
}
// (...)
return (2 == ($this->_radius_packet_received));
}
}
?>
Example
<?php
require_once('radius.class.php');
$radius = new Radius('127.0.0.1', 'secret');
if ($radius->AccessRequest('user', 'pass'))
{
echo "Authentication accepted.";
}
else
{
echo "Authentication rejected.";
}
?>
PHP.mk документација
Функции на радиус
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
ref.radius.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + преведен приказ
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
ref.radius.php
Функции на радиус
Референца за `ref.radius.php` со подобрена типографија и навигација.
Функции на радиус
Содржина
- radius_acct_open RADIUS Вендор Специфични Типови Атрибути
- radius_add_server — Создава Radius рачка за сметководство
- radius_auth_open — Додава сервер
- radius_close — Создава Radius рачка за автентикација
- radius_config — Ослободува сите ресурси
- radius_create_request — Предизвикува библиотеката да ја прочита дадената конфигурациска датотека
- radius_cvt_addr — Креира барање за сметководство или автентикација
- radius_cvt_int Овој пакет е базиран на libradius (Remote Authentication Dial In User Service) од FreeBSD. Им овозможува на клиентите да вршат автентикација и сметководство преку мрежни барања до оддалечени сервери.
- radius_cvt_string — Претвора сурови податоци во цел број
- radius_demangle — Претвора сурови податоци во стринг
- radius_demangle_mppe_key — Демангира податоци
- radius_get_attr — Изведува mppe-клучеви од измангирани податоци
- radius_get_tagged_attr_data — Извлекува атрибут
- radius_get_tagged_attr_tag — Извлекува податоци од означен атрибут
- radius_get_vendor_attr — Извлекува ознака од означен атрибут
- radius_put_addr — Извлекува специфичен атрибут од производител
- radius_put_attr — Прикачува атрибут за IP адреса
- radius_put_int — Прикачува бинарен атрибут
- radius_put_string — Прикачува атрибут за цел број
- radius_put_vendor_addr — Прикачува атрибут за стринг
- radius_put_vendor_attr — Прикачува специфичен атрибут за IP адреса од производител
- radius_put_vendor_int — Прикачува специфичен бинарен атрибут од производител
- radius_put_vendor_string — Прикачува специфичен атрибут за цел број од производител
- radius_request_authenticator — Прикачува специфичен атрибут за стринг од производител
- radius_salt_encrypt_attr — Враќа автентикатор на барање
- radius_send_request — Соли-криптира вредност
- radius_server_secret — Испраќа барање и чека одговор
- radius_strerror — Враќа порака за грешка
Белешки од корисници 5 белешки
— Конвертира сурови податоци во цел број ¶
пред 18 години
SysCo/al - развивач [at] sysco[dot] ch ¶
19 години пред
If you are constantly getting the errormessage:
Fatal error: Unknown function: radius_auth_open() in...
And your Server is a Windows-System (for example standard-xampp installation), you propably did not remove the comment symbol ";" in front of "extension=php_radius.dll" in php.ini.
If you did that, but get the error anyway:
Additionally be sure you edited the right php.ini, since xampp installs several php.exe's but only "xampp/apache/bin/php.ini" is the correct one!
It did cost me 2 days to find that out!
andac dot aydin at code64 dot de ¶
19 години пред
To expand on the simple example by jengo at phpgroupware dot org you can add a NAS IP address to the request by using:
radius_put_addr($radius, RADIUS_NAS_IP_ADDRESS, '127.0.0.1');
and not radius_put_attr or radius_put_string. I also had to use radius_put_string for the user name and password.
shaun at verticalevolution dot com ¶
20 години пред
Here's a longer example that DOES do Challenge Response and works with SecurID Authentication Managers.
http://www.webtrotter.com/securid_radius.txt
(script wouldn't let me post it because of the long lines, plus it was too long of an example).
brett at silcon dot com ¶
20 години пред
Here is a simple example on how to auth against radius. Note: This doesn't handle challenge responses.
<?php
$radius = radius_auth_open();
if (! radius_add_server($radius,'localhost',0,'radiussecret',5,3))
{
die('Radius Error: ' . radius_strerror($radius));
}
if (! radius_create_request($radius,RADIUS_ACCESS_REQUEST))
{
die('Radius Error: ' . 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 'GOOD LOGIN';
break;
case RADIUS_ACCESS_REJECT:
echo 'BAD LOGIN';
break;
case RADIUS_ACCESS_CHALLENGE:
echo 'CHALLENGE REQUESTED';
break;
default:
die('Radius Error: ' . radius_strerror($radius));
}
?>