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? :oops:
Sry ich steh heute n bissl aufm Schlauch.....-bin eben noch n blutiger Anfänger.... :cry: aber ich hoffe bald ned mehr ^^

Danke auf jeden ersmal für alle Antworten und für alle (hoffentlich) baldigen :allright: :allright: :allright:

Hab euch schon alle ganz doll lieb gewonnen hier.... :D 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 :allright:

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 ^^ :allright:

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
:iamwithstupid:

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.... :freak:


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