SMB

SMB2

SMB3

CIFS

Client Java SMB / SMB2 / SMB3

jNQ™

jNQ™ apporte le partage de fichiers SMB à toute application Java basée sur la plate-forme Java 1.5 ou supérieure.La bibliothèque client jNQ™ est l'option de remplacement prioritaire pour la bibliothèque JCIFS lorsque SMB2 et SMB3 sont nécessaires. jNQ™ est la seule solution Java assurant la prise en charge complète pour Android et tout outil basé sur Java.

Vous pouvez télécharger le livre blanc sur jNQ™ ici.

Basé sur la technologie NQE™, jNQ™ est la seule solution Java SMB actuellement disponible qui prend en charge tous les dialectes SMB, jusqu'à la dernière version de SMBv3.1.1. jNQ™ Client est une bibliothèque pure Java disponible via son API.

Les développeurs Java peuvent désormais assurer une sécurité complète du partage de fichiers grâce au cryptage de bout en bout proposé par le dialecte SMB 3.1.1. La sécurité offerte par jNQ™ est devenue essentielle après les cyber-attaques de Wannacry et Petya, qui ont profité de la vulnérabilité des anciens dialectes SMB. L'utilisation de SMB 3.1.1 est essentielle pour prévenir de telles attaques malveillantes au moyen de la signature de messages, du cryptage, des authentifications Active Directory et Kerberos et de l'intégrité avant la connexion.

En plus de la sécurité, jNQ™ présente les derniers protocoles SMB à la communauté Java. L'utilisation des nouvelles versions SMB est devenue d'autant plus importante aujourd'hui pour les développeurs et leurs utilisateurs que Microsoft a désactivé SMBv1 dans les versions Windows modernes à partir de septembre 2017. La communauté Java peut maintenant se connecter à n'importe quelle machine Windows simplement en utilisant jNQ™

Visuality Systems jNQ Video

Architecture jNQ™

jNQ™ est disponible par le biais d'une API complète et intuitive:

JNQ ™: A Pure Java SMB Client Architecture

 

Fonctionnalités jNQ™ :

  • Conforme à toutes les spécifications Microsoft pertinentes
  • Fonctionnalité de résolution des noms au moyen de NetBIOS, WINS, DNS
  • Sécurité : jNQ™ est un système étroitement sécurisé comprenant :
  • Authentification avec LM, NTLM, LMv2, NTLMv2, NTLMSSP, SPNEGO et Kerberos
  • Authentification de domaine (AD)
  • Encryptage SMB
  • Signature des messages
  • Intégrité avant la connexion
  • Opérations sur les fichiers et dossiers : créer, ouvrir, renommer, info, définir l'accès exclusif
  • Opérations sur fichiers : lecture, écriture, lecture async, écriture async
  • Prise en charge de la navigation réseau
  • DFS
  • Prise en charge RPC : Un cadre générique DCERPC peut être utilisé pour développer davantage de RPC.
  • Basculement transparent (prise en charge des identifiants persistants et durables)

 

Marchés jNQ™ :

  • SIEM
  • Gestion de données
  • Recherche et indexation
  • eDiscovery
  • MFT
  • Informations sur la sécurité
  • Applications Android

Éléments-clés jNQ™ :

  • Prend en charge tous les dialectes SMB jusqu'à SMB 3.1.1
  • Bibliothèque de logiciels client SMB disponible via son API
  • Écrit en Java pur, jNQ™ fonctionne dans n'importe quel environnement Java, à partir de 1.5
  • Lecture et écriture optimisées
  • Multi-filière et très asynchrone

L'acquisition de la pile réseau commerciale, non GPL, jNQ™, permet aux clients de Visuality Systems de gagner du temps et de faire des économies de coûts R&D, d'avoir accès aux derniers dialectes SMB et de mettre l'accent sur leur technologie principale.

Exemples de code jNQ™

Montage

PasswordCredentials cr = new PasswordCredentials(
     "userName", "password", "domain");
// Create a new Mount Point
Mount mt = new Mount("IpAddress","ShareName", cr);
// Close all connections and mount points
Client.stop();
 

Ouverture, lecture, écriture et suppression de fichier

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();
// close the mount point 
 mt.close();
 

Suppression de fichier par nom

PasswordCredentials cr = new PasswordCredentials(
      "userName", "password", "domain");
Mount mt = new Mount("IpAddress","ShareName", cr);
File.delete(mt, "text.txt");
// close the mount point 
mt.close();
 

Répertoire de navigation

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);
// close the directory browsing.
dir.close();
// close the mount point 
mt.close();
 

Accès en streaming

PasswordCredentials cr = new PasswordCredentials(
     "userName", "password", "domain");
// Create a new Mount Point
Mount mt = new Mount("IpAddress","ShareName", cr);
// create a new file.
File.Params fileParams = new File.Params(
        File.ACCESS_READ | File.ACCESS_WRITE | 
        File.ACCESS_DELETE, File.SHARE_FULL, 
        File.DISPOSITION_OPEN_IF, false);
File file = new File(mt, "myCreatedFile.txt", fileParams);
// create output stream
OutputStream outputStream = new SmbOutputStream(file);
// create some data to write
int totalAmountOfData = 1024 * 1024 * 10;
byte [] data = createByteBuffer( totalAmountOfData);

// write all the bytes -- buffering is done by TCP networking code
outputStream.write(data);
    
// alternative way of writing all the bytes with a little more control
int amountToWriteEachTime = 1024 * 1024;
int currentPosition = 0;
while (currentPosition < data.length) {
    file.setPosition( currentPosition);
    outputStream.write(data, currentPosition, amountToWriteEachTime);
    currentPosition += amountToWriteEachTime;
}
// close the stream
outputStream.close()
// close the mount point 
mt.close();