2008-12-08 7 views
10

W systemie Linux, jak mogę (programowo) odzyskać następujące liczniki na zasadzie per-interface:Linux: pobieranie za-interface wysłanych/odebranych liczniki pakietów (ethernet, IPv4, IPv6)

  • Wysłane/odebrane ramki ethernetowe,
  • Wysłane/odebrane pakiety IPv4,
  • Wysłane/odebrane pakiety IPv6.
+0

Prawdopodobnie jest gdzieś w/proc, ale jako szybkie i brudne prawdopodobnie możesz go sparsować wyjście z "ifconfig" –

+2

Paul, które działałoby tylko dla liczby klatek, ponieważ ifconfig nie daje liczby pakietów na jeden protokół IP. – xahtep

+0

xahtep uderzył w gwóźdź w głowę: łatwo jest znaleźć liczbę klatek. Szukam również liczby pakietów IPv4 i IPv6. –

Odpowiedz

6

Powinieneś być w stanie to zrobić przy użyciu iptables zasady i liczniki pakietów, na przykład

# 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 

i przeglądać statystyki, analizować dane wyjściowe z nich:

iptables -L -vxn 
ip6tables -L -vxn 

Warto również zajrzeć do -Z flagę, jeśli chcesz wyzerować liczniki.

+0

Brzmi obiecująco. Czy możesz rozwinąć i/lub wskazać książkę/stronę opisującą to? Czy w przypadku systemu produkcyjnego wystąpiłoby zakłócenie wydajności? –

+1

Uaktualniłem odpowiedź, aby mieć przykład, mam nadzieję, że to pomoże. Nie będzie żadnego zauważalnego uderzenia w wydajność, ponieważ po prostu aktualizuje kilka liczników w pamięci podczas przepływu pakietów. – xahtep

+0

Świetnie! Tego właśnie potrzebowałem. Dzięki! –

0

Wireshark (kiedyś Ethereal) może ci w tym pomóc.

Netstat będzie mój drugi przypuszczenie

+0

Dzięki, ale szukam sposobu na odzyskanie tych liczników w "standardowym" systemie Linux bez instalowania dodatkowego oprogramowania. –

+0

Netstat powinien być preinstalowany w większości * zestawów – dsm

3

Możesz samemu parsować różne pliki statusu jądra, myślę, że to właśnie robią narzędzia takie jak netstat.

Strona mężczyzna proponuje:

  • /proc/net/raw - gniazdo RAW informacje
  • /proc/net/tcp - informacja gniazdo TCP
  • /proc/net/udp - UDP gniazdo informacje

Chyba nie powinno być sposób w jaki sposób to zrobić, być może również w /sys? Spojrzałem szybko, ale niczego nie znalazłem.

+0

Jedyny istotny plik statusu jądra, jaki mogłem znaleźć, to/proc/dev/net. Zgłasza RX-OK i TX-OK na interfejs. Podejrzewam, że są to liczniki ramek ethernetowych. Jak mogę uzyskać liczniki pakietów IPv4 i IPv6? Pamiętaj, że szukam statystyk wewnętrznych, a nie statystyk połączeń (gniazd). –

2

Albo po prostu przeanalizuj dane wyjściowe netstat -i. Lub strace netstat -i i użyj tego, aby ustalić, gdzie szuka informacji.

+0

raporty netstat RX-OK i TX-OK na interfejs. Podejrzewam, że są to liczniki ramek ethernetowych. Jak mogę uzyskać liczniki pakietów IPv4 i IPv6? –

1

informuje o ilości przesłanych danych (bajtów i pakietów).

+0

ifconfig zgłasza pakiety RX i pakiet TX na interfejs. Podejrzewam, że są to liczniki ramek ethernetowych. Jak mogę uzyskać liczniki pakietów IPv4 i IPv6? –

+0

Nie mam pojęcia:/Nie mam systemu IPv6, więc nie mogę powiedzieć, co ifconfig tam drukuje :( –

18

W moim systemie znajdują się pliki pod /sys/class/net/eth0/statistics, które zawierają różne statystyki dotyczące interfejsów sieciowych.

Zakłada to nieco niedawny Linux, który ma zamontowany /sys (sysfs).

+0

Fedora 14: wydaje się być świetnym pomysłem, do pisania aplikacji reprezentujących RX/TX. $ Php 'cat/sys/class/net/eth0/statistics/tx_packets' – YumYumYum

+1

te pliki wydają się zawierać liczniki ramek ethernetowych, a nie adresów IP?! (Mam wrażenie, że jest to właściwie ta sama informacja, co zawarte w '/ proc/net/dev 'lub na wyjściu' ifconfig' poza tym, że jest w wygodnym formularzu "jeden licznik na plik" –

+0

Działa to na SLES11 SP2. – incognick

7
cat /proc/net/dev 

Powinny zawierać liczniki, statystyki i informacje.

1

Poniższe komendy dać statystyk IPv4/IPv6 utrzymane w całym systemie:

netstat --statistics 

nstat -z 

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

Można drukować pełnych statystyk Ethernet z ethtool: ethtool -S eth1

-1

Można to łatwo zrobić w języku C# w MonoDevelop :

using System.Net.NetworkInformation; 

foreach (NetworkInterface ni in interfaces) 
{ 
    // perform your calculations 
} 
Powiązane problemy