つまり、Dudeはかなり強力で柔軟なネットワークデバイス監視システムであり、さまざまな種類のサービスの可用性チェックをサポートし、SNMP経由でデバイスに問い合わせることができます。 外部へのイベントメッセージの送信の2種類をサポートしています:電子メールとsyslog。
アラートについてSMSを介して管理者に通知するには、従来の方法で実行できます-つまり、email-smsゲートウェイを経由しますが、この場合、アップリンクが落ちるとシステムがゲートウェイに到達せず、メッセージが送信されない可能性があります。 一方、私は赤白オペレーターの外のどこかからHuawei E220モデム、条件付きで無制限のSMSを備えた企業SIMカード、およびThe Dudeが立っていたマシン自体を、Ubuntuの下でワインを通して動作させました。
そのため、モデムをDudeがワインを実行しているのと同じマシンに接続します。 Ubuntuは元気に定義しています:
Bus 003 Device 002: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
ただし、システムはモデムをUSB CD-ROMとして認識します。 このモードでは、モデムはデフォルトで動作し、Windowsの下にfireと制御プログラムを配置してモデムモードにするため、論理的です。 ここで、usb-modeswitchパッケージが役立ちます。 インストールしてコマンドを実行します:
echo 'SUBSYSTEM==»usb», SYSFS{idProduct}==»1003″, SYSFS{idVendor}==»12d1″, RUN+=»/lib/udev/modem-modeswitch –vendor 0x12d1 –product 0×1003 –type option-zerocd»' | sudo tee /etc/udev/rules.d/45-huawei220.rules
その後、モデムを切断して再接続する必要があります。 彼が目的のモードに切り替えたことを確認します。
~# ls -l /dev | grep ttyUSB lrwxrwxrwx 1 root root 7 2011-12-30 15:00 gsmmodem -> ttyUSB0 crw-rw—- 1 root dialout 188, 0 2011-12-31 15:09 ttyUSB0 crw-rw—- 1 root dialout 188, 1 2011-12-30 15:00 ttyUSB1
ttyUSBポートが表示されない場合は、さらにコマンドを実行する必要があります。
~# modprobe usbserial vendor=0x12d1 product=0×1003
これですべてが整いました。 SMSメッセージを処理するには、gnokiiを使用します。 インストール、構成:
[global] port = /dev/ttyUSB0 model = AT initlength = default connection = serial use_locking = yes serial_baudrate = 115200
SIMカードからPINリクエストを削除してください。 私たちはチェックします:
~# gnokii --identify GNOKII Version 0.6.29 IMEI : *************** Manufacturer : huawei Model : E220 Product name : E220 Revision : 11.117.10.00.184 ~# gnokii --getnetworkinfo GNOKII Version 0.6.29 Network : MTS ( ) Network code : 250 01 LAC : 0000 (0) Cell id : 00000000 (0)
そのため、gnokiiはモデムを識別し、ネットワークを認識します。 SMSを送信しようとしています:
~# echo test | gnokii --sendsms +7********** GNOKII Version 0.6.29 Send succeeded with reference 40!
SMSが意図したとおりに配信されれば、すべてが機能します。 では、The Dudeでたくさんのgnokiiをセットアップしてみましょう。 彼女は、私が言ったように、2つの方法でイベント通知を送信できます:電子メールまたはsyslogを介して。 2番目の方法では、外部IPと、UDPを介してクリアテキストで送信される通知のポートを設定できるため、これを使用します。 私たちのタスクは、The Dudeが送信するポートをリッスンし、これらのメッセージをgnokiiに送信することです。 これを行うために、perlで小さなスクリプトを作成しました。
#!/usr/bin/perl -w use strict; use IO::Socket; my($server, $newmsg, $max_len, $server_port); $max_len = 160; $server_port = 12345; $server = IO::Socket::INET->new(LocalPort=>$server_port, Broadcast=>0, Proto=>"udp") or die "Error starting UDP Server on port $server_port: $@\n"; print "UDP Server started on port $server_port\n"; $newmsg = ""; while($server->recv($newmsg,$max_len)){ if($newmsg){ #my($port, $ipaddr) = sockaddr_in($server->peername); print "Received: $newmsg \n"; open(GNOKII, "| gnokii --sendsms +7**********») || die "Starting gnokii failed: $!\n"; print GNOKII $newmsg; close(GNOKII); } } die "recv: $!";
コードからわかるように、スクリプトはポート12345でリッスンし、そこに到着するすべてのメッセージを160文字(SMSメッセージの最大長)以下でgnokiiに送信します。
Dudeで、新しいsyslogタイプのアラートを作成し、モデムが接続され、スクリプトがIP(私の場合は同じサーバー)として実行されているマシンのIPアドレスを指定し、スクリプトで指定されたポートと同様のポートを選択します。
「テスト」をクリックします。 すべてが正しく行われると、The Dudeからのテストメッセージがスクリプトに示されている番号に送信されます。
更新する 素材に関心がある場合は、chan_dongle経由でAsteriskに接続された3Gモデム経由でSMS通知を送信できるようにするスクリプトの変更について説明します。