Netzwerknutzung

Herrmann

Well-Known Member
Hallo zusammen,

ich habe einen FreeBSD-Router über den der ganze Verkehr zwischen meinem Netzwerk und Internet läuft. Ich suche eine Möglichkeit um den aktuellen Datendurchsatz jedes Clients in meinem Netz abzufragen. Also z.B. wieviel Bandbreite nutzt IP 192.168.xxx.xxx.

PS: Bitte keine GUI-Lösungen, da ich wirklich nur die blanken Daten haben will um diese selbst auszuwerten/zu speichern.

Danke.
 
Vielleicht kann man sich da was mit tcpdump basteln. Oder nen kleines Script welches mit nem tcpdump plugin den Traffic nach dst/src ip sortiert und dann das volumen aufzeichnet.
 
Hi FreeBSDuser, werde mir tcpdump mal etwas genauer anschauen. Sieht auf den ersten Blick schon mal sehr vielversprechend für meine Zwecke aus. Danke.
 
Hi FreeBSDuser,

hab die Beschreibung nur kurz überflogen, klingt aber sehr interessant. Ich bastle gerade an ein paar Scripts für tcpdump. Wenn ich irgendwo hängen bleibe, komme ich bestimmt nochmal auf deinen zweiten Vorschlag (net/ttt) zurück.

Hab jetzt endlich mal einen Tag Urlaub, da wird sich bestimmt was reißen lassen :) Danke nochmal.
 
Tja, so kommt es manchmal

Jetz bin ich an dem Kram kleben geblieben... seufz

Das kam dabei raus:

Code:
# !/usr/bin/perl
#
# Copyright by FreeBSDuser
# ALL RIGHTS RESERVED
# ;)

use strict;
my %upload;
my %download;
my $net = "";
if(@ARGV[0]){
	$net = shift @ARGV;
}else{
	print "USAGE EXAMPLE:\nperl $0 192.168.0\nYeah, only the static part of the range\n";
	exit(1);
}
$net =~ s/\s//g;
print "$net\n";
sub Stop(){
	close(PIPE);
	print "Stopping !!\n";
	for(keys %upload){
		print $_."\tupload   ".$upload{$_}." MiB\n";
	}
	
	for(keys %download){
		print $_."\tdownload ".($download{$_} / 1024**2)." MiB\n";
	}
	exit();	
}

$SIG{'KILL'} = \&Stop;
$SIG{'INT'} = \&Stop;
$SIG{'HUP'} = \&Stop;

my $cmd = "tcpdump -n -e -tttt \"net $net and not dst net $net or not src net $net\" |";
print "$cmd\n";
open(PIPE, "$cmd");

while($_ = <PIPE>){
	if(/,\slength\s(\d+):\s(\d+\.\d+\.\d+\.\d+)\..*?>\s(\d+\.\d+\.\d+\.\d+)/){
		my $length = $1;
		my $src = $2;
		my $dst = $3;
		if($src =~ /$net/){
			$upload{$src} += $length / 1024**2;
		}else{
			$download{$dst} += $length;
		}
	}
}
Stop();

Starten mit "perl xyz.pl 192.168.0" (Also mit dem netz ohne .0 als parameter)
stoppen mit ^c, dann werden stats ausgegeben.

AUFRUF! Ich hab kein plan von der tcpdump filter syntax, aber mir kommt es vor, dass nach dem "and" der rest in Klammern müsste.

Die Lizenz gilt für Nicht-Forenmitglieder. WAahahaha
 
Hi FreeBSDuser,

so ähnlich hab ich das jetzt auch gelöst :) Nur schreibe ich die Daten für spätere Auswertungen in eine Postgres-Datenbank. Funktioniert wunderbar.
 
Hi,

ich hab mit jetz mit pcapy und impacket nen python script geschrieben. Funzt super, nur ich bekomme öfters packet lengths von über 1500 z.B. 4386 oder 2537 bytes, ist das ein Fehler in der Library oder sind das eine art jumboframes oder so welche später gesplittet werden ?

:)

EDIT: Wobei ich doch mtu 1492 eingestellt habe ... hmm
 
Zuletzt bearbeitet:
Zurück
Oben