У меня есть программа, которую я хотел бы протестировать в автономном режиме, не отключая мою реальную сеть. Эта программа все равно должна была бы подключаться к локальным сокетам, включая сокеты домена unix и loopback. Это также должно слушать петлю и быть видимым для других приложений.
Но попытки подключиться к удаленной машине должны потерпеть неудачу.
Я хотел бы иметь утилиту, которая работает как strace
/ unshare
/ sudo
и просто запускает команду со скрытым Интернетом (и LAN), а все остальное все еще работает
$ offline my-program-to-test
Этот вопрос намекает на ответ: заблокировать сетевой доступ процесса?
Там есть пара предложений, например, запускать от имени другого пользователя, затем манипулировать iptables, или unshare -n
. Но в обоих случаях я не знаю заклинания, чтобы получить доменные сокеты unix и loopback для совместного использования с основной системой - ответы на этот вопрос только говорят мне, как отключить доступ ко всей сети.
Программа, которую я тестирую, по-прежнему должна подключаться к моему X-серверу и dbus и даже иметь возможность прослушивать зацикливание на наличие соединений из других приложений в системе.
В идеале я бы хотел избежать создания chroot или пользователей, или виртуальных машин или тому подобного, поскольку это становится таким же раздражающим, как отключение сетевого кабеля. т.е. вопрос в том, как я могу сделать это так просто, как sudo
.
Я бы хотел, чтобы процесс выполнялся на 100% нормально, за исключением того, что сетевые вызовы с указанием нелокального адреса потерпят неудачу. В идеале, сохраняя тот же uid, тот же homedir, тот же pwd, все то же самое, кроме ... офлайн.
Я использую Fedora 18, поэтому непереносимые ответы Linux просто хороши (даже ожидаемо).
Я даже рад решить это, написав программу на C, если это то, что нужно, поэтому ответы, которые предполагают написание C, хороши. Я просто не знаю, какие системные вызовы должна сделать эта C-программа, чтобы отозвать доступ к внешней сети при сохранении локальной сети.
Любой разработчик, пытающийся поддерживать «автономный режим», наверняка оценит эту утилиту!