Mam program, który chciałbym przetestować w trybie offline bez usuwania mojej faktycznej sieci. Ten program nadal musiałby łączyć się z gniazdami lokalnymi, w tym gniazdami domeny unix i sprzężeniem zwrotnym. Musi także nasłuchiwać w pętli zwrotnej i być widoczny dla innych aplikacji.
Ale próby połączenia ze zdalnym komputerem powinny zakończyć się niepowodzeniem.
Chciałbym mieć narzędzie, które działa jak strace
/ unshare
/ sudo
i po prostu uruchamia polecenie z ukrytym Internetem (i LAN) i wszystko inne nadal działa:
$ offline my-program-to-test
To pytanie zawiera wskazówki na odpowiedź: Zablokować dostęp procesu do sieci?
Istnieje kilka sugestii, takich jak uruchamianie jako inny użytkownik, a następnie manipulowanie iptables lub unshare -n
. Ale w obu przypadkach nie znam inkantacji, aby uzyskać gniazda domeny unix i sprzężenie zwrotne do wspólnego systemu - odpowiedzi na to pytanie mówią mi tylko, jak udostępnić całą sieć.
Program, który testuję, wciąż musi połączyć się z moim serwerem X i dbus, a nawet móc słuchać w pętli zwrotnej połączeń z innych aplikacji w systemie.
Idealnie chciałbym uniknąć tworzenia chrootów, użytkowników, maszyn wirtualnych itp., Ponieważ staje się to tak samo denerwujące jak odłączanie kabla sieciowego. tzn. chodzi o to, jak mogę to uczynić tak prostym jak sudo
.
Chciałbym, aby proces przebiegał w 100% normalnie, z wyjątkiem tego, że połączenia sieciowe określające adres nielokalny zakończyłyby się niepowodzeniem. Idealnie zachowując ten sam identyfikator użytkownika, ten sam katalog domowy, ten sam plik pwd, to samo wszystko oprócz ... offline.
Korzystam z Fedory 18, więc nieportowalne odpowiedzi na Linuksa są w porządku (nawet spodziewane).
Z przyjemnością rozwiązuję ten problem, pisząc program w języku C, jeśli o to chodzi, więc odpowiedzi dotyczące pisania w języku C są w porządku. Po prostu nie wiem, jakie wywołania systemowe musiałby wykonać program C, aby odwołać dostęp do sieci zewnętrznej przy jednoczesnym zachowaniu sieci lokalnej.
Każdy programista próbujący obsługiwać „tryb offline” prawdopodobnie doceniłby to narzędzie!
źródło
Można to również osiągnąć za pomocą grup dopasowujących reguły iptables. Napisałem narzędzie do streszczenia kroków. Chociaż wymaga początkowych uprawnień do początkowej konfiguracji, a poza tym jest setuidową wersją binarną, myślę, że oferuje dość prosty sposób radzenia sobie z problemem w pytaniu. Wymaga wersji iptables, która jest wystarczająco aktualna i że dostępne są odpowiednie moduły netfilter.
https://github.com/quitesimpleorg/qsni
źródło
Nie korzystałem z niego, ale myślę, że potencjalnie możesz użyć Comcast:
https://github.com/tylertreat/Comcast
ustawiona na 100% utratę pakietów
Ponownie nie testowałem tego, ale teoretycznie zmodyfikowałem z ich pliku Readme, możesz:
Linux
W systemie Linux można użyć
iptables
do upuszczania pakietów przychodzących i wychodzących.Alternatywnie możesz użyć,
tc
który obsługuje niektóre dodatkowe opcje.Zresetować:
źródło