Có giao diện nhanh hơn cho thông tin từ / Proc / net / tcp không?


7

Đưa ra một /proc/<pid>/fdnút inode của socket TCP (có được thông qua ), có cách nào nhanh hơn để tra cứu thông tin mà tôi có thể nhận được từ /proc/net/tcpổ cắm này không?

Tôi đã viết một công cụ xử lý sự cố theo dõi các quy trình và in thông tin thời gian thực về các hoạt động IO ( stracethông tin -type được thu thập thành các bản tóm tắt cấp cao hơn và được trình bày theo cách ít thô sơ hơn), nhưng trên một máy chủ mạng được tải nặng, tôi thấy rằng cần có thời gian để tra cứu thông tin ổ cắm (ví dụ: địa chỉ / cổng nước ngoài) bị cấm đơn giản do kích thước rất lớn /proc/net/tcp(khoảng 2MB trên máy chủ mà tôi hiện đang xem).

Tôi có thể quản lý phần nào điều này bằng bộ nhớ đệm, nhưng điều này nhất thiết phải giới thiệu độ trễ và khiến tôi tự hỏi về sự vô lý của một "API" yêu cầu đọc và phân tích văn bản ASCII trị giá 2 MB để tìm thông tin trên ổ cắm.


Tôi tin rằng điều này có thể phù hợp hơn với StackOverflow, mặc dù nó mang tính đặc thù cao của Linux. Dù sao, có một chương trình tốt đẹp được gọi là iptstatecó nhu cầu tương tự. Bạn có thể nhìn vào cách chương trình đó làm điều đó. Tôi không tin nó sử dụng /proc/net/tcp.
Omnifarious 15/11 '

Câu trả lời:


3

Đây là một liên kết đến libnetfilter_conntrack . Bạn sẽ phải viết lại chương trình của mình bằng ngôn ngữ có thể hỗ trợ gọi trực tiếp các hàm C từ thư viện. Nhưng tôi nghĩ rằng thư viện này sẽ có các hook bạn cần để có được dữ liệu bạn muốn nhanh hơn nhiều so với phân tích cú pháp thông qua tệp văn bản đó.

Đây là những gì iptstatechương trình sử dụng để hoàn thành nhiệm vụ của mình.


1
Cảm ơn bạn. Tôi sẽ kiểm tra xem, mặc dù thoạt nhìn, giao diện của lib này không rõ ràng theo bất kỳ cách nào và tài liệu về cơ bản bao gồm một số chương trình ví dụ khó hiểu thậm chí không nêu rõ những gì họ làm và dựa vào sự hiểu biết về libmnl, mà bản thân nó không quá rõ ràng. Tôi không nghi ngờ rằng các chức năng tôi tìm kiếm là ở đây, nhưng cho đến nay nó là một chút của một cuộc đua.
ntnt

1
@ntnt: thở dài Tôi không nhìn vào chất lượng trước khi tôi chỉ cho bạn. Tôi biết nó sẽ cung cấp thông tin về tất cả các kết nối hiện đang được theo dõi, vì vậy bạn phải ở trong đó một nơi nào đó. Nhưng, vâng, tôi không biết rằng nó sẽ cung cấp cho bạn thông tin dựa trên id socket dưới mọi hình thức. :-(
Omnifarious

1
Lưu ý rằng đó là về trình theo dõi kết nối bộ lọc mạng ít liên quan đến các socket của kernel.
Stéphane Chazelas

@ StéphaneChazelas - Vâng ... thật kỳ lạ với tôi khi netlink không thể làm gì với netfilter. netfilter là một loại giao diện kỳ ​​lạ khi sử dụng các cuộc gọi hệ thống thùng rác [sg] etsockopt. Tôi đã phải học nhiều hơn về điều này cho một số công việc tôi đã làm gần đây. Tôi nghi ngờ netlink là lựa chọn tốt hơn nhiều cho thông tin mà OP muốn.
Omnifarious

3

Liên kết mạng. Nhìn vào sslệnh từ iproute2bộ sưu tập.

Đây là cơ sở mã cho iproute2ssđược mô tả ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.