J'écris une application qui fait du sniffing de paquets en utilisant une bibliothèque Pcap. Pour que cela fonctionne, je dois donner à la bibliothèque java
des capacités binaires de reniflage de réseau afin d'éviter d'avoir à l'exécuter en tant que root
:
sudo setcap cap_net_raw,cap_net_admin=eip /path/to/bin/java
Lorsque j'exécute un programme, toutes les quelques secondes, j'obtiens un Full Thread Dump (vidage complet du fil de discussion) vers stdout
. Aquí est un exemple d'un tel vidage complet de thread (le reste du repo n'est pas pertinent). Pour le reste, le programme semble fonctionner correctement : à l'exception du dump, je n'ai pas trouvé de différence dans l'exécution.
Le code ci-dessous suffit à reproduire le problème :
package main;
import java.io.IOException;
public class StdinTest {
public static void main(String[] args) throws IOException {
System.in.read();
}
}
Lorsque je supprime les capacités de la java
binaire avec la commande ci-dessous, les choses reviennent à la normale et je n'obtiens plus les Full Thread Dumps sur stdout.
sudo setcap -r /path/to/bin/java
Je ne suis pas sûr qu'il s'agisse d'un problème car le programme semble fonctionner correctement, mais il n'a pas l'air d'aller bien. normal .
Je n'ai trouvé personne qui semble avoir un problème similaire, je suis un peu perdu...
Toute aide est la bienvenue, merci d'avance !
Détails :
- OS : reproduit sur ArchLinux (noyau 5.12.9) & Ubuntu 20.04 (noyau 5.8.0)
- JDK : reproduit sur Adopt OpenJDK 11, 15 & 16, openjdk.java.net 15 & 16.
EDIT :
Non reproductible si le programme est exécuté en ligne de commande :
java -classpath target/classes main.StdinTest
Je n'obtiens les symptômes que lorsque je le démarre depuis IntelliJ Idea Ultimate. Je n'ai pas essayé avec d'autres IDE.