Page 1 sur 1

NetStat

Publié : sam. 29/mai/2004 16:19
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