2008-12-08 52 views
10

Trên Linux, làm thế nào tôi có thể (lập trình) lấy các quầy sau trên một cơ sở cho mỗi giao diện:Linux: lấy mỗi giao diện gửi/nhận quầy gói (ethernet, ipv4, ipv6)

  • Sent/đã nhận các khung ethernet,
  • Các gói IPv4 đã gửi/nhận,
  • Các gói IPv6 đã gửi/nhận.
+0

Đó có thể là một nơi nào đó trong/proc, nhưng nhanh chóng và bẩn, bạn có thể phân tích cú pháp ra khỏi đầu ra của "ifconfig" –

+2

Paul, mà sẽ làm việc chỉ cho số khung như ifconfig không cung cấp một số gói tin cho mỗi giao thức IP. – xahtep

+0

xahtep đánh vào đầu móng tay: rất dễ tìm số khung hình. Tôi cũng đang tìm gói tin IPv4 và IPv6. –

Trả lời

6

Bạn sẽ có thể làm điều này bằng iptables quy tắc và quầy gói, ví dụ

# input and output must be accounted for separately 
# ipv4, eth0 
iptables -I INPUT -i eth0 
iptables -I OUTPUT -o eth0 
# ipv6, eth0 
ip6tables -I INPUT -i eth0 
ip6tables -I OUTPUT -o eth0 

Và để xem các số liệu thống kê, phân tích kết quả của những:

iptables -L -vxn 
ip6tables -L -vxn 

Bạn cũng nên nhìn lên lá cờ -Z cho khi bạn muốn thiết lập lại các quầy.

+0

Âm thanh đầy hứa hẹn. Bạn có thể xây dựng và/hoặc trỏ đến một cuốn sách/trang web mô tả điều này không? Ngoài ra, sẽ có một ý nghĩa hiệu suất nếu tôi muốn điều này bật "tất cả các thời gian" trên một hệ thống sản xuất? –

+1

Tôi đã cập nhật câu trả lời để có một ví dụ, hy vọng điều này sẽ hữu ích. Sẽ không có bất kỳ hiệu suất đáng chú ý nào cho việc này vì nó chỉ cập nhật một vài bộ đếm trong bộ nhớ khi các gói tin truyền qua. – xahtep

+0

Tuyệt vời! Đây là những gì tôi cần. Cảm ơn! –

0

Wireshark (đã từng là Ethereal) có thể giúp bạn với điều đó.

Netstat sẽ được đoán thứ hai của tôi

+0

Cảm ơn, nhưng tôi đang tìm kiếm một cách để lấy các quầy trên một hệ thống Linux "tiêu chuẩn" mà không cần cài đặt bất kỳ phần mềm bổ sung. –

+0

Netstat nên được cài đặt sẵn trong hầu hết các * nixes – dsm

3

Bạn luôn có thể phân tích cú pháp các tệp trạng thái hạt nhân khác nhau, tôi nghĩ đây là những công cụ như netstat.

Các trang người đàn ông gợi ý:

  • /proc/net/raw - ổ cắm RAW thông tin
  • /proc/net/tcp - thông tin socket TCP
  • /proc/net/udp - UDP socket thông tin

Tôi đoán cần có một cách không proc để làm điều này, có lẽ trong /sys quá? Tôi đã có một cái nhìn nhanh chóng nhưng không tìm thấy bất cứ điều gì.

+0

Tệp trạng thái hạt nhân duy nhất có liên quan mà tôi có thể tìm thấy là/proc/dev/net. Nó báo cáo RX-OK và TX-OK cho mỗi giao diện. Tôi nghi ngờ đây là các bộ đếm khung ethernet. Tôi sẽ nhận được bộ đếm gói tin IPv4 và IPv6 như thế nào? Lưu ý rằng tôi đang tìm số liệu thống kê trên bề mặt, không phải cho số liệu thống kê kết nối (socket). –

2

Hoặc chỉ phân tích đầu ra của netstat -i. Hoặc strace netstat -i và sử dụng điều đó để tìm ra nơi tìm kiếm thông tin.

+0

báo cáo netstat RX-OK và TX-OK cho mỗi giao diện. Tôi nghi ngờ đây là các bộ đếm khung ethernet. Tôi sẽ nhận được bộ đếm gói tin IPv4 và IPv6 như thế nào? –

1

ifconfig cho bạn biết lượng dữ liệu được truyền (byte và gói).

+0

ifconfig báo cáo gói RX và gói TX trên mỗi giao diện. Tôi nghi ngờ đây là các bộ đếm khung ethernet. Tôi sẽ nhận được bộ đếm gói tin IPv4 và IPv6 như thế nào? –

+0

Không có ý tưởng:/Tôi không có một hệ thống IPv6 vì vậy tôi không thể nói những gì ifconfig in đó: ( –

18

Trên hệ thống của tôi, có các tệp dưới /sys/class/net/eth0/statistics, cung cấp số liệu thống kê khác nhau về giao diện mạng.

Đây là giả định một Linux mơ hồ gần đây có gắn kết /sys (sysfs).

+0

Fedora 14: nó có vẻ là ý tưởng mát mẻ, để viết các ứng dụng đại diện cho RX/TX. $ Php 'cat/sys/class/net/eth0/statistics/tx_packets' – YumYumYum

+1

các tập tin này dường như chứa các bộ đếm khung ethernet, không phải các IP liên quan? (Tôi có ấn tượng rằng đây thực sự là thông tin tương tự như chứa trong '/ proc/net/dev 'hoặc trong đầu ra của' ifconfig' ngoại trừ việc nó ở dạng 'một truy cập cho mỗi tệp' thuận tiện –

+0

Điều này hoạt động trên SLES11 SP2. – incognick

7
cat /proc/net/dev 

Nên chứa bộ đếm, số liệu thống kê và thông tin.

1

Các lệnh sau đây cho số liệu thống kê IPv4/IPv6 duy trì toàn hệ thống:

netstat --statistics 

nstat -z 

cat /proc/net/dev_snmp6/eth0 gives ipv6 stats per interface 
1

Bạn có thể in các thống kê ethernet đầy đủ với ethtool: ethtool -S eth1

-1

Bạn có thể dễ dàng làm điều đó trong C# trong MonoDevelop :

using System.Net.NetworkInformation; 

foreach (NetworkInterface ni in interfaces) 
{ 
    // perform your calculations 
} 
Các vấn đề liên quan