Tôi có một ứng dụng Java khổng lồ (một máy khách ứng dụng ít được biết đến GNUEnterprise) và nguồn của nó, mà tôi có thể biên dịch lại sau khi thực hiện một số thay đổi. Ứng dụng sử dụng mạng rất nhiều và tôi cần theo dõi từng yêu cầu và phản hồi. Tôi có thể sử dụng một trình thám thính như Wireshark, nhưng ứng dụng hoạt động với máy chủ của nó qua SSL, do đó, không biết khóa riêng tư của chứng chỉ SSL bất kỳ lưu lượng truy cập sniffed là khá vô ích.Ghi lại tất cả các tương tác mạng của ứng dụng Java
Tôi có thể làm gì để thực hiện mọi yêu cầu và phản hồi được đăng nhập từ chính ứng dụng? Tôi cần xem tất cả các tiêu đề đã gửi và nhận. Tôi không muốn thay đổi tất cả các mã chịu trách nhiệm về tương tác mạng. Những gì tôi muốn là đặt một mã như
Network.setDefaultLogger(myCustomLoggerInstance);
ở đâu đó gần bắt đầu ứng dụng và sau đó trong myCustomLoggerInstance
thực hiện tất cả nhật ký tôi cần.
Ngoài ra, với tất cả các hoạt động mạng được thực hiện với URLConnection
s, tôi có thể nhận tiêu đề phản hồi với con.getHeaderFields()
và yêu cầu tiêu đề với con.getRequestProperties()
. Nhưng tại sao không có cookie? Làm thế nào để đổ cookie đã gửi và nhận theo cùng một cách?
EDIT: Điều tôi đang cố gắng tiếp cận là bắt chước giao tiếp của ứng dụng RPC với máy chủ của nó qua SSL, giả sử sử dụng curl
. Đối với điều này tôi cần phải có được nhật ký chi tiết về lưu lượng mạng của ứng dụng.
tôi sẽ sửa đổi 'OpenJDK', thực hiện các chức năng logger đề cập sau đó sniff các thông tin liên lạc tại thư viện cấp độ. – auselen
@auselen quá hacky. Nếu không có cách nào để làm điều này trên cấp ứng dụng (và nó có vẻ như vậy), tôi sẽ tốt hơn dính vào một máy chủ proxy đăng nhập bên ngoài, như đề nghị của greyfairer. – Hnatt