PR

さくらインターネットライクなサーバー番号を付ける

XWSS018601_s4

VALUE-DOMAINはIPアドレスとサーバー番号がわかりやすい。

  • s1.coreserver.jp → 202.172.28.2
  • s2.coreserver.jp → 202.172.28.3

参考:「VALUE DOMAIN:バリュードメイン

だが、さくらインターネットはそういう割り振りを行っていない様子。膨大な数の契約をしているわけでもないし、中の人でもないから確かなことはわからないけれど、一部のサーバーの番号割り振りはMACアドレスの末尾と一致するようだ(でも、その法則に一致しないものもあるようで、なんとも言えないのだが・・)。

ちょうど前回、「pc.casey.jp » IPアドレスとMACアドレスを取得する」を書いたので、ついでにそれっぽいものを作ってみた。

スポンサードリンク

レシピ

MACアドレスの取得

まず、MACアドレスを取得する復習。これは前回の記事を参照されたい。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}'

XX:XX:XX:XX:8D:40

2つのオクテットだけ取得

このうち、必要なのは右側の2つのオクテットなので、そのようにする。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6

8D:40

不要文字の削除

さらに、「:」は不要なので削除する。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{printf $5;}' | cut -d: -f5-6 | sed -e 's/://'

8D40

16進数の明示

これでMACアドレスの2オクテットの取り出しが完了した。さらに「0x」を付加して16進数であることを明示する。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{print "0x"$1}'

0x8D40

16進数を10進数に変換

16進数を10進数に変換する。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{print "0x"$1}' | awk '{printf("%d\n",strtonum($1));}'

36160

文字列の加工

printfを使っているついでに文字列を追加する。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{print "0x"$1}' | awk '{printf("www%d.sakura.ne.jp\n",strtonum($1));}'

www36160.sakura.ne.jp

(追記)修正バージョン

awkが連続して登場していたので整理した。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{printf("www%d.sakura.ne.jp\n",strtonum("0x"$1));}'

www36160.sakura.ne.jp

(追記)複数NICの場合

複数NICの場合も実行される。

$ LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{printf("www%d.sakura.ne.jp\n",strtonum("0x"$1));}'
www587XX.sakura.ne.jp
www587XX.sakura.ne.jp
www587XY.sakura.ne.jp
www452XZ.sakura.ne.jp

(追記)エラー

CentOSとUbuntuの幾つかのバージョンを使って試験しているが、そのうち1つでエラーになった。

$ LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{print $5;}' | cut -d: -f5-6 | sed -e 's/://' | awk '{printf("www%d.sakura.ne.jp\n",strtonum("0x"$1));}'

awk: line 2: function strtonum never defined

対処方法

この問題はUbuntuを実行しているシステムで発生した。strtonumは「libbsd-dev」によって提供されているようなのでインストールしたがエラーは発生した。

結局「sudo apt-get install gawk」としたところ「gawk」と「libsigsegv2」がインストールされたようで、この状態では問題が起きなかった。

別のバージョン

あれ?ちょっと違う・・・??オクテットが10進数か16進数かで違うのかな。

(この例だと16進数になってしまっているけれど)「8D:40」だと「www8D40.sakura.ne.jp」となるハズ・・。もう一度言うけど10進数ならね。

# LANG=C /sbin/ifconfig | grep 'HWaddr' | awk '{printf $5;}' | cut -d: -f5-6 | sed -e 's/\([0-9A-F]\{2\}\):\([0-9A-F]\{2\}\)/www\1\2.sakura.ne.jp/i'

www8D40.sakura.ne.jp

ということで作りなおしたのが上記。うーん。このスクリプト、どこで出番があるんだろう・・。サーバー新規構築時のホスト名の自動設定とか?

参考文献

# perlとは正規表現がちょっと違うのね。軽くハマった。

コメント