2012年11月28日

そろそろDHCPリースクエリーについて語っておくか(RFC4388 DHCP Lease Query Client for Java)

最近DHCPについて熱く語っている僕ですが、実際のところDHCPに真っ直ぐな情熱がある訳では無いんです。

だって・・・地味でしょう・・・ だから結構アバウトな理解で、例えばDHCPリースクエリーなんて言われても、適当に理解してたんですけど、「光陰矢のごとし」ですから一度具体的に語ってみようかと。

DHCPリースクエリーを簡単に言えばDHCPサーバーへIPアドレスのリース状態・情報を問い合わせる為のインタフェースで、運用ではクライアント(端末)が信頼出来るものか否かを判断する為に利用することが多いようです。

ID-10067168
  続きを読む
Posted by netbuffalo at 01:00Comments(0)TrackBack(0)

2012年11月19日

Javaアプリケーションでパイプ(|)を経由して入力データを受け取る方法

僕はJavaが一番得意な言語でLinuxサーバー上で仕事をすることが多いタイプのエンジニアな分、CLIで動くちょっとしたプログラムをJavaで作ることが多いんですが、Linxu(UNIX)、CLI(シェル)といえば小さなコマンドとパイプの文化。

a0006_001047

Java+パイプでデータを受ける方法ってどうするんだっけ?(mainメソッドでString args[]として受け取るの?)と少しモヤモヤしてたんですが、先日 nabokov さんがAmazon Web Service / GlacierデータをアップロードするCLIツールをJavaで実装し、パイプ経由でデータを受けっていたことを思い出し、GitHubにあるソースを見ながら、これを機会に整理してみることにしてみました。
  続きを読む
Posted by netbuffalo at 20:30Comments(0)TrackBack(0)

2012年05月09日

Javaで使えるIPアドレス管理ライブラリ

JavaでIPアドレスからネットワーク、ブロードキャスト・アドレスを算出したい、あるIPアドレスが指定したネットワークに含まれるか否かを判断したい、こんな時どうしますか?

僕だったら、既に誰かが作った便利なライブラリ(API)が存在するはず、ということでまずは探してみます。
ところが意外なことにこういった用途に使えるJavaライブラリは簡単には見つかりません。

今日はこんな希望を叶えてくれる幾つかのクラス(OpenSolaris/CDDLライセンス)をご紹介します。
  続きを読む
Posted by netbuffalo at 03:27Comments(0)TrackBack(0)

2012年02月06日

[簡単修復]REGZAの録画ハードディスクが壊れた?と思ったら

以前に”REGZA USBハードディスクの傾向と対策”を運営されている竹田さんとハードディスクの録画データを簡単にコピーするアプリケーションを作ったのですが、それがご縁でREGZA用ハードディスクの簡単修復ツールも作ってみました(共同制作第二弾!)。

どうも最近、録画した番組が再生できない、録画番組の一覧が表示できない、というような方がいたら是非試してみて下さい。

スクリーンショット - 2012年02月05日 - 23時35分25秒
  続きを読む
Posted by netbuffalo at 01:28Comments(11)

2011年07月29日

CISCO VPN Client GUI For Ubuntu(v 1.0)を作ってみました

先日Ubuntuでのインストール、利用手順を整理したCISCO VPN Clientですが、やっぱり残念なのは操作画面(GUI)が無いことですね。僕だけが利用するなら問題無いのですが、それ自体は目的では無いという人(一般ユーザ)にはCLIからコマンドを直接実行するのは難しい場合があります。僕自身、管理者として都度説明するのも手間ですしね。
ということでJavaでCISCO VPN Client 用デスクトップ・アプリケーション(C-VPN Client)を作ってみました。

あくまでも操作専用画面なので事前にCISCO VPN Clientがインストールされている必要があります。
  続きを読む
Posted by netbuffalo at 19:07TrackBack(0)

2011年07月11日

JavaでSSHサーバを動かそう(Apache MINA/SSHD)

ふと、Javaだけで動くSSHサーバってあるんだろうか?と思い探してみたところApache MINAプロジェクトからSSHDとして提供されているのを見つけました。

15)


バージョンが0.5ですからまだベータ版といったところでしょうか。
早速使ってみましょう。

ダウンロードしたzipファイルを解凍し、libフォルダに含まれる以下のjarをクラス(ビルド)パスに含めます。

・mina-core-2.0.1.jar
・slf4j-api-1.4.3.jar
・slf4j-simple-1.4.3.jar
・sshd-core-0.5.0.jar
・sshd-pam-0.5.0.jar

 次にSSHサーバのサンプルコードです。

  SshServer sshd = SshServer.setUpDefaultServer();
  sshd.setPort(9191);

  //
  // It's usually a good idea to give the host key generator a path,
  // so that if you restart the sshd server, the same key will be
  // used to authenticate the server.
  //
  sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

  // auth object
  PasswordAuthenticator myAuthenticator = new MyPasswordAuth();
  sshd.setPasswordAuthenticator(myAuthenticator);
  
  //
  // That's the part you will usually have to write to customize the SSHD server.
  // The shell factory will be used to create a new shell each time a user logs in.
  // SSHD provides a single implementation that you can use if you want.
  // This implementation will create a process and delegate everything to it,
  // so it's mostly useful to launch the OS native shell.
  //
  //sshd.setShellFactory(new ProcessShellFactory(new String[] { "cmd", "/c" }));
  sshd.setShellFactory(new ProcessShellFactory( new String[] { "/bin/sh", "-i", "-l" }));
  
  //
  // SSHD provides a CommandFactory to support SCP that can be configure
  //  in the following way:
  ///
  sshd.setCommandFactory(new ScpCommandFactory());
  
  try {
    sshd.start();
    System.out.println("pure java sshd server started.");
  } catch (IOException e) {
    e.printStackTrace();
  }

1行目でSshServerオブジェクトを生成し、ポート番号に9191ポートを設定しています。
13行目で認証用オブジェクトを設定していますが、これはPasswordAuthenticatorインターフェースを実装したクラスを用意します。今回は次のようなMyPasswordAuthクラスを用意しました。

public class MyPasswordAuth implements PasswordAuthenticator {

  public boolean authenticate(String username, String password, ServerSession session) {
    System.out.println("username: "+username+", password: "+password);
    return true;
  }

}

authenticateメソッドに渡されるユーザID、パスワード、ServerSessionを使って認証しますが、この例ではとにかくture(認証OK)としています。

23行目でSshServerに設定しているProcessShellFactoryオブジェクトがサーバ側でコマンドを実行しており、内部ではProcessBuilderを使って外部コマンドを呼び出しています。

29行目ではSCP用のファクトリ・オブジェクトを設定しています。

ここまで出来たらSSHサーバを起動して、クライアントから接続してみましょう。

$ ssh -p 9191 username@localhost
The authenticity of host '[localhost]:9191' can't be established.
DSA key fingerprint is 09:8b:d5:47:5d:c6:3a:c3:05:41:23:85:ad:f5:d0:fc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:9191' (DSA) to the list of known hosts.
username@localhost's password:
sh: no job control in this shell

sh-3.00#  

確かにログインできます。但し、余分な空白が入ったり、対話的なコマンドは実行出来ないなどの制限があります(残念・・・)。
このあたりはサンプルコード23行目で設定しているProcessShellFactoryクラスを独自のクラス(Factory<Command>インタフェースを実装したクラス)に置き換えることで多少は改善しそうですが、僕は改行コードの動きが改善できず途中で諦めました。

これに対してSCPは特に問題無く動作します。性能面でも僕の環境ではネイテイブのSFTP/SCPツールと同等のスピードが出ました。さらにWidnows上で動作させた場合でもコピー可能です。

$ scp -P 9191 ~/Downloads/file.zip username@192.168.0.20:c:/tmp/tmp2.txt
username@192.168.0.20's password:
htmlparser1_6_20060610.zip                                                            100% 4244KB   2.1MB/s   00:02

リモート・シェル用途で使うにはきついですが、リモートのWindows PCにSCPでファイル転送したい場合には使えるかもしれませんね。



実用SSH 第2版―セキュアシェル徹底活用ガイド
Daniel J. Barrett Richard E. Silverman Robert G. Byrnes
オライリー・ジャパン
売り上げランキング: 219605


Java ネットワーク プログラミング 基礎からわかる 完全入門
永嶋 浩
技術評論社
売り上げランキング: 370959
  
Posted by netbuffalo at 18:55TrackBack(0)

2011年05月27日

実践SNMP+Java MIBテーブルのフェッチ(TableUtils)

今日はSNMP4Jを利用したMIBテーブルのフェッチ(取得)について解説します。

MIBテーブルとはデータベースのテーブルと同様に行と列で管理されたMIBオブジェクトの集まりです。

MIBテーブルを理解するにはMIBブラウザを使って視覚的に捉えることも重要です。ここではiREASONING社のMIBブラウザ(無料)を使って説明します。
  続きを読む
Posted by netbuffalo at 18:58TrackBack(0)

2011年03月25日

実践SNMP+Java-非同期ポーリング

今日はSNMP4Jライブラリを利用した非同期ポーリング(SNMPリクエストの送受信)について紹介します。

SNMP4Jでは同期(Synchronous)又は非同期(Asynchronous)なSNMPリクエストの送信が可能です。

非同期でリクエストを送信する場合、Snmpクラスに用意されているsend(PDU pdu, Target target, java.lang.Object userHandle, ResponseListener listener) メソッドを利用します。
  続きを読む
Posted by netbuffalo at 19:07TrackBack(0)

2011年01月31日

RMIとXML-RPCの性能比較

分散オブジェクト間で通信をしたい時、その基盤技術には何を利用しますか?

目的によってどちらの手段を選択するかは変わりますが、その前に性能差も気になりますよね。
今日は、XML-RPCとRMIの相対的な性能差(時間)について整理したいと思います。
  続きを読む
Posted by netbuffalo at 13:38TrackBack(0)

2010年12月20日

JavaでSFTP

前回のSSHに続きOrion SSH2を利用してJavaでSFTPします。具体的にはSFTPでリモートホストへのPUTを例に説明します。

まず注意点ですが、Orion SSH2にはGanymed -> Trileadという歴史がありますが、Trilead SSH-2 build211以前にはバグがあり、正常に動作しません。

-- Trilead SSH-2 for Java build211, 2007-10-28: --
Fixed the write() method in the SFTP code.
Unsatisfiable preconditions stopped the method from
writing any bytes. As stated in the documentation,
the SFTP code is still experimental.
Thanks to Andreas Pueschel.

Orion SSH2を使う限り反映済みですが、Orion以外のライブラリを使っている場合は注意下さい。
  続きを読む
Posted by netbuffalo at 19:08Comments(0)TrackBack(0)

2010年12月16日

JavaでSSH

JavaでSSHしてみたいと思い、色々とライブラリを探してたのですが最終的にorion-ssh2に落ち着きました。
 
理由は、ライセンス形態がBSD(ライク)だったから。
 
もともとはGanymed SSH-2として始まり、途中trileadとなり、現在はorion-ssh2(build 214)としてプロジェクトが続いています。

ダウンロードしたorion-ssh2-214.jarにクラス・パスを通せば準備完了です。
  続きを読む
Posted by netbuffalo at 18:00TrackBack(0)

2010年07月28日

実践SNMP+Java - Trap/Inform Receiver

SNMP4Jを利用したSNMP Trap/Informの受信について説明します。

そろそろ気がつかれている方もいるかもしれませんが、SNMPv3については説明してきませんでした。

僕自身、実践で利用する機会・ニーズが少ないのが理由です。

SNMP Trap/Inform受信についてもSNMPv3は、多分動くだろう、という程度です。
時間が出来たらv3についてもまとめるつもりです。
  続きを読む
Posted by netbuffalo at 19:09TrackBack(0)

2010年07月26日

実践SNMP+Java - SNMP Set

SNMP4Jを利用したSNMP Setについて説明します。

その名の通りSetを使うとSNMPを使ってエージェントの値を設定する事が出来ます。
  続きを読む
Posted by netbuffalo at 20:06TrackBack(0)

2010年07月23日

実践SNMP+Java - SNMP Inform

SNMP4Jを利用したSNMPv2 Informの送信について説明します。

これまでに説明したSNMPv1 Trap, SNMPv2 Trapを使うと、SNMPマネージャにアラームを通知することが出来ますが、Trapの場合、それだけではマネージャ側が受信したか否かを送信(SNMPエージェント)側で知ることは出来ません。

ですから、重要なアラームであるほど通知先(相手)が受信したことを知りたい、という実践(運用)上の矛盾が生じます。
  続きを読む
Posted by netbuffalo at 14:49TrackBack(0)

2010年07月22日

実践SNMP+Java - SNMPv2 Trap

SNMP4Jを利用したSNMPv2 Trapの送信について説明します。
 
SNMPv2トラップではv1に比較し、PDUフォーマットがGet/GetNext/Setリクエストと統一されています。
  続きを読む
Posted by netbuffalo at 13:04TrackBack(0)