忍者ブログ

Stay at Stream

とりあえずブログ2nd 080207開設

[43]  [42]  [41]  [40]  [39]  [38]  [37]  [36

[PR]

2024/04/25 (Thu)

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Heuristically programmed ALgorithmic computer type 9000

2010/11/03 (Wed)

"そうだ、珈琲飲もう。ちょうど朝淹れたのの残りがあったはずだ"
"カップに注いでレンジ3分、、と"
{3分後}
"今レンジの音がしたような?気のせいか。"
"あー、そうだ珈琲飲もう。、、、あれ、カップがない。"

アーサ・C・クラーク の 2001:a space odyssey を読んでる。そろそろ終わる。
映画も見たこと無いけど、原作は読んどこうと思って読んでる。でも前置きな解説を読む限りだと、映画も小説も原作らしい。ある種メディアミックス的なものようぬ、1971年にメディアミックスという考え方があったかどうかは知らないけどね。

んで、読んでてとりあえずイライラしたとこ一点。なんで、誰もHAL9000の気持ちを考えてあげない。あの船に一人でもIT系技術者、、、多分あの本だと「コンピュータ専門技師」とか書かれるのかな、が乗ってればあんな惨劇にはならなかったはずだと思う。"9000型コンピュータ萌え~”とか、そういうある意味人間としては終わりかけちゃってる人がいても良かったと思う。 まぁそのかわり、話の根底とか全部崩れるけどね。
ついでに言っておけば、HALという名前も可哀想すぎだ。International Business Machinesとか、当時は調子乗りすぎだったんじゃね?とか、、巷の中国人がインタビューに答えるっぽく言ってみる。


昨今、うちで実装してた「IPアドレス通知スクリプト」が不調になった。自宅サーバを持っているが、社内の人とかx3 が恐くてドメインは持てない。
そこでIPアドレス直打ちによるアクセスになるわけだけど、PPPoEによるプロバイダとの接続(一般的な家庭用インターネット環境)なため使用するグローバルIPアドレスはプロバイダからDHCPによって割り当てられることになる。通常ルータとかで繋ぎっぱなしにすればアドレスは変わらないようだけど、それが保証されているわけじゃない。向こうの都合とかでDHCP再起動とかしても全然いいわけで、結局いつIPアドレスが変わるのか今何使ってるのかはその都度調べないとわからない。
そんなところで、使ってたのがグローバルIPを通知してくれるWEBサイト。リンクのページだと、いかにもコマンドとかぬかしてるが、おもいっきりwgetしてるだけだったりする。つまりwgetしてる先のwebページはhttp要求のヘッダからアクセス元情報をそのまま返してるだけのCGI、、、だと思う。どちらにせよ、外の自分が持たないwebページ頼みになる。
んで最近そのページ、正確にはwebサーバだと思うが一時アクセス出来ない状態になっていた。ということはつまりそれを使ってた通知用スクリプトも不調となったわけ。現在は復旧してるらしいけど、何時までも不安定なソースは使えないということで、前々から考えてたルータからSNMPでデータ抜いてくるという方法に切り替えてみた。


まずはルータの設定、使用ルータはお馴染み{YAMAHA RTX1000}、、(最近1100いいなとか思う。ヘブォッッ)

   snmp host <許可ホスト> <コミュニティ名>
   snmp yrifppdisplayatmib2 on
   snmp display ipcp force on

基本的にSNMPに必要なのは最初の1行だけ、アクセスを許可するホストとコミュニティ名を設定する。
ただし、今回欲しいのはpppoe接続で使うグローバルIPアドレス。そのため2行目の設定でpp接続の情報を取得できるようにする(RTXではpppoe接続はppを割り当てて作るからね)。これでIPが引っ張れるかと思いきや、これだけで取得できるIPアドレスの情報は ’ipcp’ な感じになってしまう。これは使用しているpppoeが接続を作る際に対向先から使用するIPを割り当てられる使用になっていて、その設定がされているという意味。で3行目、そんな仕様のpp接続でも、そういう部分を今使ってるIPアドレスに強制的に変換して出力するようにする設定となる。
 

これでルータから使ってるグローバルIPアドレスは採れるようになったはず、んで情報をくれそうなMIBだが分かるわけがない。ググっても出てこなさそうだし、公式にはmibファイルくらいしかなさそうだし。ということでsnmpwalk で片っ端から全部リストして今のグローバルIPアドレスで引っかかるやつを探すというお約束の手段を使用。結果以下のコマンドでIPアドレスが引っ張れそうだと判明した。

   $ snmpgetnext -v 1 -Ov -c <コミュニティ名> <ルータのアドレス> ipAdEntAddr

この ipAdEntAddr てのは機器にエントリされたIP情報のIPv4アドレスをくれるMIBらしい。(ってなんで調べて出てくるのがciscoのページだけ。)ということでたまたま最初のエントリが今回は pp(1) に割り当てられたIPアドレス、つまりグローバルIPアドレスとなったワケ。よって snmpgetnext をつかって最初のエントリだけ、さらに -Ov オプションで得られた結果のみを出力するという具合。
 そういうことで、このエントリで snmpwalk すると pp(1) に割り当てられたIPアドレスと、LAN1に割り当てたプライベートIPアドレスが出てくる。多分LAN2も作ってアドレス割り当てるとこの下に出てくるんだと思う。
(ん、、でも今思えばエントリの名前そのものにIPアドレスが使われてたな、、その名前順で出てくるのだとしたら、グローバルIPアドレスの第1オクテットが192を超えた瞬間にこの方法だめじゃん、、とか今思った)

さて、次々。んではこれを使ってIPアドレスを通知してくれるスクリプトを作ろうということ。以前作った仕掛けをほぼそのまま使って下のような感じにしてみた。

   #!/bin/sh
   PATH=/bin:/usr/bin
   PREFIX=/usr/local/lib
   AD_FILE=$PREFIX/NowAddress
   PID=/tmp/chip.pid
   if [ -f "$PID"  ];then exit 1;fi
   touch $PID
   if [ ! -f "$AD_FILE"  ];then
          touch $AD_FILE
   fi
   ADDRESS=`cat $AD_FILE`
   RESULT=0
   snmpgetnext -v 1 -Ov -c <コミュニティ名> <ルータのアドレス> ipAdEntAddr > $AD_FILE
   RESULT=$?
   if [ $RESULT != 0 ];then
          echo $ADDRESS > $AD_FILE
          exit 1
   fi
   if [ "`cat $AD_FILE`" != "$ADDRESS" ];then
          ADDRESS=`cat $AD_FILE`
           echo "address change to $ADDRESS"
   fi
   rm $PID

見ればわかるから、スクリプトの解説とか要らないよね?アドレスをファイルに保存して以前と変わってれば通知。つまり最後にechoしてるところでメールとかしてあげるといい感じ。んでこれをcronに10分置きくらいで走らせるようにしてやれば実装完了と。
とりあえず、問題なさそう。と思ったらナカハラに見づらいって言われた。ということでIPアドレス部分のサニタイズとかしますか。(サニタイズって程で厳密でもないかな)
え?SNMPがわかりませんて?ググレカs(ry  ヨドバシで1万円代くらいで買えるルータ使ってる人とかは知りません。アーアー聞こえなーい。

PR

この記事にコメントする

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字

この記事へのトラックバック

この記事にトラックバックする:

"こだま"でしょうか。いいえ、ケフィアです。 HOME 1週間きりまして

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

プロフィール

HN:
INCLUDE17
性別:
非公開

アクセス解析



忍者ブログ [PR]
template by repe