実際のネットワークを停止せずにオフラインモードでテストしたいプログラムがあります。このプログラムは、Unixドメインソケットとループバックを含むローカルソケットに接続する必要があります。また、ループバックでリッスンし、他のアプリに表示される必要があります。
ただし、リモートマシンへの接続は失敗します。
strace
/ unshare
/のように機能sudo
し、インターネット(およびLAN)を隠した状態でコマンドを実行し、他のすべてがまだ機能しているユーティリティが必要です。
$ offline my-program-to-test
この質問には答えがあります:プロセスのネットワークアクセスをブロックしますか?
他のユーザーとして実行してからiptablesを操作するなど、いくつかの提案がありunshare -n
ます。しかし、どちらの場合も、UNIXドメインソケットとループバックをメインシステムと共有するための呪文はわかりません。その質問に対する答えは、ネットワーク全体の共有を解除する方法を教えてくれるだけです。
私がテストしているプログラムは、まだXサーバーとdbusに接続し、システム上の他のアプリからの接続をループバックでリッスンできる必要があります。
ネットワークケーブルを抜くのと同じくらい迷惑になるので、理想的には、chrootやユーザー、VMなどを作成しないようにします。すなわち質問のポイントはどのように私はこれをaのように簡単にすることができるかsudo
です。
非ローカルアドレスを指定するネットワークコールが失敗することを除いて、通常どおりに100%実行するプロセスが必要です。理想的には、同じuid、同じhomedir、同じpwd、...を除くすべてをオフラインに保つ。
私はFedora 18を使用しているので、移植性のないLinuxの答えは問題ありません(予想される、でも)。
それが関係しているのであれば、Cプログラムを書くことでこれを解決できてうれしいので、Cを書くことに関係する答えは問題ありません。ローカルネットワークを維持しながら、Cプログラムが外部ネットワークアクセスを取り消すために必要なsyscallがわからないだけです。
「オフラインモード」をサポートしようとする開発者は、おそらくこのユーティリティに感謝するでしょう!