![]() |
Netzwerkauslastung / Traffic
Wie kann man mit Delphi die Auslastung einer Netzwerkkarte auslesen und verarbeiten? Also einfach wieviel zum aktuellen Zeitpunkt rein und raus geht...
Ich habe schon sehr lange versucht im Internet irgendwas zu diesem Thema zu finden, aber irgendwie gibt es absolut keine Tutorials dazu. Da ich das jedoch unbedingt brauche poste ich einfach mal hier, in der Hoffnung das mir irgendjemand auch nur annähernd sagen kann wie das geht :wink: [edit=sakura]Leerzeichen in der Überschrift untergebracht. Mfg, sakura[/edit] |
Meine Seite Internet-Monitor, ist mit Source.
|
hm, thx, ich werd mir das mal ansehen,
aber ehrlichgesagt ist es nicht gerade einfach sich in einen so umfangreichen fremden Quellcode einzuarbeiten... ich wäre für genauere Hinweise wirklich dankbar :) |
Liste der Anhänge anzeigen (Anzahl: 1)
Die Units von Marcel van Brakel, die ich benutzt habe, liegen bei. Mein Programm sollte dir eigentlich zeige, wie es geht.
Im Anhang noch mal das original Archiv von Marcel van Brakel mit Demo-Programm. |
Ich habs mir gestern mal angesehen und nun funktioniert es optimal,
Danke :) sind die Units Freeware? oder muß man noch nen Copyright vermerk ins Programm rein nehmen? |
Re: Netzwerkauslastung/Traffic
IP Headers saugen ;-)
hier ein beispiel (Zeigt mir den den Traffic der ersten Netzwerkkarte):
Delphi-Quellcode:
[edit=sakura] [delphi]tags Mfg, sakura[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Winsock, IpExport, IpHlpApi, IpTypes, IpIfConst, IpRtrMib, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var MibRow: TMibIfRow; IntfTable: PMibIfTable; Size: DWORD; I: Integer; begin Size := 0; if GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit; IntfTable := AllocMem(Size); try if GetIfTable(IntfTable, Size, True) = NO_ERROR then begin for I := 0 to IntfTable^.dwNumEntries - 1 do begin {$R-}MibRow := IntfTable.Table[I];{$R+} if MibRow.dwType <> MIB_IF_TYPE_ETHERNET then Continue; // oder MIB_IF_TYPE_PPP if i = 1 then begin // Welche Verbindung label2.caption := inttostr(MibRow.dwInOctets); label4.Caption := inttostr(MibRow.dwOutOctets); end; end; end; finally FreeMem(IntfTable); end; end; end. |
Re: Netzwerkauslastung / Traffic
ich habe mit dem code folgendes problem:
dwInOctets ist von Typ Cardinal, der maximal knapp über 4Milliarden speichern kann. das entspricht gerade einmal etwas über 4GB. mein LAN traffic ist aber deutlich höher! wie kann ich das also am besten anstellen, dass der traffic nicht plötzlich wieder bei 0 anfängt? gruss, iaby |
Re: Netzwerkauslastung / Traffic
delta ausrechnen seit dem letzten abfragen.
das abfragen machst du z.b. im sekunden takt. |
Re: Netzwerkauslastung / Traffic
das problem ist dann, dass ich es die ganze zeit am laufen haben müsste.
andernfalls könnte ich einfach zwischen durch mal nachschauen! |
Re: Netzwerkauslastung / Traffic
windows resetted den eh nach 4,irgendwas GB, von daher ist das egal
|
Re: Netzwerkauslastung / Traffic
ja, der wert ist ja cardinal, also wird er automatisch auf 0 gesetzt, wenn man die maximale größe überspringt.
habs jetzt mit dem delta gemacht, funktioniert auch gut, aber perfekt ist es eben nicht. ist halt typisch microsoft. alles so klein wie möglich halten (HD<128GB, ...) gruss, iaby |
Re: Netzwerkauslastung / Traffic
Da sehr viele sich intressieren dafür wie man die Geschwindigkeit ermittelt hier ;-)
Das Beispiel zeigt den aktuellen Speed der ersten Netzwerkkarte (incoming Traffic) an (in kb/s) Den Speed des Timers auf 1000 (1 sekunde)
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Winsock, IpExport, IpHlpApi, IpTypes, IpIfConst, IpRtrMib, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; old: integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var MibRow: TMibIfRow; IntfTable: PMibIfTable; Size: DWORD; I: Integer; wert:integer; begin Size := 0; if GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit; IntfTable := AllocMem(Size); try if GetIfTable(IntfTable, Size, True) = NO_ERROR then begin for I := 0 to IntfTable^.dwNumEntries - 1 do begin {$R-}MibRow := IntfTable.Table[I];{$R+} if MibRow.dwType <> MIB_IF_TYPE_ETHERNET then Continue; // oder MIB_IF_TYPE_PPP if i = 1 then begin // Welche Verbindung wert := MibRow.dwInOctets - old; label1.caption := floattostr(round(Wert /1024 *100)/100) + ' KB/s'; old := MibRow.dwInOctets end; end; end; finally FreeMem(IntfTable); end; end; end. |
Re: Netzwerkauslastung / Traffic
Kann man wohl auch irgendwie herausfinden, welche Anwendung oder welche Adresse/Port sich hinter den in/out-Daten verbirgt?
|
Re: Netzwerkauslastung / Traffic
Neue Frage, neuer Thread...
|
Re: Netzwerkauslastung / Traffic
|
Re: Netzwerkauslastung / Traffic
wo ist der anhang von Luckie hin? ich wollte mir die units gerne mal ansehen von Marcel van Brakel!
|
Re: Netzwerkauslastung / Traffic
Anhänge wurden vorläufig gesperrt, werden aber wieder freigeschaltet.
gruss |
Re: Netzwerkauslastung / Traffic
stichwort
IPHLPAPI.pas |
Re: Netzwerkauslastung / Traffic
Ich habe mal eine Frage... Auch wenns schon 2 Jahre her ist:
Ich bekomme so komische Werte (10 Stellen?) und teilweise Negativ (o.o)... Ich habe es mit Luckies Programmcode und den Dateien von Luckies anhang probiert (is übrigends bei Calimeros Code genauso)! |
Re: Netzwerkauslastung / Traffic
Und promt einen Fehler gefunden sobald der Rechner ein kleines Treiberproblem hat und die Lösung!
Ich hatte als mein Rechner ein paar Tage durchgelaufen war einen Fehler der Marke ErangeError,hat vielleicht noch keiner von euch gemerkt weils noch nicht gepostet wurde? :shock: Das Problem war das die Software dann andauernd eine Messagebox mit eben diesem Fehler gebracht hat. Poste den Quellcode nochmals von mir überarbeitet.
Delphi-Quellcode:
[edit=Admin]Code in Delphi-Tags gesetzt. :-) Mfg, Daniel[/edit]
var MibRow: TMibIfRow;
IntfTable: PMibIfTable; Size: DWORD; I: Integer; wert:integer; begin try Size := 0; if GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit; IntfTable := AllocMem(Size); try if GetIfTable(IntfTable, Size, True) = NO_ERROR then begin for I := 0 to IntfTable^.dwNumEntries - 1 do begin {$R-}MibRow := IntfTable.Table[I];{$R+} if MibRow.dwType <> MIB_IF_TYPE_ETHERNET then Continue; // oder MIB_IF_TYPE_PPP if i = 1 then begin // Welche Verbindung wert := MibRow.dwInOctets - old; label1.caption := floattostr(round(Wert /1024 *100)/100) + ' KB/s'; old := MibRow.dwInOctets ; end; end; end; except on erangeerror do begin timer1.Enabled:=false; showmessage('Ein Treiberproblem ist aufgetreten!Starten Sie den Computer neu.'); end; end; finally FreeMem(IntfTable); end; |
Re: Netzwerkauslastung / Traffic
Delphi-Tag waere auch ganz schoen damit man den Code besser lesen kann!
|
Re: Netzwerkauslastung / Traffic
Seht es mir nach hab den Button oben übersehen :oops:
Das war mein erster Quellcode den ich hier gepostet habe. |
Re: Netzwerkauslastung / Traffic
Hallo zusammen,
wie kann ich denn den upload anzeigen??? Danke für eure Hilfe. |
Re: Netzwerkauslastung / Traffic
Zudem ist mir aufgefallen, dass beim Start des Programms ein hoher wert angezeigt wird.
Dieser liegt bei mir bei 44173.15 KB/s Frage ich den wert über einen Button ab, habe ich als Wert 4271,13 KB/s. |
Re: Netzwerkauslastung / Traffic
Hallo zusammen,
das Problem mit dem Upload habe ich jetzt soweit gelöst. Allerdings habe ich immernoch das Problem, dass ich nach der Wahl der Netzwerkkarte einen sehr hohen wert bekomme. Dieser schwankt schon erheblich. Zumal das Problem darin besteht, wenn ein Log File den ankommenen Traffic aufzeichnen soll, da dieser ordentlich verfälscht wird. Wäre um eine Hilfe sehr dankbar Gruß S4SH |
Re: Netzwerkauslastung / Traffic
|
Re: Netzwerkauslastung / Traffic
Hey danke für den Link,
programm habe ich auch schon auf meinem rechner. Allerdings zeigt mir das Programm bei Clear Counters das selbe Phänomen an. |
Re: Netzwerkauslastung / Traffic
Öhm mal nur so nebenbei, hat das ganze mal jemand unter Vista getestet? Bei mir kommt da nämlich abgesehen von einem Integerüberlauf nichts was man irgendwie verwerten könnte, also alles = 0
Wäre mal interessant ob und wie das ganze für Vista aufbereitet werden müßte? Gruß s! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz