Tôi có một chương trình tôi muốn thử nghiệm ở chế độ ngoại tuyến mà không làm mất mạng thực tế của tôi. Chương trình này vẫn sẽ cần kết nối với các socket cục bộ, bao gồm các socket miền unix và loopback. Nó cũng cần nghe trên loopback và hiển thị cho các ứng dụng khác.
Nhưng các nỗ lực để kết nối với một máy từ xa sẽ thất bại.
Tôi muốn có một tiện ích hoạt động như strace
/ unshare
/ sudo
và chỉ cần chạy một lệnh với Internet (và LAN) được che giấu và mọi thứ khác vẫn hoạt động:
$ offline my-program-to-test
Câu hỏi này có gợi ý về câu trả lời: Chặn truy cập mạng của một quá trình?
Có một vài gợi ý ở đó, chẳng hạn như chạy như một người dùng khác sau đó thao tác với iptables hoặc unshare -n
. Nhưng trong cả hai trường hợp, tôi không biết câu thần chú để có được các ổ cắm tên miền unix và loopback được chia sẻ với hệ thống chính - câu trả lời cho câu hỏi đó chỉ cho tôi biết cách chia sẻ toàn bộ mạng.
Chương trình tôi đang thử nghiệm vẫn cần kết nối với máy chủ X và dbus của tôi và thậm chí có thể nghe trên loopback cho các kết nối từ các ứng dụng khác trên hệ thống.
Lý tưởng nhất là tôi muốn tránh tạo chroots hoặc người dùng hoặc VM hoặc tương tự, vì nó trở nên khó chịu như việc rút cáp mạng. tức là điểm của câu hỏi là làm thế nào tôi có thể làm điều này đơn giản như a sudo
.
Tôi thích quy trình chạy bình thường 100% ngoại trừ các cuộc gọi mạng chỉ định địa chỉ không phải địa phương sẽ không thành công. Lý tưởng nhất là giữ cùng một uid, cùng một homedir, cùng pwd, mọi thứ giống nhau ngoại trừ ... ngoại tuyến.
Tôi đang sử dụng Fedora 18, vì vậy các câu trả lời Linux không thể truy cập chỉ là tốt (dự kiến, thậm chí).
Tôi thậm chí rất vui khi giải quyết vấn đề này bằng cách viết chương trình C, nếu đó là những gì liên quan, vì vậy câu trả lời liên quan đến việc viết C là tốt. Tôi chỉ không biết những tòa nhà mà chương trình C sẽ cần phải thực hiện để thu hồi quyền truy cập mạng bên ngoài trong khi vẫn giữ mạng cục bộ.
Bất kỳ nhà phát triển nào đang cố gắng hỗ trợ "chế độ ngoại tuyến" có thể sẽ đánh giá cao tiện ích này!