downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

radius_acct_open> <qdom_tree
[edit] Last updated: Mon, 01 Nov 2010

view this page in

CXXIX. Radius

導入

このパッケージは、FreeBSD の libradius をもとにしたものです。 この PECL モジュールは、Radius 認証 (RFC 2865) および Radius 課金 (RFC 2866) を完全にサポートします。 このパッケージは、Unix (FreeBSD および Linux でテストしました) および Windows で使用可能です。

注意: libradius に関する正確な説明はここ にあります。設定ファイルについての詳細な説明は ここです。

インストール手順

どうやってインストールするの?

  • tar パッケージを (通常は php4/ext に) 展開する

  • radius-x.x の名前を radius に変更する

  • php4 ディレクトリで ./buildconf を実行する

  • ./configure --enable-radius を実行する

  • make; make install

あるいは、もし .so 形式にしたければ

  • tar パッケージを展開する

  • radius-x.x ディレクトリで phpize を実行する

  • radius-x.x ディレクトリで ./configure を実行する

  • make; make install

Windows の場合は、 http://snaps.php.net/ から php_radius.dll をダウンロードして使用することを推奨します。 PECL スナップショットのページ(使用する PHP のバージョンに応じて以下の適切なレポジトリを 選択してください)からこのバンドルされていない PECL エクステンションを入手することができます。 : PECL for PHP 4.3.x, PECL for PHP 5.0.x または PECL Unstable

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

RADIUS_ACCESS_REQUEST ()

認証のリクエスト

RADIUS_ACCESS_ACCEPT ()

アクセスが許可されました

RADIUS_ACCESS_REJECT ()

アクセスが拒否されました

RADIUS_ACCOUNTING_REQUEST ()

課金のリクエスト

RADIUS_ACCOUNTING_RESPONSE ()

課金のレスポンス

RADIUS_ACCESS_CHALLENGE ()

アクセスチャレンジ

RADIUS_USER_NAME (string)

ユーザ名

RADIUS_USER_PASSWORD (string)

パスワード

RADIUS_CHAP_PASSWORD (string)

Chap パスワード。 chappass = md5(ident + plaintextpass + challenge)

RADIUS_NAS_IP_ADDRESS (string)

NAS IP アドレス

RADIUS_NAS_PORT (int)

NAS ポート

RADIUS_SERVICE_TYPE (int)

サービスの型、以下のいずれか

RADIUS_LOGIN
RADIUS_FRAMED
RADIUS_CALLBACK_LOGIN
RADIUS_CALLBACK_FRAMED
RADIUS_OUTBOUND
RADIUS_ADMINISTRATIVE
RADIUS_NAS_PROMPT
RADIUS_AUTHENTICATE_ONLY
RADIUS_CALLBACK_NAS_PROMPT

RADIUS_FRAMED_PROTOCOL (int)

フレームのプロトコル、以下のいずれか

RADIUS_PPP
RADIUS_SLIP
RADIUS_ARAP
RADIUS_GANDALF
RADIUS_XYLOGICS

RADIUS_FRAMED_IP_ADDRESS (string)

IP アドレス

RADIUS_FRAMED_IP_NETMASK (string)

ネットマスク

RADIUS_FRAMED_ROUTING (int)

ルーティング

RADIUS_FILTER_ID (string)

フィルタ ID

RADIUS_FRAMED_MTU (int)

MTU

RADIUS_FRAMED_COMPRESSION (int)

圧縮、以下のいずれか

RADIUS_COMP_NONE
RADIUS_COMP_VJ
RADIUS_COMP_IPXHDR

RADIUS_LOGIN_IP_HOST (string)

ログイン IP ホスト

RADIUS_LOGIN_SERVICE (int)

ログインサービス

RADIUS_LOGIN_TCP_PORT (int)

ログイン TCP ポート

RADIUS_REPLY_MESSAGE (string)

応答メッセージ

RADIUS_CALLBACK_NUMBER (string)

コールバック番号

RADIUS_CALLBACK_ID (string)

コールバック ID

RADIUS_FRAMED_ROUTE (string)

フレームのルート

RADIUS_FRAMED_IPX_NETWORK (string)

フレームの IPX ネットワーク

RADIUS_STATE (string)

状態

RADIUS_CLASS (int)

クラス

RADIUS_VENDOR_SPECIFIC (int)

ベンダ固有の属性

RADIUS_SESSION_TIMEOUT (int)

セッションタイムアウト

RADIUS_IDLE_TIMEOUT (int)

アイドルタイムアウト

RADIUS_TERMINATION_ACTION (int)

停止アクション

RADIUS_CALLED_STATION_ID (int)

呼び出し先ステーション ID

RADIUS_CALLING_STATION_ID (string)

呼び出し元ステーション ID

RADIUS_NAS_IDENTIFIER (int)

NAS ID

RADIUS_PROXY_STATE (int)

Proxy の状態

RADIUS_LOGIN_LAT_SERVICE (int)

ログイン LAT サービス

RADIUS_LOGIN_LAT_NODE (int)

ログイン LAT ノード

RADIUS_LOGIN_LAT_GROUP (int)

ログイン LAT グループ

RADIUS_FRAMED_APPLETALK_LINK (int)

フレームの Appletalk リンク

RADIUS_FRAMED_APPLETALK_NETWORK (int)

フレームの Appletalk ネットワーク

RADIUS_FRAMED_APPLETALK_ZONE (int)

フレームの Appletalk ゾーン

RADIUS_CHAP_CHALLENGE (string)

チャレンジ

RADIUS_NAS_PORT_TYPE (int)

NAS ポート型、以下のいずれか

RADIUS_ASYNC
RADIUS_SYNC
RADIUS_ISDN_SYNC
RADIUS_ISDN_ASYNC_V120
RADIUS_ISDN_ASYNC_V110
RADIUS_VIRTUAL
RADIUS_PIAFS
RADIUS_HDLC_CLEAR_CHANNEL
RADIUS_X_25
RADIUS_X_75
RADIUS_G_3_FAX
RADIUS_SDSL
RADIUS_ADSL_CAP
RADIUS_ADSL_DMT
RADIUS_IDSL
RADIUS_ETHERNET
RADIUS_XDSL
RADIUS_CABLE
RADIUS_WIRELESS_OTHER
RADIUS_WIRELESS_IEEE_802_11

RADIUS_PORT_LIMIT (int)

ポートの限界

RADIUS_LOGIN_LAT_PORT (int)

ログイン LAT ポート

RADIUS_CONNECT_INFO (string)

接続の情報

RADIUS_ACCT_STATUS_TYPE (int)

課金状態の型、以下のいずれか

RADIUS_START
RADIUS_STOP
RADIUS_ACCOUNTING_ON
RADIUS_ACCOUNTING_OFF

RADIUS_ACCT_DELAY_TIME (int)

課金の遅延時間

RADIUS_ACCT_INPUT_OCTETS (int)

課金の入力バイト数

RADIUS_ACCT_OUTPUT_OCTETS (int)

課金の出力バイト数

RADIUS_ACCT_SESSION_ID (int)

課金のセッション ID

RADIUS_ACCT_AUTHENTIC (int)

課金認証、以下のいずれか

RADIUS_AUTH_RADIUS
RADIUS_AUTH_LOCAL
RADIUS_AUTH_REMOTE

RADIUS_ACCT_SESSION_TIME (int)

課金のセッション時間

RADIUS_ACCT_INPUT_PACKETS (int)

課金の入力パケット

RADIUS_ACCT_OUTPUT_PACKETS (int)

課金の出力パケット

RADIUS_ACCT_TERMINATE_CAUSE (int)

課金終了の原因、以下のいずれか

RADIUS_TERM_USER_REQUEST
RADIUS_TERM_LOST_CARRIER
RADIUS_TERM_LOST_SERVICE
RADIUS_TERM_IDLE_TIMEOUT
RADIUS_TERM_SESSION_TIMEOUT
RADIUS_TERM_ADMIN_RESET
RADIUS_TERM_ADMIN_REBOOT
RADIUS_TERM_PORT_ERROR
RADIUS_TERM_NAS_ERROR
RADIUS_TERM_NAS_REQUEST
RADIUS_TERM_NAS_REBOOT
RADIUS_TERM_PORT_UNNEEDED
RADIUS_TERM_PORT_PREEMPTED
RADIUS_TERM_PORT_SUSPENDED
RADIUS_TERM_SERVICE_UNAVAILABLE
RADIUS_TERM_CALLBACK
RADIUS_TERM_USER_ERROR
RADIUS_TERM_HOST_REQUEST

RADIUS_ACCT_MULTI_SESSION_ID (string)

課金のマルチセッション ID

RADIUS_ACCT_LINK_COUNT (int)

課金のリンク数

RADIUS_VENDOR_MICROSOFT (int)

Microsoft 固有のベンダ属性 (RFC 2548)、 以下のいずれか

RADIUS_MICROSOFT_MS_CHAP_RESPONSE
RADIUS_MICROSOFT_MS_CHAP_ERROR
RADIUS_MICROSOFT_MS_CHAP_PW_1
RADIUS_MICROSOFT_MS_CHAP_PW_2
RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PW
RADIUS_MICROSOFT_MS_CHAP_NT_ENC_PW
RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY
RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES
RADIUS_MICROSOFT_MS_RAS_VENDOR
RADIUS_MICROSOFT_MS_CHAP_DOMAIN
RADIUS_MICROSOFT_MS_CHAP_CHALLENGE
RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS
RADIUS_MICROSOFT_MS_BAP_USAGE
RADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLD
RADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMIT
RADIUS_MICROSOFT_MS_MPPE_SEND_KEY
RADIUS_MICROSOFT_MS_MPPE_RECV_KEY
RADIUS_MICROSOFT_MS_RAS_VERSION
RADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORD
RADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORD
RADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASON
RADIUS_MICROSOFT_MS_FILTER
RADIUS_MICROSOFT_MS_ACCT_AUTH_TYPE
RADIUS_MICROSOFT_MS_ACCT_EAP_TYPE
RADIUS_MICROSOFT_MS_CHAP2_RESPONSE
RADIUS_MICROSOFT_MS_CHAP2_SUCCESS
RADIUS_MICROSOFT_MS_CHAP2_PW
RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER
RADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVER
RADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVER
RADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVER
RADIUS_MICROSOFT_MS_ARAP_CHALLENGE

クイックスタート

どのように使用するの?

  • radius リソースを取得する

  • ライブラリを設定する

  • リクエストを作成する

  • 属性を設定する

  • リクエストを送信する

  • 属性を受け取る

  • radius リソースを閉じる (オプション)

パッケージに含まれている例もごらんください。

このパッケージにはサンプル PHP スクリプトが含まれています。 このスクリプトでは、PAP あるいは CHAP (md5) を使用した radius 認証の 方法を説明しています。Microsoft Radius サーバを使用して認証を行う 場合は、CHAP (md5) を使用することはできません。Microsoft のサーバを 使用する場合は、MS-CHAPv1 あるいは MS-CHAPv2 を使用する必要があります。 しかし、正しいデータを生成するために md4、sha1 および des が必要となる こともあり、これは複雑な手順となります。同梱されている例では すべての認証方式を説明しており、そこには MS-CHAPv1 および MS-CHAPv2 も含まれています。MS-CHAP を動作させるためには、拡張モジュール mcrypt および mhash が必要となります。 バージョン 1.2 以降では、mcrypt 拡張モジュールは必要なくなりました。

連絡先の情報

コメント・バグフィックス・機能拡張・あるいは開発を手伝いたいなどの場合は、 メールを mbretter@php.net に送ってください。Windows 用のバイナリは ここから ダウンロードできます。

目次
radius_acct_open -- 課金用の Radius ハンドルを作成する
radius_add_server -- サーバを追加する
radius_auth_open -- 認証用の Radius ハンドルを作成する
radius_close -- すべてのリソースを開放する
radius_config -- 指定した設定ファイルをライブラリに読み込ませる
radius_create_request -- 課金あるいは認証のリクエストを作成する
radius_cvt_addr -- 生データを IP アドレスに変換する
radius_cvt_int -- 生データを整数に変換する
radius_cvt_string -- 生データを文字列に変換する
radius_demangle_mppe_key -- 変形されたデータから mppe キーを得る
radius_demangle -- データを復元する
radius_get_attr -- 属性を取得する
radius_get_vendor_attr -- ベンダ固有の属性を取得する
radius_put_addr -- IP アドレス属性を設定する
radius_put_attr -- バイナリ属性を設定する
radius_put_int -- 整数属性を設定する
radius_put_string -- 文字列属性を設定する
radius_put_vendor_addr -- ベンダ固有の IP アドレス属性を設定する
radius_put_vendor_attr -- ベンダ固有のバイナリ属性を設定する
radius_put_vendor_int -- ベンダ固有の整数属性を設定する
radius_put_vendor_string -- ベンダ固有の文字列属性を設定する
radius_request_authenticator -- リクエスト認証子を返す
radius_send_request -- リクエストを送信し、応答を待つ
radius_server_secret -- 共有秘密鍵を返す
radius_strerror -- エラーメッセージを返す


radius_acct_open> <qdom_tree
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Radius
SysCo/al - developer [at] sysco[dot] ch 06-Jan-2008 05:39
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.";
    }
?>
andac dot aydin at code64 dot de 07-Jul-2006 08:32
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!
shaun at verticalevolution dot com 27-Apr-2006 08:03
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.
brett at silcon dot com 13-Jan-2006 10: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).
jengo at phpgroupware dot org 23-Oct-2005 08:26
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));
    }
?>

 
show source | credits | sitemap | contact | advertising | mirror sites