yamachan Ajax/.NET/C# メモ

2007-05-03

[C#] synergy 補助ツール mac2ip v1.00

最近、Synergy というフリーの キーボード/マウス の共有ツールを愛用しています。 非常に便利です。 ツールの概要は Yet Another 仕事のツール あたりを参照してください。 日本語版の入手は このへん とか。

さて、ウチはマンション備え付けのインターネット接続を利用していて、ルーターの設定が変更できません。 サーバーとなるマシンの IP Address を固定できず、再起動のたびに調べ、クライアント側に設定する必要があります。 なかなか面倒です。

マシンの MACアドレスは固定ですから、そこから IPアドレス を得られれば自動化ができそうな気がします。 そこで Windows用の rarp 的なツールを探してみたのですが、うまく見つかりませんでした。

探すのが面倒になりまして、勉強中の C# で簡単なツールを作成してみました。 実行には .Net Framework 2.0 が必要です。

mac2ip v1.00: mac2ip_v100.zip

使い方は簡単で、マシンの MAC Address (例:00-11-22-33-44-55) を指定すると、対応する IP Address (例:192.168.20.18) を探して表示してくれます。

mac2ip v1.00 実行例
引数を2つ指定した場合には、環境変数の設定用の出力になります。 バッククォーテーション(`)で実行結果と置換できない Windows でのバッチ処理に組み込むための、簡易的な実装です。

IP Address の検索は、arp テーブルを参照することで実現しています。 見つからない場合はブロードキャスト(例の場合は 192.168.20.255) への ping を実行し、arp テーブルを再チェックします。

それでも見つからない場合には、自分に近いアドレスから順に ping して探していきます。 調査対象の IP Address が、調査元のものより離れている場合には、少し時間がかかります。

さて、僕は以下のようなバッチファイルを作成し、synergy ディレクトリに mac2ip.exe と一緒に置いています。

mac2ip.exe SVR_ADDR 00-11-22-33-44-55 > mac2ip-tmp.cmd
echo start /b synergyc %%SVR_ADDR%% >> mac2ip-tmp.cmd
mac2ip-tmp.cmd

サーバーの IP Address を自動的に検索し、synergy クライアントを起動するバッチです。 "00-11-22-33-44-55" の部分は、synergy サーバーの実際の MAC Address に書き換えてください。

このバッチをスタートアップに登録しておくのも良いでしょう。

【2007/05/06 追記】

synergy は多重起動するとエラーになるみたいですね。 クライアント再起動のために改良したバッチは以下になります。

echo taskkill /F /IM synergyc.exe > mac2ip-tmp.cmd
mac2ip.exe SVR_ADDR 00-11-22-33-44-55 >> mac2ip-tmp.cmd
echo start /b synergyc %%SVR_ADDR%% >> mac2ip-tmp.cmd
mac2ip-tmp.cmd

taskkill コマンドは Windows XP Home には無いようです。 この場合 pskill コマンドを導入して代用するとよいでしょう。

echo pskill -t synergyc.exe > mac2ip-tmp.cmd
mac2ip.exe SVR_ADDR 00-11-22-33-44-55 >> mac2ip-tmp.cmd
echo start /b synergyc %%SVR_ADDR%% >> mac2ip-tmp.cmd
mac2ip-tmp.cmd