Accéder à l'interface réseau avec Java

TL;DR

Je ne l'ai jamais fait.

environnement

Sur Ubuntu Linux 18.04 LTS

$ uname -srvmpio
Linux 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic

Java 11。

$ java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

java.net.NetworkInterface

Utilisez java.net.NetworkInterface pour accéder à l'interface réseau.

java.net.NetworkInterface

Informations sur l'interface réseau de l'hôte.

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.130/24 brd 192.168.200.255 scope global dynamic noprefixroute ens33
       valid_lft 1737sec preferred_lft 1737sec
    inet6 fe80::6f10:63fc:a80e:7ea0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: br-72f78aadc23c: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-72f78aadc23c
       valid_lft forever preferred_lft forever
4: br-8dd168bc4c0e: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-8dd168bc4c0e
       valid_lft forever preferred_lft forever
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/16 brd 172.22.255.255 scope global docker0
       valid_lft forever preferred_lft forever

Exemple de code. Vous pouvez obtenir toutes les interfaces réseau avec NetworkInterface.getNetworkInterfaces (), et vous pouvez obtenir des interfaces réseau avec le nom d'interface réseau, l'index et ʻInetAddress`.

App.java

import java.io.IOException;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.List;
import java.util.StringJoiner;

public class App {
    public static void main(String... args) throws SocketException {
        List<NetworkInterface> networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

        networkInterfaces.forEach(ni -> {
            try {
                System.out.printf(
                        "name = %s, addresses = %s, mac address = %s%n",
                        ni.getName(),
                        Collections.list(ni.getInetAddresses()),
                        formatBinaryToHexString(ni.getHardwareAddress())
                );
            } catch (IOException e) {
                // ignore
            }
        });

        NetworkInterface ni = NetworkInterface.getByName("ens33");
        System.out.printf(
                "name = %s, addresses = %s, mac address = %s%n",
                ni.getName(),
                Collections.list(ni.getInetAddresses()),
                formatBinaryToHexString(ni.getHardwareAddress())
        );
    }

    static String formatBinaryToHexString(byte[] binary) {
        if (binary == null) {
            return "[]";
        }

        StringJoiner joiner = new StringJoiner(":");

        for (byte b : binary) {
            joiner.add(String.format("%02x", b));
        }

        return joiner.toString();
    }
}

Exemple d'exécution.

name = docker0, addresses = [/172.22.0.1], mac address = xx:xx:xx:xx:xx:xx
name = br-8dd168bc4c0e, addresses = [/172.18.0.1], mac address = xx:xx:xx:xx:xx:xx
name = br-72f78aadc23c, addresses = [/172.19.0.1], mac address = xx:xx:xx:xx:xx:xx
name = ens33, addresses = [/fe80:0:0:0:6f10:63fc:a80e:7ea0%ens33, /192.168.200.130], mac address = xx:xx:xx:xx:xx:xx
name = lo, addresses = [/0:0:0:0:0:0:0:1%lo, /127.0.0.1], mac address = []
name = ens33, addresses = [/fe80:0:0:0:6f10:63fc:a80e:7ea0%ens33, /192.168.200.130], mac address = xx:xx:xx:xx:xx:xx

Recommended Posts

Accéder à l'interface réseau avec Java
Interface appelable en Java
Devinez le code de caractère en Java
Spécifiez l'emplacement Java dans eclipse.ini
java (interface)
Décompressez le fichier zip en Java
interface [java]
Analyser l'analyse syntaxique de l'API COTOHA en Java
Appelez la super méthode en Java
Obtenez le résultat de POST en Java
Référence Java à comprendre dans la figure
Essayez d'utiliser l'API Stream en Java
Comprenez l'interface java à votre manière
Appelez l'API de notification Windows en Java
J'ai essayé le nouveau yuan à Java
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Organisation des notes dans la tête (Java-Arrangement)
Essayez d'appeler le service CORBA sur Java 11+
Quelle est la méthode principale en Java?
Comment obtenir la date avec Java
L'histoire de l'écriture de Java dans Emacs
Entrée de la console en Java (comprendre le mécanisme)
À propos de l'interface Java
Partition en Java
Changements dans Java 11
Janken à Java
Exécutez des applications x11 dans un conteneur Docker (prend en charge l'accès réseau à partir du conteneur)
Interface [Java]
[Java] Interface fonctionnelle
À propos de l'interface, interface java
Taux circonférentiel à Java
FizzBuzz en Java
Concernant les modificateurs transitoires et la sérialisation en Java
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
À propos de la confusion observée dans les serveurs Java de démarrage
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
ChatWork4j pour l'utilisation de l'API ChatWork en Java
Une histoire sur le JDK à l'ère de Java 11
Mémo organisé dans la tête (syntaxe Java --Control)
Le type d'intersection introduit dans Java 10 est incroyable (?)
[Java] Accéder à l'URL signée de s3 (version signée 2)
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
Ressentez le passage du temps même à Java
Organisation des notes dans la tête (Java - édition d'instance)
[Java] Lire les fichiers dans src / main / resources
Mémo organisé dans la tête (Java - type de données)
[Deep Learning from scratch] dans Java 3. Réseau neuronal
Afficher "Hello World" dans le navigateur à l'aide de Java
[Java] Jugement en saisissant des caractères dans le terminal
Afficher "Hello World" dans le navigateur à l'aide de Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
Importer des fichiers de la même hiérarchie en Java
Je ne savais pas que les classes internes pouvaient être définies dans l'interface [Java]
Obtenez l'URL de la destination de la redirection HTTP en Java
[Java] Déclarons les variables utilisées dans la boucle dans la boucle [Variations dans le bloc]
Lire JSON en Java