Monthly Archives: 3月 2009

許可されたICMPタイプから見えるOSタイプ

“Xprobe は,「OS フィンガープリント」を利用する。OS フィンガープリントとは,OS の指紋(fingerprint),つまり OS を特定するための特徴を指す。OS フィンガープリントは,TCP/IP のスタック構造の違いに起因する。具体的には,パケットを生成する際の,各ヘッダー(TCP や IP など)内の,各フィールド値の設定規則の違いなどである。ベンダーによって異なる理由は,それぞれで RFC(Request for Comment) の解釈が違うためである。”

ICMPを使って対象サイトのOSを特定する「Xprobe」:ITpro
xprobe というコマンドで対象の OS を特定できるらしい。が、ICMP を利用している関係上、最近の Windows じゃ難しそう。実際うちの Windows Vista Home をスキャンしてみたところ特定できなかった。最近の OS はファイアウォールが標準ですからねー。
ついでに nmap の -O オプションでも OS が特定できるらしいのでやってみた。Vista はやっぱだめ。Linux もカスタムの iptables ルールを適用してるとだめですね。当たり前かー。古いツールだから仕方がないよね。引用元も 2001 年のもの・・・。
で、何でこのページを見たかというと、iptables -p icmp -h の出力でいろんな ICMP のタイプを見たからです。どれを iptables で許可しようかなぁ、と悩んでぐぐったら出てきました。
というわけで iptables のルールはこんな感じにしてみました。

Chain ICMP (1 references)
target     prot opt source               destination
ACCEPT     icmp --  anywhere             anywhere            icmp echo-reply
ACCEPT     icmp --  anywhere             anywhere            icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere            icmp time-exceeded

ルータのアドバタイズ系は sysctl.conf の accept_source_route とか rp_filter とかを設定していれば受け入れもいいと思うけど、まぁいいか。ちなみに普通は echo-replay、echo-request だけでいいと思う。番号で言うと 0、8 です。

Gentoo Linuxの日本語ターミナル

“Xftを使用し、Unicodeをサポートしているターミナルエミュレータを見つけるのはもっと大変です。 Konsoleとgnome-terminalは別として、Portageでの最良の選択肢は、 x11-terms/rxvt-unicode、 xfce-extra/terminal、 gnustep-apps/terminal、 x11-terms/mlterm、 または、unicode USEフラグ付きでビルドされ、uxtermとして起動されたx11-terms/xtermがあります。”

Gentoo Linux ドキュメント — GentooでのUTF-8の使用方法
Gentoo Linux で日本語環境を作っていて、ターミナルを日本語にするのにちょっと困った。色々パッケージを入れたり、フォントを入れたりしたがうまく行かなかった。会社の同僚に “環境変数じゃねぇか” ってアドバイスを受け、方向転換し、解決しました。
結局、悪かったのは環境変数として LANG=ja_JP.utf8 とか LC_ALL=ja_JP.utf8 を設定していなかったため、表示が文字化けしていたみたいです。構築してから頑なに C ロケールで進めていたため (というか面倒だから?) でした。
システムのロケールとして設定するなら、Gentoo の場合 /etc/env.d/02locale に設定するのが進められていますが、自分は ~/.bash_profile に設定しました。偏屈だなぁ、と思いつつも英語ネイティブも使うことを考えたらそっちの方がいいと思う。まぁ、自分のデスクトップは自分専用ですが・・・。
まとめると、Gentoo でさえ日本語デスクトップの設定は環境変数だけでいいってことですね。恵まれた時代になったもんだ。

CentOS 5.2のカーネルコンパイルでエラー

“ぐぐった結果を斜め読みすると、SMP回りが原因っぽいので、SMP を有効にする。cryptoとSMPにどういう関係があるのかは知らない。

馬写真日記(2008-06-29)
CentOS 5.2 のカーネルをコンパイルしようとして

  CC [M]  crypto/chainiv.o
crypto/chainiv.c: In function ‘chainiv_givencrypt’:
crypto/chainiv.c:63: error: implicit declaration of function ‘local_bh_disable’
crypto/chainiv.c:77: error: implicit declaration of function ‘local_bh_enable’
make[1]: *** [crypto/chainiv.o] エラー 1
make: *** [crypto] エラー 2

というエラーにぶちあたった。引用先の人が言ってるように、関係は分からないが SMP を有効にすると通った。
で、”implicit declaration” ってのは “暗黙の定義” って感じだろうけど、なんなんでしょうね。ってことで調べてて、このページを読んだら思い出しました。

“implicit declaration of ‘printf’ は「ソースファイル中に printf 関数の宣言が存在しない」という意味ですが”

Wataru
そだそだ、C では変数とか関数をあらかじめ定義しなきゃならなくて (ここは常識ですよね)、それを怠った場合には暗黙のうちに定義されていたことにしてくれるんだっけ。もちろん、そんなプログラミングは奨励されるはずもなく、エラーになって当然なんですね。

“-Wimplicit-function-declaration,  -Werror-implicit-function-declaration  関数が宣言される前に使われている場合に警告またはエラーを出します”

フリーソフトウェア徹底活用講座(3)
でも、ちょっと分からないのが、エラーメッセージにあった local_bh_* の関数。該当の行では使われてないのよね。その行にあるのは spin_unlock_bh という関数のみ。呼び出した関数内で使ってるのかな。それなら呼び出された関数のほうがエラーに出てきそうな気がするけど、C やってないからわかんねーや。
たぶん、エラーになってた関数が SMP がらみのヘッダで定義されてて、うまく行ったんでしょう。動いてくれてるのでオッケー。
ちなみに local_bh_enable とかいう関数はソフトウェア割り込みに関する関数のようです。

“これまで、割り込みの帰りと、カーネルからユーザ空間に帰るところ(でスケジューラが割り当てたら)を見てきました。この他に、softirq 一般として local_bh_enable, そしてネットワークプロトコルスタック独自の呼び出しがあります。
今日は local_bh_enable について。
関数の名前ですが bh は Bottom Half の略です。実装のセマンテックスを変えて(softirq と名前を変えて)きた歴史的な流れがあって、ここは bh と残っています。
local_bh_enable は local_bh_disable と組合せで使われます。 “

g新部 code日誌(2006-05-20)

Windows Vistaの状態をSNMPで取得する

“Windows Vistaの場合、若干名称が変わっており戸惑うかも知れないが、
「コントロールパネル」⇒「プログラムと機能」⇒「Windowsの機能の有効化または無効化」
の中にある「SNMPの機能」を有効にすれば良い。”

Windows/SNMP Service – PukiWiki Plus!
Windows Vista で SNMP エージェントを起動する方法。これを設定したら勝手に立ち上がってくると思うけど、サービスの管理で起動を確認してみましょう。
コミュニティとかの設定はサービスのプロパティで。最初は何も設定されていないので、何も取れません。取得もとの IP と読み取り専用コミュニティ public でも追加しておきましょうか。
デフォルトでインタフェースの状態とかプロセスの状態が取れます。IANA に登録されている標準的な OID の値を取得したければ、こちらをお試しあれ。
snmp-informant.com