いやー、かなりの期間(約9年半)さぼってました。 何となく仕事の関係で、調べた事を残しておきたくて書いてます。さて何の件かというと、パスワードのクラックにかかる時間です。 仕事の関係でパスワードクラックってどれくらい時間がかかるものなのか調べて…

久々の更新

今回はプログラムではなくって、Wiresharkを使っていて覚えておきたいことを書くことにします。仕事の関係で、Wiresharkのキャプチャデータをもらったのですが、それがなんと1M毎に分割された6000個以上もあるファイル群。 この中から必要なデータを探して処…

FStringクラスの使用方法で

昨日公開したFStringクラスですが、説明文中で使用したサンプルのプログラムで冗長な部分があったので修正します。 /* * 指定したインターフェースに設定されたアドレスを取得する * param : インターフェースの番号(int) * * return : address_list */ addr…

MicroSoftの_bstr_tクラスをシミュレート

最後に日記を書いたあとの作業が、社外秘の情報が多くて日記に書けない内容だったので、ずーっと空いてしまいました。 今回は文字コード変換のロジックをまかなうクラスを作ってみました。 以前作ったプログラムで、UNICODE文字セットでも、MBCS文字セットで…

LinuxでDiskの情報を取得する

久しぶりに日記の更新です。 前回Windows系の情報収集等のプログラミングをやって来ていたんですが、先週はLinux系の情報収集に翻弄されていました。 その第一弾はDisk情報の取得で、WindowsだとWMIを使って比較的簡単に取得できたんですが、Linuxの方は取得…

変換するロケールをjapanese以外にも出来るかな

昨日作ったJavaの文字化けを修正するプログラムですが、一方的にJapaneseしか扱っていなかったので、新しいLocaleをパラメータで渡すように変更しました。 また、クラスの名前もJapaneseだったのをCharSetに、メソッド名もFixCharsetをchangeLocaleに変更し…

NetworkInterface.getDisplayName()で発生する文字化けをチェック

Javaのjava.net.NetworkInterfaceにある、getDisplayName()メソッドで文字化けするために、IPHLPAPIを使って新たにクラスを作るということを以前していましたが、何故文字化けするのか調査しようと思って、簡単なテストプログラムを作ってみました。 Javaのj…

ルート情報を通知するJNIクラスを一部修正しました。

どうもsave_class()関数のロジックでjfieldID等を取得する部分を毎回実行するって言うのが気に入らなくて色々と試して見ました。 まぁ、ロジックが冗長になったのは、Javaから呼び出した時に内部エラーが発生していたので、てっきりC++のロジックの作り方の…

ルート情報の変更を通知するJavaのクラスを作りました。

C++用に作成されたクラスを利用してJavaでもルートの変更通知を受取るクラスを作りました。 Javaのクラスとしては、通知処理を司るRouteCheckクラスと、通知をイベントとして受取るRouteCheckListenerクラスを作りました。 RouteCheck.java package net; pub…

ルート情報が変更されると通知するクラスを作りました

必要にせまられてルート情報の変更を取得したいということで、IPHLPAPIを使ってルート情報の変更を通知するクラスを作りました。 NotifyRouteChange()関数には、同期タイプと非同期タイプの両方あるのですが、今回は非同期モードにしてWaitForSingleObject()…

コンソールを出さないように書き換えました。

やっぱり、Windowsアプリケーションでコンソール出力は邪道だとおもって、これもかなり怠慢ですが、Javaのコンソール出力をキャプチャして、最終的にMessageBoxで結果を表示させるように組み替えてみました。 #include "wjnicall.h" int APIENTRY _tWinMain(…

サンプルプログラムをWindowsアプリケーションで・・・

9/30に作ったJavaアプリケーション呼び出しのサンプルプログラムが結局コンソールアプリケーションだったので、それをWindowsアプリケーションで作り直してみました。 コンソールアプリケーションと違ってWindowsアプリケーションは実行時のパラメータを一つ…

Javaのプログラムを呼び出す

Javaのプログラムを呼び出す方法としては、コンソールからjava.exeを使って実行する方法が殆どで、例えばネットワークインターフェースの情報を取得するプログラムで利用したIfInfoTest.javaだと java -cp c:\java\net\classes net.test.IfInfoTestとして起…

RouteInfoクラスに幾つかメソッドを足しました

折角ルート情報が取れるところまで出来たので、やっぱりルート情報の追加とか削除とかも欲しくなって作ってしまいました。 addRouteEntry(RouteInfo& entry) ルート情報の追加 deleteRouteEntry(RouteInfo& entry) ルート情報の削除 になります。 先ずは、Ro…

ルート情報を取得するクラス(JNI)

折角ルート情報を取得するクラスを作ったので、これをJavaのクラスとしても利用できるようにJNIで実装してみました。 いつもの様に RotueInfo.java package net; import java.util.Vector; public class RouteInfo { private int index = 0; private String …

ルートテーブルの取得するクラスの作成

インターフェース情報を取得できたので、同じIPHELPAPIを使ってルーティング情報を取得するクラスを作ることにしました。 ルーティング情報は、"route print"をコマンド実行して結果の文字列を処理して取得しないとファイルの一覧のようにWindowsのAPIでは取…

幾つかメソッドを追加してみた

Javaの標準にあるInetAddressクラスの中で利用できるメソッドの幾つかをAddrInfoクラスに実装してみました。 実装したのは、 getAllByName(String hostname) パラメータで渡したホスト名(hostname)からIPアドレスリストを取得する。 getByName(String hostna…

ちょっと余談で

ロジック中に ipaddress = String((_TCHAR *)_bstr_t(inet_ntoa(*(struct in_addr *)&pIPAddrTable->table[num].dwAddr))); のように、_bstr_tが多用されているのをみて、「何してるんだ」と思われている方も多いかもしれませんが、 これは使っているプログ…

ネットワークインターフェース情報の取得(5)

ロジックに一部間違いがあったので、Loopbackインターフェース(MS TCP Loopback interface)にアドレスが表示されていなかった。 これは、アドレスをloadInterfaceInfoメソッド中のループで取得するように組み込んでいたのが間違いで、GetAdaptersInfo()関数…

ネットワークインターフェース情報の取得(4)

JavaのNetworkInterfaceにある、getByInetAddress()メソッドを実装するために、C++のIfInfoクラスと、JNIにメソッドを追加しました。 ifinfo.h static IfInfo findInterfaceByAddress(String address); ifinfo.cpp /* * インターフェースの一覧から指定のIP…

ネットワークインターフェース情報の取得(3)

作業を本題のJavaでネットワークインターフェースの情報を取得するロジックに戻して・・・。 単純に一覧にして取得するところまでは昨日のロジックで完了していたので、インターフェース番号からとインターフェース名から情報を取得するメソッドを追加します…

文字化け・・・WMIも修正

文字コードの問題が理解できたので、始めに作ったwmiも作り直してみました。 wmi.cppのgetString(VARIANT *value)メソッドでVT_BSTRを別ロジックにしていたのを、VT_BOOL以外同じロジックに集約しました。 /* * VARIANTデータを文字列値に変換し取得する * p…

文字化け

色々と調べていくと、Javaでの表示とC++での表示で文字表示が一致していないのは、内部的なロケールの処理の問題でした。 IfInfo.cppの中のgetInterfaceList()メソッドとloadInterfaceInfo(IfInfo& if_table)を書き換えて /* * システムで利用可能なインター…

ネットワークインターフェース情報の取得(2)

Javaのクラスは、取りあえずこんな感じにしてみました。 アドレスを持つクラスとして、 AddrInfo.java package net; public class AddrInfo { public static int IPADDR_PRIMARY = 0x0001; // Primary ipaddr public static int IPADDR_DYNAMIC = 0x0004; //…

ネットワークインターフェース情報の取得

JavaのNetworkInterfaceでgetName()メソッドを呼び出してもXP環境では文字化けして正しく表示できないばかりでなく、getByName()メソッドでは、通常Windowsで利用される"ローカル エリア接続"等では探すことが出来ません。 それで、自前でアドレス情報を取得…

SerialNumberの取得(3)

色々やっていると欲が出てくるもので、VistaとXPに関しては昨日のロジックでなんら問題は無かったのですが、今度はWindows2000で表示できないというのが発覚しました。 最近ではWindows2000なんて殆ど見ることもなかったのですが、仕事の関係でWindows2000の…

SerialNumberの取得(2)

Vistaのレジストリ情報とXPでは違っていたみたいで、このロジックでは取得できなくなってしまった。 WmiToolsを眺めていると、 Win32_PhysicalMediaに"SerialNumber"情報が入っていて、欲しい情報が取得できるみたいです。 WmiResult disk_drive = wmi.acces…

HDDのSerianNumberを取得する方法

レジストリキーの HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi以下のTreeに \Scsi Port w\Scsi Bus x\Target Id y\Logical Unit Id z\SerialNumberという値が存在するので、これを利用することにしました。 Wmi32_DiskDriveを使って、次のようなロジックで…

Java Native Interface(4)

マルチスレッドに対応するために、WmiCallをstaticで処理しないよう修正しました。 JavaのWmiCallのメソッドをstaticで無くして、 WmiCall.java package wmi; public class WmiCall { private long handle = 0; static { System.loadLibrary("jniwmi"); clas…

Java Native Interface(3)

久々の更新です。 今日まで夏休みなんですが、どうしても気になっていたので作業することにしました。と言うのは、C++コンパイル時の文字コードを"MBCS"から"UNICODE"にすると漢字が化けてしまったので、これを補正するために修正しました。変更を加えたのは…