NetStat

Partagez votre expérience de PureBasic avec les autres utilisateurs.
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

NetStat

Message par fweil »

Petite entorse à la règle, je n'ai pas traduit les commentaires ...

Je le ferai peut-être + tard, mais en attendant ce source, traduit d'un code VB, est bien pratique et fonctionne pour relever les stats réseau sur la machine locale.

Valable uniquement sous Windows.

Code : Tout sélectionner

Enumeration
  #Window_Main
  #Gadget_Editor
EndEnumeration

#MIB_TCP_STATE_CLOSED = 0
#MIB_TCP_STATE_LISTEN = 1
#MIB_TCP_STATE_SYN_SENT = 2
#MIB_TCP_STATE_SYN_RCVD = 3
#MIB_TCP_STATE_ESTAB = 4
#MIB_TCP_STATE_FIN_WAIT1 = 5
#MIB_TCP_STATE_FIN_WAIT2 = 6
#MIB_TCP_STATE_CLOSE_WAIT = 7
#MIB_TCP_STATE_CLOSING = 8
#MIB_TCP_STATE_LAST_ACK = 9
#MIB_TCP_STATE_TIME_WAIT = 10
#MIB_TCP_STATE_DELETE_TCB = 11

Structure MIB_IPSTATS
  dwForwarding.l ; IP forwarding enabled Or disabled
  dwDefaultTTL.l ; Default time-to-live
  dwInReceives.l ; datagrams received
  dwInHdrErrors.l ; received header errors
  dwInAddrErrors.l ; received address errors
  dwForwDatagrams.l ; datagrams forwarded
  dwInUnknownProtos.l ; datagrams with unknown protocol
  dwInDiscards.l ; received datagrams discarded
  dwInDelivers.l ; received datagrams delivered
  dwOutRequests.l
  dwRoutingDiscards.l
  dwOutDiscards.l ; sent datagrams discarded
  dwOutNoRoutes.l ; datagrams For which no route
  dwReasmTimeout.l ; datagrams For which all frags didn't arrive
  dwReasmReqds.l ; datagrams requiring reassembly
  dwReasmOks.l ; successful reassemblies
  dwReasmFails.l ; failed reassemblies
  dwFragOks.l ; successful fragmentations
  dwFragFails.l ; failed fragmentations
  dwFragCreates.l ; datagrams fragmented
  dwNumIf.l ; number of interfaces on computer
  dwNumAddr.l ; number of IP address on computer
  dwNumRoutes.l ; number of routes in routing table
EndStructure

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

Structure MIB_UDPSTATS
  dwInDatagrams.l ; received datagrams
  dwNoPorts.l ; datagrams For which no port
  dwInErrors.l ; errors on received datagrams
  dwOutDatagrams.l ; sent datagrams
  dwNumAddrs.l ; number of entries in UDP listener table
EndStructure

Structure MIBICMPSTATS
  dwMsgs.l ; number of messages
  dwErrors.l ; number of errors
  dwDestUnreachs.l ; destination unreachable messages
  dwTimeExcds.l ; time-to-live exceeded messages
  dwParmProbs.l ; parameter problem messages
  dwSrcQuenchs.l ; source quench messages
  dwRedirects.l ; redirection messages
  dwEchos.l ; echo requests
  dwEchoReps.l ; echo replies
  dwTimestamps.l ; timestamp requests
  dwTimestampReps.l ; timestamp replies
  dwAddrMasks.l ; address mask requests
  dwAddrMaskReps.l ; address mask replies
EndStructure

Structure MIBICMPINFO
  icmpInStats.MIBICMPSTATS ; stats For incoming messages
  icmpOutStats.MIBICMPSTATS ; stats For outgoing messages
EndStructure

Global ip.MIB_IPSTATS
Global tcp.MIB_TCPSTATS
Global udp.MIB_UDPSTATS
Global icmp.MIBICMPINFO

Global EOL.s, TAB.s
EOL = Chr(13) + Chr(10)
TAB = Chr(9)

Procedure.s Stats()
    txtOutput.s = ""
    If GetIpStatistics_(ip)
        txtOutput = txtOutput + "Unable to retrieve IP Statistics"
    Else
        txtOutput = txtOutput + "IP Statistics" + EOL + "==============================" + EOL
        txtOutput = txtOutput + "IP forwarding enabled or disabled:" + TAB + Str(ip\dwForwarding) + EOL
        txtOutput = txtOutput + "default time-to-live:" + TAB + Str(ip\dwDefaultTTL) + EOL
        txtOutput = txtOutput + "datagrams received:" + TAB + Str(ip\dwInReceives) + EOL
        txtOutput = txtOutput + "received header errors:" + TAB + Str(ip\dwInHdrErrors) + EOL
        txtOutput = txtOutput + "received address errors:" + TAB + Str(ip\dwInAddrErrors) + EOL
        txtOutput = txtOutput + "datagrams forwarded:" + TAB + Str(ip\dwForwDatagrams) + EOL
        txtOutput = txtOutput + "datagrams with unknown protocol:" + TAB + Str(ip\dwInUnknownProtos) + EOL
        txtOutput = txtOutput + "received datagrams discarded:" + TAB + Str(ip\dwInDiscards) + EOL
        txtOutput = txtOutput + "received datagrams delivered:" + TAB + Str(ip\dwInDelivers) + EOL
        txtOutput = txtOutput + "outgoing datagrams requested:" + TAB + Str(ip\dwOutRequests) + EOL
        txtOutput = txtOutput + "outgoing datagrams discarded:" + TAB + Str(ip\dwRoutingDiscards) + EOL
        txtOutput = txtOutput + "sent datagrams discarded:" + TAB + Str(ip\dwOutDiscards) + EOL
        txtOutput = txtOutput + "datagrams for which no route:" + TAB + Str(ip\dwOutNoRoutes) + EOL
        txtOutput = txtOutput + "datagrams for which all frags didn't arrive:" + TAB + Str(ip\dwReasmTimeout) + EOL
        txtOutput = txtOutput + "datagrams requiring reassembly:" + TAB + Str(ip\dwReasmReqds) + EOL
        txtOutput = txtOutput + "successful reassemblies:" + TAB + Str(ip\dwReasmOks) + EOL
        txtOutput = txtOutput + "failed reassemblies:" + TAB + Str(ip\dwReasmFails) + EOL
        txtOutput = txtOutput + "successful fragmentations:" + TAB + Str(ip\dwFragOks) + EOL
        txtOutput = txtOutput + "failed fragmentations:" + TAB + Str(ip\dwFragFails) + EOL
        txtOutput = txtOutput + "datagrams fragmented:" + TAB + Str(ip\dwFragCreates) + EOL
        txtOutput = txtOutput + "number of interfaces on computer:" + TAB + Str(ip\dwNumIf) + EOL
        txtOutput = txtOutput + "number of IP address on computer:" + TAB + Str(ip\dwNumAddr) + EOL
        txtOutput = txtOutput + "number of routes in routing table:" + TAB + Str(ip\dwNumRoutes) + EOL
        txtOutput = txtOutput + EOL
    EndIf
    
    If GetTcpStatistics_(tcp)
        txtOutput = txtOutput + "Unable to retrieve TCP Statistics"
    Else
        txtOutput = txtOutput + "TCP Statistics" + EOL + "==============================" + EOL
        txtOutput = txtOutput + "timeout algorithm:" + TAB + Str(tcp\dwRtoAlgorithm) + EOL
        txtOutput = txtOutput + "minimum timeout:" + TAB + Str(tcp\dwRtoMin) + EOL
        txtOutput = txtOutput + "maximum timeout:" + TAB + Str(tcp\dwRtoMax) + EOL
        txtOutput = txtOutput + "maximum connections:" + TAB + Str(tcp\dwMaxConn) + EOL
        txtOutput = txtOutput + "active opens:" + TAB + Str(tcp\dwActiveOpens) + EOL
        txtOutput = txtOutput + "passive opens:" + TAB + Str(tcp\dwPassiveOpens) + EOL
        txtOutput = txtOutput + "failed attempts:" + TAB + Str(tcp\dwAttemptFails) + EOL
        txtOutput = txtOutput + "establised connections reset:" + TAB + Str(tcp\dwEstabResets) + EOL
        txtOutput = txtOutput + "established connections:" + TAB + Str(tcp\dwCurrEstab) + EOL
        txtOutput = txtOutput + "segments received:" + TAB + Str(tcp\dwInSegs) + EOL
        txtOutput = txtOutput + "segment sent:" + TAB + Str(tcp\dwOutSegs) + EOL
        txtOutput = txtOutput + "segments retransmitted:" + TAB + Str(tcp\dwRetransSegs) + EOL
        txtOutput = txtOutput + "incoming errors:" + TAB + Str(tcp\dwInErrs) + EOL
        txtOutput = txtOutput + "outgoing resets:" + TAB + Str(tcp\dwOutRsts) + EOL
        txtOutput = txtOutput + "cumulative connections:" + TAB + Str(tcp\dwNumConns) + EOL
        txtOutput = txtOutput + EOL
    EndIf

    If GetUdpStatistics_(udp)
        txtOutput = txtOutput + "Unable to retrieve UDP Statistics"
    Else
        txtOutput = txtOutput + "UDP Statistics" + EOL + "==============================" + EOL
        txtOutput = txtOutput + "received datagrams:" + TAB + Str(udp\dwInDatagrams) + EOL
        txtOutput = txtOutput + "datagrams for which no port:" + TAB + Str(udp\dwNoPorts) + EOL
        txtOutput = txtOutput + "errors on received datagrams:" + TAB + Str(udp\dwInErrors) + EOL
        txtOutput = txtOutput + "sent datagrams:" + TAB + Str(udp\dwOutDatagrams) + EOL
        txtOutput = txtOutput + "number of entries in UDP listener table:" + TAB + Str(udp\dwNumAddrs) + EOL
        txtOutput = txtOutput + EOL
    EndIf

    If GetIcmpStatistics_(icmp)
        txtOutput = txtOutput + "Unable to retrieve ICMP Statistics"
    Else
        txtOutput = txtOutput + "ICMP Statistics" + EOL + "==============================" + EOL
        txtOutput = txtOutput + "*****  In  *****" + EOL
        txtOutput = txtOutput + "number of messages:" + TAB + Str(icmp\icmpInStats\dwMsgs) + EOL
        txtOutput = txtOutput + "number of errors:" + TAB + Str(icmp\icmpInStats\dwErrors) + EOL
        txtOutput = txtOutput + "destination unreachable messages:" + TAB + Str(icmp\icmpInStats\dwDestUnreachs) + EOL
        txtOutput = txtOutput + "time-to-live exceeded messages:" + TAB + Str(icmp\icmpInStats\dwTimeExcds) + EOL
        txtOutput = txtOutput + "parameter problem messages:" + TAB + Str(icmp\icmpInStats\dwParmProbs) + EOL
        txtOutput = txtOutput + "source quench messages:" + TAB + Str(icmp\icmpInStats\dwSrcQuenchs) + EOL
        txtOutput = txtOutput + "redirection messages:" + TAB + Str(icmp\icmpInStats\dwRedirects) + EOL
        txtOutput = txtOutput + "echo requests:" + TAB + Str(icmp\icmpInStats\dwEchos) + EOL
        txtOutput = txtOutput + "echo replies:" + TAB + Str(icmp\icmpInStats\dwEchoReps) + EOL
        txtOutput = txtOutput + "timestamp requests:" + TAB + Str(icmp\icmpInStats\dwTimestamps) + EOL
        txtOutput = txtOutput + "timestamp replies:" + TAB + Str(icmp\icmpInStats\dwTimestampReps) + EOL
        txtOutput = txtOutput + "address mask requests:" + TAB + Str(icmp\icmpInStats\dwAddrMasks) + EOL
        txtOutput = txtOutput + "address mask replies:" + TAB + Str(icmp\icmpInStats\dwAddrMaskReps) + EOL
        txtOutput = txtOutput + EOL
        txtOutput = txtOutput + "*****  Out  *****" + EOL
        txtOutput = txtOutput + "number of messages:" + TAB + Str(icmp\icmpOutStats\dwMsgs) + EOL
        txtOutput = txtOutput + "number of errors:" + TAB + Str(icmp\icmpOutStats\dwErrors) + EOL
        txtOutput = txtOutput + "destination unreachable messages:" + TAB + Str(icmp\icmpOutStats\dwDestUnreachs) + EOL
        txtOutput = txtOutput + "time-to-live exceeded messages:" + TAB + Str(icmp\icmpOutStats\dwTimeExcds) + EOL
        txtOutput = txtOutput + "parameter problem messages:" + TAB + Str(icmp\icmpOutStats\dwParmProbs) + EOL
        txtOutput = txtOutput + "source quench messages:" + TAB + Str(icmp\icmpOutStats\dwSrcQuenchs) + EOL
        txtOutput = txtOutput + "redirection messages:" + TAB + Str(icmp\icmpOutStats\dwRedirects) + EOL
        txtOutput = txtOutput + "echo requests:" + TAB + Str(icmp\icmpOutStats\dwEchos) + EOL
        txtOutput = txtOutput + "echo replies:" + TAB + Str(icmp\icmpOutStats\dwEchoReps) + EOL
        txtOutput = txtOutput + "timestamp requests:" + TAB + Str(icmp\icmpOutStats\dwTimestamps) + EOL
        txtOutput = txtOutput + "timestamp replies:" + TAB + Str(icmp\icmpOutStats\dwTimestampReps) + EOL
        txtOutput = txtOutput + "address mask requests:" + TAB + Str(icmp\icmpOutStats\dwAddrMasks) + EOL
        txtOutput = txtOutput + "address mask replies:" + TAB + Str(icmp\icmpOutStats\dwAddrMaskReps) + EOL
        txtOutput = txtOutput + EOL
    EndIf
    ProcedureReturn txtOutput
EndProcedure

  WindowXSize = 640
  WindowYSize = 480
  Quit = #FALSE
  If OpenWindow(#Window_Main, 0, 0, WindowXSize, WindowYSize, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "NetStats")
      AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
      If CreateGadgetList(WindowID())
          EditorGadget (#Gadget_Editor, 10, 10, WindowXSize - 20, WindowYSize - 20, #PB_Container_Raised)
      EndIf
      SetGadgetText(#Gadget_Editor, Stats())
      Repeat
        Select WaitWindowEvent()
          Case #PB_Event_CloseWindow
            Quit = #TRUE
          Case #PB_Event_Menu
            Select EventMenuID()
              Case #PB_Shortcut_Escape
                Quit = #TRUE
            EndSelect
        EndSelect
      Until Quit
      CloseWindow(#Window_Main)
  EndIf
  TerminateProcess_(GetCurrentProcess_(), 0)
End      
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.