0

ユーザーがダウンロードしたバイト値 (tx-bytes、rx-bytes) を、たとえば私のパターン (100MiB、50MiB) と比較したいのですが、これを解決するためのスクリプトを書くことができません。

そのためのスクリプトを書きたい場所: /interface wireless registration-table > tx-rx bytes value (この場所の画像)

4

1 に答える 1

1

あなたが述べているように、/interface wireless registration-tableを使用して登録テーブルを照会できます。これをスクリプトループに入れると、

:foreach wirelessClient in [/interface wireless registration-table find true] do={}

次に、この foreach ループで、id を使用して各クライアントの統計を取得します (ここでは「mac-address」フィールドと「bytes」フィールドの例)。

:local macAddress [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=mac-address];
:local bytes [/interface wireless registration-table get [ find .id=$wirelessClient ] value-name=bytes];

返される「バイト」データの形式は「RX,TX」(つまり、「545124,25422」) です。したがって、RX 文字列を抽出するにはちょっとしたトリックを行う必要があります。「,」文字を探して、このコンマの前の文字列を抽出します。

:local posComma [ :find $bytes "," -1]
:local RXbytes [:pick $bytes 0 $posComma]

次に、そのクライアントが 50M 以上ダウンロードしたかどうかを簡単に確認できます

  :local status "Below 50M";
  :if ($RXbytes > 50000000) do={ 
    :set $status "Above 50M"
  }
  :put "Client: $macAddress $bytes $RXbytes -> $status";

すべてをスクリプトにまとめて実行すると、次のような結果が得られます

[foo@bar] > import test.rsc 
Client: D4:CA:6D:B2:AE:EF 202134,92985 202134 -> Below 50M
Client: 48:9D:24:64:E6:08 8057465,2022134 8057465 -> Below 50M
Client: 2C:56:DC:32:09:F0 3282973,888408 3282973 -> Below 50M
Client: 48:59:29:F6:DF:5D 139664,248984 139664 -> Below 50M
Client: A4:5E:60:EB:AE:33 159890028,12433385 159890028 -> Above 50M

完全な Mikrotik スクリプト マニュアルについては、 http: //wiki.mikrotik.com/wiki/Manual:Scripting を参照してください。

于 2016-04-16T16:06:17.573 に答える