J'ai un programme que je voudrais tester en mode hors ligne sans supprimer mon réseau actuel. Ce programme devrait toujours se connecter aux sockets locaux, y compris les sockets de domaine Unix et le bouclage. Il doit également écouter en boucle et être visible pour les autres applications.
Mais les tentatives de connexion à une machine distante devraient échouer.
J'aimerais avoir un utilitaire qui fonctionne comme strace
/ unshare
/ sudo
et exécute simplement une commande avec Internet (et LAN) caché et tout le reste fonctionne:
$ offline my-program-to-test
Cette question a des indices sur la réponse: bloquer l'accès au réseau d'un processus?
Il y a quelques suggestions, comme exécuter comme un autre utilisateur puis manipuler iptables, ou unshare -n
. Mais dans les deux cas, je ne connais pas l'incantation pour que les sockets de domaine Unix et le bouclage soient partagés avec le système principal - les réponses à cette question me disent seulement comment dissocier tout le réseau.
Le programme que je teste doit toujours se connecter à mon serveur X et dbus et même être en mesure d'écouter en boucle les connexions d'autres applications du système.
Idéalement, je voudrais éviter de créer des chroots ou des utilisateurs ou des machines virtuelles ou similaires, car cela devient tout aussi ennuyeux que de débrancher le câble réseau. c'est-à-dire que la question est de savoir comment puis-je rendre cela aussi simple qu'un sudo
.
J'aimerais que le processus s'exécute à 100% normalement, sauf que les appels réseau spécifiant une adresse non locale échoueraient. Idéalement en gardant le même uid, le même homedir, le même pwd, le même tout sauf ... hors ligne.
J'utilise Fedora 18, donc les réponses Linux non transférables sont très bien (attendues, même).
Je suis même heureux de résoudre ce problème en écrivant un programme C, si c'est le cas, les réponses qui impliquent d'écrire C sont donc très bien. Je ne sais tout simplement pas quels syscalls ce programme C devrait faire pour révoquer l'accès au réseau externe tout en conservant le réseau local.
Tout développeur essayant de prendre en charge le "mode hors ligne" apprécierait probablement cet utilitaire!