2011-02-03 53 views
8

Làm cách nào để tạm thời vô hiệu hóa kết nối mạng trong Java?Tắt kết nối mạng

+4

kéo cáp ra .... –

+1

Yep, tôi đồng ý với Mitch ... cách dễ nhất bạn sẽ tìm thấy là chỉ cần kéo cáp , hoặc vô hiệu hóa bộ điều hợp mạng –

Trả lời

1

Thật không may, việc vô hiệu hóa kết nối mạng là hệ điều hành cụ thể và tôi không biết bất kỳ API Java chuẩn nào để truy cập các tính năng OS đó. Bạn có thể phải thực hiện một số mã hóa dành riêng cho hệ điều hành, ví dụ: thông qua JNI hoặc thực hiện các chương trình bên ngoài, cho mỗi hệ điều hành bạn định hỗ trợ. Chương trình Java cũng sẽ cần phải được gọi với các đặc quyền thích hợp để được phép gây rối với các giao diện mạng.

2

Các công việc này có hoạt động không? Trên cửa sổ:

Runtime.getRuntime().exec ("ipconfig/release"); 

Trên Linux (giả sử các giao diện mạng được gọi là eth0:.

Runtime.getRuntime().exec ("ifconfig eth0 down"); 
+0

tôi sử dụng phương pháp này trên một ứng dụng mà tôi chỉ phát hành kết nối cho tất cả kết nối không dây.Và sau đó gia hạn sau khi ứng dụng của tôi được thực hiện. Tôi đã sử dụng trang này làm tài liệu tham khảo: http://compnetworking.about.com/od/workingwithipaddresses/a/ipconfig.htm –

3

Một cách khá phức tạp nhưng khả thi để làm điều này là để tạo ra một nhà máy thực hiện ổ cắm tùy chỉnh Bạn có thể đăng ký bằng cách gọi Socket.setSocketImplFactory().

Nhà máy tùy chỉnh của bạn sau đó sẽ phải trả lại các triển khai ổ cắm tùy chỉnh mà chỉ cần ném IOException vào mọi lần kết nối.

Lưu ý rằng điều này chỉ dừng các kết nối gửi đi, nếu bạn muốn dừng ứng dụng chấp nhận các kết nối đến, bạn sẽ phải chơi một mẹo tương tự trên ServerSocket s.

+1

Tôi đã triển khai thư viện để thử nghiệm khả năng chịu lỗi bằng cách sử dụng phương pháp này với SocketImplFactory - thực sự là khả thi ! http://stackoverflow.com/a/43056981/504452 – bedrin

1

(Giả sử đây là hệ điều hành Windows, Vista hoặc mới hơn)

Bạn có thể vô hiệu hóa một giao diện thông qua WMI, có thể được truy cập thông qua một cây cầu như JACOB.

0

bạn có thể vô hiệu hóa tất cả các giao diện sử dụng wmic đường win32_networkadapter nơi PhysicalAdapter = True gọi vô hiệu hóa

1

Sniffy cho phép bạn block outgoing network connections trong các ứng dụng Java của bạn - nó sẽ ném một ConnectException bất cứ khi nào bạn cố gắng thiết lập một kết nối mới để lưu trữ hạn chế.

Chỉ cần thêm -javaagent:sniffy.jar=5559 vào đối số JVM và trỏ trình duyệt của bạn đến localhost:5559 - nó sẽ mở một trang web với tất cả các kết nối được phát hiện đến hệ thống hạ lưu và điều khiển để tắt một số kết nối nhất định.

Sniffy connections console

Nếu ứng dụng của bạn được dựa trên web, bạn thậm chí có thể làm điều đó trực tiếp từ ứng dụng của bạn mở trong trình duyệt - xem một bản demo ở đây: http://demo.sniffy.io/owners?lastName=

Nhấn vào một widget ở góc dưới bên phải, chọn tab Network Connections, tắt và kết nối với localhost:8967 (cơ sở dữ liệu) và tải lại trang để xem nó hoạt động.

Disclaimer: Tôi là tác giả của có vẻ khinh miệt

Các vấn đề liên quan