À l'heure actuelle, j'ai une application/service/widget/plugin/cronjob, peu importe, qui accède régulièrement à Internet. Je pourrais entrer dans les détails de mon problème spécifique, mais je préférerais une réponse qui me permettra de le trouver par moi-même et, ce faisant, en apprendre davantage sur Ubuntu.
J'utilise actuellement dnstop
pour afficher toutes les demandes DNS effectuées sur mon réseau. Actuellement, pour des raisons d’argumentation, une requête est envoyée à weather.noaa.gov
sur un cycle de 15 minutes. C'est probablement un widget météo bien que j'ai vérifié mes processus et ne rien trouvé, et que la demande vienne de mon ordinateur.
Alors la question, comment puis-je déterminer quel processus accède à weather.noaa.gov
?
Je ne veux pas passer par un processus d'élimination en fermant chaque service/plug-in/application pour comprendre cela. J'aimerais trouver un moyen de déterminer quel processus fait cette demande DNS.
Si j'avais un "pare-feu d'application" décent, la demande n'aurait jamais été faite. Mais ceci est un scénario "cheval a déjà verrouillé" et voudrait trouver ce processus "voyous" qui fait cette demande DNS.
Si cela ne vous dérange pas de laisser fonctionner une boucle infinie pendant un certain temps, vous pouvez exécuter netstat en continu et filtrer la sortie en fonction de l'adresse IP de l'ordinateur auquel votre programme est connecté. Je suggère d'utiliser des adresses IP au lieu de noms de domaine, car cela est beaucoup plus rapide, ce qui réduit le temps pris par chaque appel de netstat et augmente donc les chances de réellement intercepter votre processus. Vous devez exécuter la commande netstat en tant que root si vous pensez que le processus n'appartient pas à l'utilisateur actuellement connecté. Donc, utilisez d'abord nslookup pour comprendre l'adresse IP du domaine:
nslookup weather.noaa.gov
Pour moi, cela donne pour le moment: 193.170.140.70 et 193.170.140.80. Maintenant, vous pouvez mettre en place une boucle infinte de netstats. La sortie que vous pouvez filtrer avec grep (et rejeter STDERR).
while [ true ] ; do netstat -tunp 2>/dev/null | grep -e 193.170.140.70 -e 193.170.140.80 ; done
Bien sûr, éditez les adresses IP dans l'exemple ci-dessus. Cet exemple examine les connexions TCP et UDP (-tu), ne prend pas en charge la résolution DNS (-n) et répertorie les processus (-p). Si vous pensez qu'il reste suffisamment de temps pour résoudre le DNS, omettez simplement l'option -n pour netstat et mettez le domaine pour grep à la place de l'adresse IP. Vous pouvez arrêter la boucle infinie en appuyant simplement sur CTRL + c
J'espère que ça aide, Andreas
PS: Je sais, ce n'est pas la manière idéale, efficace ou propre de le faire, mais pour une recherche ponctuelle, cela devrait être suffisant.
Vous pouvez également "casser" l'application via/etc/hosts en ajoutant le nom de domaine complet auquel vous êtes connecté. Donnez-lui une adresse IP non routable comme 10.1.2.3 (ou 127.0.0.1) et voyez ce qui se casse.