Chciałbym wyszukać licznik aktywności ładunku TCP (całkowita liczba bajtów odebranych) dla danego deskryptora pliku lub danego interfejsu. Najlepiej dany deskryptor pliku, ale dla interfejsu wystarczy. Idealnie chciałbym wiedzieć o wszelkich bajtach, które zostały potwierdzone, nawet te, których nie przeczytałem w przestrzeni użytkownika (jeszcze?).Określanie aktywności/statystyk obciążenia TCP
Widziałem funkcję TCP_INFO
z getsockopt()
, ale żadne z pól nie zawiera zapisu "Całkowita liczba bajtów odebranych" lub "Całkowita liczba przesłanych bajtów (potwierdzonych, np.)", O ile wiem.
Ja również widziałem netlink
IFLA_STATS
+ RTNL_TC_BYTES
i (pole rx_bytes
) SIOCETHTOOL
+ ETHTOOL_GSTATS
ioctl()
dla interfejsów, a te są świetne, ale nie sądzę, że będą w stanie rozróżniać między napowietrznej/nagłówki pozostałych warstw i rzeczywiste bajty ładunku.
procfs
ma /proc/net/tcp
ale wydaje się, że nie zawiera również tego, czego szukam.
Czy istnieje sposób na uzyskanie tych konkretnych danych?
EDYCJA: tryb promiscuous ma niewiarygodny wpływ na przepustowość, więc nie mogę wykorzystać niczego, co go wykorzystuje. Nie wspominając już o tym, że wdrażanie dużych części stosu IP w celu określenia, które pakiety są odpowiednie, wykracza poza mój zamierzony zakres tego rozwiązania.
Celem jest posiadanie nadrzędnego/bez zaufania/drugiego odgadnięcia, jakie wartości przechowuję z recvmsg().
Prawą rzeczą, którą należy wykonać, jest prawidłowe śledzenie tych wartości, ale warto mieć prosty "Hej OS? Ile bajtów otrzymałem na tym gnieździe na naprawdę?"
Możesz użyć 'iptables' do zliczania. Ta odpowiedź może być interesująca: http://superuser.com/a/264651 – alk
Czy możesz użyć libpcap? Możesz ustawić interfejs monitora i przechwycić dokładnie te typy pakietów, które chcesz, a następnie zwiększyć licznik, jeśli te pakiety spełniają twoje kryteria. –