Seite 2 von 4
Verfasst: 24.08.2005 11:14
von Kiffi
> Kiffi, du bist ein Held...
ich weiss
> GetIpStatistics_(ip) <-----Is not an function, an array or an linked list.....
was für ein Betriebssystem hast Du? Versuch's evtl. mal mit [c]GetIpStatisticsEx[/c]
MSDN hat geschrieben:
Remarks
Windows Server 2003 and Windows XP: Use the GetIpStatisticsEx function to obtain the IP statistics for the IPv6 protocol.
Requirements
Client Requires Windows "Longhorn", Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0 SP4 and later, Windows Me, or Windows 98.
Server Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0 SP4 and later.
http://msdn.microsoft.com/library/defau ... istics.asp
Grüße ... Kiffi
Verfasst: 24.08.2005 12:01
von freedimension
Kiffi hat geschrieben:> Kiffi, du bist ein Held...
ich weiss
> GetIpStatistics_(ip) <-----Is not an function, an array or an linked list.....
was für ein Betriebssystem hast Du? Versuch's evtl. mal mit [c]GetIpStatisticsEx[/c]
MSDN hat geschrieben:
Remarks
Windows Server 2003 and Windows XP: Use the GetIpStatisticsEx function to obtain the IP statistics for the IPv6 protocol.
Requirements
Client Requires Windows "Longhorn", Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0 SP4 and later, Windows Me, or Windows 98.
Server Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0 SP4 and later.
http://msdn.microsoft.com/library/defau ... istics.asp
Grüße ... Kiffi
Am Besten du rufst das dann nicht mehr direkt auf sondern (über den Umweg die DLL zu laden) mittels CallFunction bzw. CallFunctionFast, damit kannst du dann vorher auch überprüfen ob die Funktionen existieren oder nicht und darauf dann gezielt reagieren. Wenn das OS einen der API-Aufrufe nicht kennt und du hast diese aber fest mit eingelinkt stürzt dein Programm beim Starten ab wenn es diese nicht geben sollte.
Verfasst: 24.08.2005 12:40
von Tafkadasom2k5
OK...damit hätte ich die Statistiken...aber ich habe ehrlich gesagt keine richtige Ahnung wie ich das nun für mich nutzen könnte...
Oder muss man jetzt jedesmal die Statistik abrufen (jede 1/4tel Sekunde) gucken was sich in der Statistik verändert hat und daraus errechnen wieviele KBps das ergibt?
Und wenn ja:
Muss ich alle "Datagramme" zusammenzählen (UDP,TCP,.....) um die vollständige KBps-Zahl zu erhalten?Und welche zahlen sind für sowas überhaupt interessant?
Oder wie soll ich damit arbeiten?
Sry ich steh heute n bissl aufm Schlauch.....-bin eben noch n blutiger Anfänger....

aber ich hoffe bald ned mehr ^^
Danke auf jeden ersmal für alle Antworten und für alle (hoffentlich) baldigen
Hab euch schon alle ganz doll lieb gewonnen hier....

ihr seid klasse!
Gr33tz
Der Marc
Verfasst: 24.08.2005 13:50
von Agent
Hi Tafkadasom2k5.
Ich hab mal genau das gleiche gesucht. Up- und Download-Traffic auf TCP.
Bin auf den gleichen Kram gestossen. Bisher hab ich auch nur die Möglichkeit, den gesamten Traffic zu sehen. Leider nicht differenziert nach Up- und Download. Scheinbar hat das noch niemad gelöst
Hier meine kleine Version:
Code: Alles auswählen
Structure MIB_TCPSTATS
dwRtoAlgorithm.l ; timeout algorithm
dwRtoMin.l ; minimum timeout
dwRtoMax.l ; maximum timeout
dwMaxConn.l ; maximum connections
dwActiveOpens.l ; active opens
dwPassiveOpens.l ; passive opens
dwAttemptFails.l ; failed attempts
dwEstabResets.l ; establised connections reset
dwCurrEstab.l ; established connections
dwInSegs.l ; segments received
dwOutSegs.l ; segment sent
dwRetransSegs.l ; segments retransmitted
dwInErrs.l ; incoming errors
dwOutRsts.l ; outgoing resets
dwNumConns.l ; cumulative connections
EndStructure
Global tcp.MIB_TCPSTATS
Procedure GetNetTraffic()
Shared tcp
If GetTcpStatistics_(tcp)=0
ProcedureReturn tcp\dwInSegs
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug GetNetTraffic()
Wenn Du den Traffic pro Sekunde mBit/Sec rausfinden willst, musst du den Wert eben alle 1 Sekunde mit dem vorigen Wert vergleichen, also praktisch ein:
Code: Alles auswählen
oldtraffic=GetNetTraffic()
Repeat
If oldtraffic<>traffic
oldtraffic=traffic
traffic=GetNetTraffic()
Debug "Traffic / Sekunde: "+Str(traffic-oldtraffic)
EndIf
Delay(1000)
ForEver
Solltest Du mal was besseres finden, lass es mich wissen, dann das hier ist "unbefriedigend"

Verfasst: 24.08.2005 14:13
von Tafkadasom2k5
OK-das werde ich mal....vll frage ich mal Pure ob er lust hat dafür ne User Lib zu coden oder ne DLL....wär auf jeden nützlich...
Danke für deine Version erstmal!
Gr33tz
Tafkadasom2k5
EDIT:
Dein Code funzt bei mir nicht....ich habe ihn so geschrieben...:
Code: Alles auswählen
OpenLibrary(1,"iphlpapi")
Structure MIB_TCPSTATS
dwRtoAlgorithm.l ; timeout algorithm
dwRtoMin.l ; minimum timeout
dwRtoMax.l ; maximum timeout
dwMaxConn.l ; maximum connections
dwActiveOpens.l ; active opens
dwPassiveOpens.l ; passive opens
dwAttemptFails.l ; failed attempts
dwEstabResets.l ; establised connections reset
dwCurrEstab.l ; established connections
dwInSegs.l ; segments received
dwOutSegs.l ; segment sent
dwRetransSegs.l ; segments retransmitted
dwInErrs.l ; incoming errors
dwOutRsts.l ; outgoing resets
dwNumConns.l ; cumulative connections
EndStructure
Global tcp.MIB_TCPSTATS
Procedure GetNetTraffic()
Shared tcp
If CallFunction(1,"GetTcpStatistics",tcp) = 1
ProcedureReturn tcp\dwInSegs
Else
ProcedureReturn 0
EndIf
EndProcedure
oldtraffic=GetNetTraffic()
Repeat
If oldtraffic<>Traffic
oldtraffic=Traffic
Traffic=GetNetTraffic()
Debug "Traffic / Sekunde: "+Str(Traffic-oldtraffic)
EndIf
Delay(1000)
ForEver
Aber die Variablen ändern nie den "Null-State"...
Hab ich was falsch gemacht beim Aufruf der .DLL Befehle?
Verfasst: 24.08.2005 14:40
von Agent
Also mein Code oben läuft bei mir unter W2000 und WXP. Aufruf einer DLL ist nicht notwendig!
Ich habe den Code mal überarbeitet, da ich gehofft habe, doch Up- und Download da raus zu kriegen:
Code: Alles auswählen
Structure MIB_TCPSTATS
dwRtoAlgorithm.l ; timeout algorithm
dwRtoMin.l ; minimum timeout
dwRtoMax.l ; maximum timeout
dwMaxConn.l ; maximum connections
dwActiveOpens.l ; active opens
dwPassiveOpens.l ; passive opens
dwAttemptFails.l ; failed attempts
dwEstabResets.l ; establised connections reset
dwCurrEstab.l ; established connections
dwInSegs.l ; segments received
dwOutSegs.l ; segment sent
dwRetransSegs.l ; segments retransmitted
dwInErrs.l ; incoming errors
dwOutRsts.l ; outgoing resets
dwNumConns.l ; cumulative connections
EndStructure
Global tcp.MIB_TCPSTATS
Procedure GetNetTrafficReceived()
If GetTcpStatistics_(tcp)=0
ProcedureReturn tcp\dwInSegs
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure GetNetTrafficSend()
If GetTcpStatistics_(tcp)=0
ProcedureReturn tcp\dwOutSegs
Else
ProcedureReturn 0
EndIf
EndProcedure
Repeat
If oldsend<>GetNetTrafficSend() Or oldreceived<>GetNetTrafficReceived()
Debug "SEND: "+Str(GetNetTrafficSend()-oldsend)+" kByte/s"
oldsend=GetNetTrafficSend()
Debug "RECEIVED: "+Str(GetNetTrafficReceived()-oldreceived)+" kByte/s"
oldreceived=GetNetTrafficReceived()
Debug ""
EndIf
Delay(1000)
ForEver
Lass dass mal laufen. Sieht auf den 1. Blick recht interresant aus, aber ich hab mal das Netzwerkkabel gezogen....Trotzdem Werte 10-20.. =((
Dann hab ich die Netzwerkkarte deativiert weil ich dachte "Ok, der sucht halt..." - Werte 10-15.... Wie kann das sein frag ich mich. Ich seh ja ein, dass selbst wenn ich im Netz nichts mache, Traffic da ist, aber ohne Netzwerkkarte???
Verfasst: 24.08.2005 14:49
von Tafkadasom2k5
Lol....äh ja...
Also ich hab Modem und bei mir zeigt er beizeiten 18Kbyte/Sekunde an ...das wär ja mal echt geil..und im leerlauf zeicht er 1-3Kbyte/sekunde an....kann es sein das das standart traffic ist?das man den (je nach inet verbindung)abziehen muss weil er der traffic ist der die I-Net Verbindung intakt hält?
Maybe?Bloss wie findet man den raus?
@Agent
Ich glaube wir nähern uns dem Ziel....Up und Downstream zu trennen is ja nun ned mehr so schwer wenn man das hat was du gerade geproggt hast..und da sis ja nun wirklich ned sooo hohe Mathematik ^^
Bis denn
Marc
EDIT:
Aufruf einer DLL IST bei mir nötig weil:
GetTcpStatistics_() is not a function an array or an linked list...kA wieso... (PureBasic 3.92 Vollversion)
Verfasst: 24.08.2005 14:54
von freedimension
Das ist wahrscheinlich interner Traffic über die 127.0.0.1, es gibt da glaube ich ein paar Programme (auch Standard-Windows-Programme) die darüber Daten-Austauschen.
Verfasst: 24.08.2005 20:38
von Tafkadasom2k5
And what should i do now?
....bin irgendwie ratlos....kann man den Netzwerktraffic nicht auf eine bestimmte verbindung (z.B. Verbindung "Netzwerkadapter") reduzieren?
Komisch das man nur komplette Netzwerkstatistiken sieht....
Gr33tz
Tafkadasom2k5
Verfasst: 25.08.2005 07:26
von PAMKKKKK
Also im Englischen Forum wird da NetStat (Netzwerk Statistik) empfohlen.
Vielleicht hilfts weiter:
http://forums.purebasic.com/english/vie ... ht=netstat
ist ein guter Code...
Dein Grundproblem bleibt aber, du musst den Traffic anhand von IPs und Ports unterscheiden können.
Du musst dir also Filter bauen....
Da beschäftigst du dich am besten erstmal mit den IP-Nummer regeln.
Die IP 127.0.0.1 (localhost) ist z.B. nur Traffic der deinen Computer nie verlässt. (Interner Verkehr).
IPs die mit 192. oder 10. beginnen, sind Privat und werden im Internet nicht benutzt sondern nur in Firmen oder heimnetzen.
Diese IPs Interessieren dich also nicht.
Eine gute Erklärung findest du hier:
http://www.oreilly.de/german/freebooks/ ... tz0202.htm