100% Javaで開発されたSMBクライアント
jNQ™
jNQ™は、SMBファイル共有サービスを、Java1.5以上のプラットフォームをベースとした、あらゆるJavaアプリケーションに提供する、現在入手可能な唯一のJava SMBソリューションです。
ここ からjNQ™のホワイトペーパー(英語版) をダウンロードできます。
NQE™のテクノロジーを元に開発されたjNQ™は、SMBv3.1.1までのすべてのSMBバージョンに対応。jNQ™クライアントは、付属のAPI使って利用できる100% Javaのライブラリ―です。
jNQ™がサポートするSMBv3.1.1のend-to-endの暗号化機能により、開発者たちは完全に安全なファイル共有サービスを実現することができます。SMBv3.1.1仕様のフルサポートを提供する、唯一のJava SMB ソリューションとして、jNQ™はユーザーとその製品、そしてその顧客を、古いSMBバージョンの脆弱性を悪用したWannacryやPetyaといった昨今のサイバー攻撃から守ります。jNQ™が提供するセキュリティは、こういった脅威の後、非常に重要なものとなっています。悪意のある攻撃を防止するには、SMB署名、SMB暗号、Active Directory認証、Kerberos認証、Pre-Logon Integrity(事前認証の整合性)といったSMBv3.1.1のセキュリティ手段が必要不可欠です。
セキュリティに加えて、jNQ™はJavaコミュニティを最新のSMBプロトコルにアップデートさせます。Microsoftは安全性及びパフォーマンスの問題から、Windows10 RS3ではSMBv1プロトコルをデフォルトで無効にしています(2017年9月)このため、SMBv1は最新のWindowsバージョンとSMBでの通信ができません。
jNQ™ のアーキテクチャ
jNQ™ は、付属の完全かつ直観的なAPIで使用できます。
jNQ™の機能
- すべての関連Microsoft仕様に準拠
- NetBIOS、WINS、DNSによる名前解決機能
- セキュリティ:jNQ™が提供する強固なセキュリティシステム:
- LM、 NTLM、 LMv2、 NTLMv2、 NTLMSSP、 SPNEGO 及び Kerberosでの認証
- ドメイン(AD)認証
- SMB暗号化
- SMB署名
- Pre-Logon Integrity(事前認証の整合性)
- ファイル・フォルダ操作:(ファイル・フォルダの)新規作成、オープン、名前変更、情報表示、排他設定
- ファイル操作:読み込み、書き込み、非同期読み込み、非同期書き込み
- ネットワーク・ブラウジング対応
- DFS
- RPC 対応: SAMR、 LSA、 WINREG、 SRVSVC、 DSSETUP (すべて拡張可。一般的なDCERPCフレームワークの使用でより多くのRPCが開発可能)
- 透過的フェイルオーバー(永続的、持続的ハンドルのサポート)
jNQ™のマーケット
- SIEM
- データマネージメント
- サーチ&インデックスサービス
- eDiscovery
- MFTファイル転送
- 情報セキュリティ
- Androidアプリ
jNQ™の特長
- SMBv3.1.1までのすべてのSMBバージョンに対応
- 付属APIで利用可能なSMBクライアント・ソフトウェアライブラリ
- 100% Javaで開発。バージョン1.5以上のどんなJava環境でも動作可能
- 最適化されたReadとWrite
- マルチスレッドと非同期処理による高パフォーマンス
GPLフリーの商用ネットワークスタックjNQ™を採用することで、お客様は貴重なR&Dの時間とお金を節約し、最新のSMBバージョンを手に入れ、中核となる技術にフォーカスすることが可能になります。
jNQ™ サンプルコード
Mount
PasswordCredentials cr = new PasswordCredentials("userName", "password", "domain");
Mount mt = new Mount("IpAddress","ShareName", cr);
Open, read, write and delete file
PasswordCredentials cr = new PasswordCredentials("userName", "password", "domain");
Mount mt = new Mount("IpAddress","ShareName", cr);
Params pr = new File.Params(File.ACCESS_WRITE, File.SHARE_FULL,
File.DISPOSITION_OPEN, false);
File file = new File(mt, "text.txt", pr);
Buffer buff = new Buffer(DATASIZE);
// read DATASIZE from the begginig of the file.
file.read(buff);
// write the buff from the offset DATASIZE.
file.write(buff);
// mark the file for delete.
file.deleteOnClose();
// close the file.
file.close();
Delete file by name
PasswordCredentials cr = new PasswordCredentials("userName", "password", "domain");
Mount mt = new Mount("IpAddress","ShareName", cr);
File.delete(mt, "text.txt");
Browsing
PasswordCredentials cr = new PasswordCredentials("userName", "password", "domain");
Mount mt = new Mount("IpAddress","ShareName", cr);
Directory dir = new Directory(mt, "dir1");
Directory.Entry entry;
System.out.println(DIR + " scan:");
do {
entry = dir.next();
if (null != entry)
System.out.println(entry.name + " : size = " + entry.info.eof);
} while (entry != null);