Seite 1 von 2

Ping, die X.te

Verfasst: 19.08.2009 00:11
von netzer
oder auch "Geben ist seeliger denn nehmen" (sprach der Boxer).

In diesem Sinne mal ein Code von mir (gesammelt und verfeinert).
Es handelt sich um ein Ping-Programm mit erweitereten Einstellmöglichkeiten für die Parameter (Anzahl und Bytegröße).
Ich plane noch ein paar Ergänzungen, z.B. Timeout-Parameter, Don't fragment, usw. Außerdem folgt noch eine Pingstatistik...

Anregungen, Tipps, Verbesserungen sind herzlich willkommen

Gruß vom Netzer

Version 0.3
- netstat implementiert
- Verbesserung an der Netzwerkübersicht (Lease Time)

Code: Alles auswählen

; 42 - LAN-Lab 0.3 by netzer
; PB 4.30 - nur lauffähig unter Windows (WinAPI)
; 
; Diverse Codeschnipsel aus den PB-Foren entnommen
; Danke an alle Autoren!


EnableExplicit
  Define Memory.MEMORYSTATUS
  Define bussystem.s
  Define screenresolution.s
  Define comname.s
  Define username.s
  Define a.l
  Define b.l
  Define c.l
  Define quit
  Define host.s
  Define sel_ip
  Define my_size.l
  Define Start
  Define no_loop
  Define my_byte.s
  Define durchlauf_eins.s
  Define durchlauf_zwei.s
  Define Event.l


ImportC "msvcrt.lib" 
  asctime.l(a.l) 
  localtime.l(a.l) 
  strftime.l(a.l,b.l,c.p-ascii,d.l) 
EndImport 
  

  
Enumeration     
  #Window_Main 
  #Window_Ping_Error
  #Window_Web_About
  #output_tracert
EndEnumeration   
  
Global output_data_ping.s  
Global output_data_trace.s
Global version_nr.s


  
  
  
  #MAX_ADAPTER_NAME_LENGTH=256 
  #MAX_ADAPTER_DESCRIPTION_LENGTH=128 
  #MAX_ADAPTER_ADDRESS_LENGTH=8 
  
  #MIB_IF_TYPE_OTHER     = 0 
  #MIB_IF_TYPE_ETHERNET  = 1 
  #MIB_IF_TYPE_TOKENRING = 2 
  #MIB_IF_TYPE_FDDI      = 3 
  #MIB_IF_TYPE_PPP       = 4 
  #MIB_IF_TYPE_LOOPBACK  = 5 
  #MIB_IF_TYPE_SLIP      = 6 
  
  #AF_INET = 2 ;IPV4 
  #AF_INET6 = 23 ;IPV6 
  
  #TCP_TABLE_BASIC_LISTENER = 0 
  #TCP_TABLE_BASIC_CONNECTIONS = 1 
  #TCP_TABLE_BASIC_ALL = 2 
  #TCP_TABLE_OWNER_PID_LISTENER = 3 
  #TCP_TABLE_OWNER_PID_CONNECTIONS = 4 
  #TCP_TABLE_OWNER_PID_ALL = 5 
  #TCP_TABLE_OWNER_MODULE_LISTENER = 6 
  #TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7 
  #TCP_TABLE_OWNER_MODULE_ALL = 8 
  
  #UDP_TABLE_BASIC = 0 
  #UDP_TABLE_OWNER_PID = 1 
  #UDP_TABLE_OWNER_MODULE = 0  
  
  Structure IP_ADDR_STRING 
    pNext.l 
    IpAddress.b[16] 
    IpMask.b[16] 
    Context.l 
  EndStructure 
   
  
  Structure IP_ADAPTER_INFO 
    pNext.l 
    ComboIndex.l 
    AdapterName.b[#MAX_ADAPTER_NAME_LENGTH+4] 
    Description.b[#MAX_ADAPTER_DESCRIPTION_LENGTH+4] 
    AddressLength.l 
    Address.b[#MAX_ADAPTER_ADDRESS_LENGTH] 
    Index.l 
    Type.l 
    DhcpEnabled.l 
    CurrentIpAddressPTR.l 
    IpAddressList.IP_ADDR_STRING 
    GatewayList.IP_ADDR_STRING 
    DhcpServer.IP_ADDR_STRING 
    HaveWins.l 
    PrimaryWinsServer.IP_ADDR_STRING 
    SecondaryWinsServer.IP_ADDR_STRING 
    LeaseObtained.l 
    LeaseExpires.l 
  EndStructure 
  
  Structure MyIP_ADAPTER_INFO 
    AdapterName.s 
    Description.s 
    MACAddress.s 
    IPAdress.s 
  EndStructure 
  
  Structure IP_PER_ADAPTER_INFO 
   AutoconfigEnabled.i  
   AutoconfigActive.i 
   *CurrentDnsServer 
   DnsServerList.IP_ADDR_STRING 
EndStructure 

Structure MIB_TCPTABLE_OWNER_PID 
  dwStats.l 
  dwLocalAddr.l 
  dwLocalPort.l 
  dwRemoteAddr.l 
  dwRemotePort.l 
  dwOwningPid.l 
EndStructure 

Structure MIB_TCPTABLE 
  dwNumEntries.l 
  table.MIB_TCPTABLE_OWNER_PID[2048] 
EndStructure 


Structure MIB_UDPTABLE_OWNER_PID 
  dwLocalAddr.l 
  dwLocalPort.l 
  dwOwningPid.l 
EndStructure 

Structure MIB_UDPTABLE 
  dwNumEntries.l 
  table.MIB_UDPTABLE_OWNER_PID[2048] 
EndStructure 

GlobalMemoryStatus_(Memory.MEMORYSTATUS)
bussystem.s = Str(Memory\dwLength) + " Bit"

screenresolution.s = Str(GetSystemMetrics_(#SM_CXSCREEN))+"x"+Str(GetSystemMetrics_(#SM_CYSCREEN))

InitNetwork() 

version_nr = "0.3"

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Procedure ping_error()

OpenWindow(#Window_Ping_Error, 300, 100, 500, 400, "Ping-Fehlermeldung", #PB_Window_SystemMenu)

  EditorGadget(1, 8, 10, 480, 380, #PB_Editor_ReadOnly)
  SetGadgetColor(1, #PB_Gadget_BackColor, $000000)
  SetGadgetColor(1, #PB_Gadget_FrontColor, $FFFFFF)
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11001")
  AddGadgetItem(1, -1, "The reply buffer was too small")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11002")
  AddGadgetItem(1, -1, "The destination network was unreachable")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11003")
  AddGadgetItem(1, -1, "The destination host was unreachable")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11004")
  AddGadgetItem(1, -1, "The destination protocol was unreachable")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11005")
  AddGadgetItem(1, -1, "The destination port was unreachable")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11006")
  AddGadgetItem(1, -1, "11004")
  AddGadgetItem(1, -1, "Insufficient IP resources were available")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11007")
  AddGadgetItem(1, -1, "A bad IP option was specified")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11008")
  AddGadgetItem(1, -1, "A hardware error occurred")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11009")
  AddGadgetItem(1, -1, "The packet was too big")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11010")
  AddGadgetItem(1, -1, "The request timed out")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11011")
  AddGadgetItem(1, -1, "A bad request")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11012")
  AddGadgetItem(1, -1, "A bad route")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11013")
  AddGadgetItem(1, -1, "The time to live (TTL) expired in transit")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11014")
  AddGadgetItem(1, -1, "The time to live expired during fragment reassembly")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11015")
  AddGadgetItem(1, -1, "A parameter problem")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11016")
  AddGadgetItem(1, -1, "Datagrams are arriving too fast to be processed and datagrams may have been discarded")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11017")
  AddGadgetItem(1, -1, "An IP option was too big")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11018")
  AddGadgetItem(1, -1, "A bad destination")
  AddGadgetItem(1, -1, "")
  AddGadgetItem(1, -1, "11050")
  AddGadgetItem(1, -1, "A general failure. This error can be returned for some malformed ICMP packets")
  AddGadgetItem(1, -1, "")
  
EndProcedure

Procedure about()
  
  Protected about_html.s
  
  about_html = "<html><head><title>42 - die Antwort...</title></head>"
  about_html + "<body><font face='Arial'><br><h2 align='center'>42 - LAN-Lab</h2>"
  about_html + "<h3 align='center'>die Antwort auf die Frage nach dem Leben, dem Universum und allem!</h3>"
  about_html + "<h6 align='center'><a href='http://de.wikipedia.org/wiki/42_(Antwort)' target='_blank'>Mehr dazu hier</a></h6>"
  about_html + "<br><h4 align='center'>"
  about_html + "42 - LAN-Lab geschrieben von netzer (copy&code) in <a href='http://www.purebasic.com' target='_blank'>PureBasic</a><br>"
  about_html + "<br>Dank an alle <a href='http://www.purebasic.fr/german/index.php' target='_blank'>PureBoard</a>-Mitglieder für ihre Unterstützung."
  about_html + "<br><br>Die Nutzung ist frei und erfolgt auf eigene Gefahr!<br>Version " + version_nr + "</h4>"
  about_html + "</font></body></html>" 
    
  OpenWindow(#Window_Web_About, 300, 100, 500, 400, "42 - die Antwort...", #PB_Window_SystemMenu)
  
    WebGadget(1, 8, 10, 485, 385, "")
    SetGadgetItemText(1, #PB_Web_HtmlCode, about_html)
  
EndProcedure

Procedure DNS_Lookup(host.s) 
  Protected *host.hostent, ret.l 
  *host = gethostbyname_(host) 
  If *host 
    ret = PeekL(PeekL(*host\h_addr_list)) 
  Else 
    ret = *host 
  EndIf 
  ProcedureReturn ret 
EndProcedure

Procedure SetColor(Gadget, Color) 
   Protected format.CHARFORMAT2, sel.CHARRANGE, sel_saved.CHARRANGE 

   format\cbSize      = SizeOf(CHARFORMAT2) 
   format\dwMask      = #CFM_COLOR 
   format\crTextColor = Color 
   SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

Procedure.s byte_size(in_size)
  Protected default_byte.s
  Protected my_byte.s
  ; Microsoft default data for 32 Byte packet = abcdefghijklmnopqrstuvwabcdefghi
  default_byte.s = "thequickbrownfoxjumpsoverthelazydog" 
  
  ;Debug in_size
  
  If (in_size > 35)
    Repeat
      default_byte.s + default_byte.s
    Until Len(default_byte.s) > in_size
  EndIf 
  
  
  my_byte.s = Left(default_byte, in_size)
  ;Debug "my_byte = " + my_byte
  ;Debug "Summe = " + Str(Len(my_byte))
  
  ProcedureReturn my_byte.s

EndProcedure

Procedure.s user()
  Protected buffer.s, bufsize.l, username.s
  buffer.s = Space(1024) 
  bufsize.l = 1024 
  GetUserName_(@buffer, @bufsize)
  username.s = buffer
  ProcedureReturn username
EndProcedure

Procedure.s result(c)

  SetColor(14, #White)
  AddGadgetItem(14, -1, "Anzahl gesendeter Pings: " + Str(c))
  AddGadgetItem(14, -1, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++")
  SendMessage_(GadgetID(14),#EM_SCROLL,#SB_BOTTOM,0) 

EndProcedure

Procedure.s name()
  Protected buffer.s
  Protected bufsize.l
  Protected comname.s
  buffer.s = Space(1024) 
  bufsize.l = 1024 
  GetComputerName_(@buffer, @bufsize)
  comname.s = buffer
  ProcedureReturn comname
EndProcedure

Procedure.s ping(in_ip, i, EchoMessage.s)
  Protected ResultSize.l, *Result, *Echo.ICMP_ECHO_REPLY, hFile.l, lngResult.l
  Protected ping_result.s, flag.s 
  ResultSize.l = SizeOf(ICMP_ECHO_REPLY) + Len(EchoMessage) 
  *Result = AllocateMemory(ResultSize) 
  *Echo.ICMP_ECHO_REPLY = *Result 
  
        hFile.l = IcmpCreateFile_() 
        
        lngResult.l = IcmpSendEcho_(hFile, in_ip, EchoMessage, Len(EchoMessage), 0, *Result, ResultSize, 20) 
        ping_result.s = "Ping " + Str(i) + " an " + IPString(*Echo\Address) + "   Bytes: " + Str(*Echo\DataSize) + "   Zeit: " + Str(*Echo\RoundTripTime) + " ms    TTL: " + Str(*Echo\Options\Ttl)
        
        If Str(Len(EchoMessage.s)) = Str(*Echo\DataSize)
          flag.s = "0"
          output_data_ping.s = flag.s + ping_result.s
          
        Else
          flag.s = "1"
          output_data_ping.s = flag.s + "Keine Antwort von Zieladresse" + "  Fehlercode: " + StrU(*Echo\Status)
        
        EndIf 
        
                  
      IcmpCloseHandle_(hFile) 
  
  FreeMemory(*Result)
 
  ProcedureReturn output_data_ping.s
EndProcedure

Procedure.s GetDNSInfo(Index) 
   Protected Result, Length, *Buffer, *iplist.IP_ADDR_STRING, *ipinfo.IP_PER_ADAPTER_INFO 
   Protected DNSVar.s
   Result = GetPerAdapterInfo_(Index, 0, @Length) ; Get the length for Buffer 
   If Result = #ERROR_BUFFER_OVERFLOW And Length 
      *Buffer = AllocateMemory(Length) 
      If *Buffer 
         If GetPerAdapterInfo_(Index, *Buffer, @Length) = #ERROR_SUCCESS 
            *ipinfo = *Buffer 
            ;Debug *ipinfo\AutoconfigEnabled 
            ;Debug *ipinfo\AutoconfigActive 

            *iplist = *ipinfo\DnsServerList 

            While *iplist 
               ;Debug PeekS(@*iplist\IpAddress, -1, #PB_Ascii) 
               DNSVar.s = DNSVar+Chr(13)+"DNS Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
               *iplist = *iplist\pNext 
            Wend 
         EndIf 
         FreeMemory(*Buffer) 
      EndIf 
   EndIf 
   ProcedureReturn DNSVar 
EndProcedure 

Procedure.s netcheck() 
  Protected LanVar.s, length.l, Result, *Buffer, *ipinfo.IP_ADAPTER_INFO
  Protected *iplist.IP_ADDR_STRING, dnssrv.s, mac.s, i, byte.b, *Buffer2
  
  LanVar.s = "" 
  length.l=0 
  Result=GetAdaptersInfo_(0,@length) ; Get the length for Buffer 
  If Result=#ERROR_BUFFER_OVERFLOW And length 
    *Buffer=AllocateMemory(length) 
    If *Buffer And GetAdaptersInfo_(*Buffer,@length)=#ERROR_SUCCESS 
      *ipinfo.IP_ADAPTER_INFO=*Buffer 
      
      Global NewList MyIPAdapterList.MyIP_ADAPTER_INFO() ; declare list here 
      
      While *ipinfo 
        
        AddElement(MyIPAdapterList()) ; add one element 
        ;Debug "++++++++++++++++++++++++++++" 
        ;Debug "Index : "+Str(*ipinfo\Index) 
  
        ;Debug "Name : "+PeekS(@*ipinfo\AdapterName,-1,#PB_Ascii) 
        MyIPAdapterList()\AdapterName=PeekS(@*ipinfo\AdapterName,-1,#PB_Ascii) 
        MyIPAdapterList()\Description=PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        ;Debug "Desc : "+PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        LanVar = LanVar+Chr(13)+PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        
                ;MAC-Adress 
        If *ipinfo\AddressLength 
          mac.s="" 
          For i=0 To *ipinfo\AddressLength-1 
            If i 
              mac.s+":" 
            EndIf 
            byte.b=PeekB(@*ipinfo\Address+i) 
            If byte>=0 
              mac.s+RSet(Hex(byte),2,"0") 
            Else 
              mac.s+RSet(Hex(byte+256),2,"0") 
            EndIf 
          Next 
          ;Debug "MAC-Address "+mac$ 
          LanVar = LanVar+Chr(13)+"MAC-Address "+mac.s 
          MyIPAdapterList()\MACAddress=mac.s 
        EndIf 
        
        
       ;IP-Adress 
        *iplist.IP_ADDR_STRING=*ipinfo\IpAddressList 
        
        
        
        While *iplist 
          ;Debug "IP-Adress : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          LanVar = LanVar+Chr(13)+"IP-Adress : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          MyIPAdapterList()\IPAdress+PeekS(@*iplist\IpAddress,-1,#PB_Ascii)+Chr(13) 
          *iplist.IP_ADDR_STRING=*iplist\pNext 
        Wend 
        ;Gateway 
        *iplist.IP_ADDR_STRING=*ipinfo\GatewayList 
        While *iplist 
          ;Debug "Gateway : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          LanVar = LanVar+Chr(13)+"Gateway : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          *iplist.IP_ADDR_STRING=*iplist\pNext 
        Wend 
        ;Wins 
        If *ipinfo\HaveWins 
          ;PrimaryWinsServer 
          *iplist.IP_ADDR_STRING=*ipinfo\PrimaryWinsServer 
          While *iplist 
            ;Debug "P-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"P-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
          ;SecondaryWinsServer 
          *iplist.IP_ADDR_STRING=*ipinfo\SecondaryWinsServer 
          While *iplist 
            ;Debug "S-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"S-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
        EndIf 
        ;DHCP 
        If *ipinfo\DhcpEnabled 
          ;DhcpServer 
          *iplist.IP_ADDR_STRING=*ipinfo\DhcpServer 
          While *iplist 
            ;Debug "DHCP Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"DHCP Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
         
        ;DNS Server 
        dnssrv.s = GetDNSInfo(*ipinfo\Index) 
        LanVar=LanVar+dnssrv         
         
          
        ;LeaseObtained 
        *Buffer2=AllocateMemory(#MAXCHAR) 
        If *Buffer2 
          strftime(*Buffer2,#MAXCHAR,"%d.%m.%Y %H:%M:%S",localtime(@*ipinfo\LeaseObtained)) 
          LanVar = LanVar+Chr(13)+"Lease obtained : " + PeekS(*Buffer2,-1,#PB_Ascii) 
          ;Debug "Lease optained : "+PeekS(*Buffer2,-1,#PB_Ascii) 
          FreeMemory(*Buffer2) 
        EndIf 
  
        ;LeaseExpires 
        *Buffer2=AllocateMemory(#MAXCHAR) 
        If *Buffer2 
          strftime(*Buffer2,#MAXCHAR,"%d.%m.%Y %H:%M:%S",localtime(@*ipinfo\LeaseExpires))
          LanVar = LanVar+Chr(13)+"Lease expires : " + PeekS(*Buffer2,-1,#PB_Ascii)
          ;Debug "Lease expires : "+PeekS(*Buffer2,-1,#PB_Ascii) 
          FreeMemory(*Buffer2) 
        EndIf 
  
        Else 
          ;Debug "STATIC IP Configuration" 
          LanVar = LanVar+Chr(13)+"STATIC IP Configuration" 
        EndIf 

        LanVar+Chr(13)      

        *ipinfo.IP_ADAPTER_INFO=*ipinfo\pNext
         
      Wend 
      
  
      
    Else 
      ;Debug "GetLastError="+Str(GetLastError_()) 
    EndIf 
    
    If *Buffer 
      FreeMemory(*Buffer) 
    EndIf 
    ;Debug LanVar 
  EndIf 
  ;Debug LanVar 
  ProcedureReturn LanVar 
  
EndProcedure 
 
Procedure.s clear_screen(screen_gadget)
  
  ClearGadgetItems(screen_gadget)

EndProcedure

Procedure TraceRoute ( sIPAddress.s, MaxHops.l, DNS.b ) 
  Protected dummy.s, EchoMessage.s, ResultSize.l, *Result, *Echo.ICMP_ECHO_REPLY, ip_option.IP_OPTION_INFORMATION
  Protected hFile.l, IPAddress.l, ttl_int, Echo_Result.l, counter.l, Count, bip, *retval, Event
   
  EchoMessage  = "echo" 
  ResultSize.l = SizeOf(ICMP_ECHO_REPLY) + Len(EchoMessage) 
  *Result = AllocateMemory(ResultSize) 
  *Echo.ICMP_ECHO_REPLY = *Result 
  ip_option.IP_OPTION_INFORMATION 
  If sIPAddress 
    ClearGadgetItems(32) 
    hFile.l     = IcmpCreateFile_() 
    IPAddress.l = inet_addr_(sIPAddress) 
    For ttl_int = 1 To MaxHops 
      ip_option\Ttl = ttl_int 
      Echo_Result.l = 0 
      counter.l     = 0 
      While Echo_Result = 0 And counter < 3 
        counter + 1 
        Echo_Result = IcmpSendEcho_(hFile, IPAddress, EchoMessage, Len(EchoMessage), ip_option, *Result, ResultSize, 1500) 
        If Echo_Result = 1 
          Count + 1 
          dummy = Str(Count) + Chr(10) + StrU(*Echo\RoundTripTime, 2) + Chr(10) 
          dummy + IPString(*Echo\Address) + Chr(10) 
          If DNS 
            bip = *Echo\Address 
            *retval = gethostbyaddr_(@bip, 4, #AF_INET) 
            If *retval > 0 
              dummy + PeekS(PeekL(*retval)) 
            EndIf 
          EndIf 
          AddGadgetItem(32, -1, dummy ) 
          If *Echo\Status = 0 : Break 2 : EndIf 
        EndIf 
        Repeat 
          Event = WindowEvent() 
          If Event = #PB_Event_Gadget And EventGadget() = 31 
            Break 3 
          EndIf 
        Until Not Event 
      Wend 
      If Echo_Result = 0 
        dummy = Str(Count) + Chr(10) + StrU(*Echo\RoundTripTime, 2) + Chr(10) 
        dummy + IPString(*Echo\Address) + Chr(10) + "Unknown Address" 
        AddGadgetItem(32, -1, dummy)
        SendMessage_(GadgetID(32),#EM_SCROLL,#SB_BOTTOM,0) 
      EndIf 
    Next 
    IcmpCloseHandle_(hFile) 
  EndIf 
EndProcedure 

Procedure.s netstat()
  Protected str_netstat.s, status, TCPstate, dwSize, tcpTable.MIB_TCPTABLE 
  Protected cnt, udpTable.MIB_UDPTABLE
  
  Dim TCPstate.s(15)
   
  For status = 1 To 15 
    TCPstate(status) = StringField("Closed|Listening|SYN Sent|SYN Received|Established|Waiting For FIN|Waiting For FIN|Waiting For Close|Closing|Last ACK|Time Wait|TCB deleted", status, "|") 
  Next
  
  ClearGadgetItems(51)

  If OpenLibrary(0, "iphlpapi.dll") 
      dwSize = $0 
      If CallFunction(0,"GetExtendedTcpTable",@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0)    
      If CallFunction(0,"GetExtendedTcpTable",@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0) = #NO_ERROR 
          For cnt = 0 To tcpTable\dwNumEntries - 1 
              str_netstat = "TCP" + Chr(10)
              str_netstat + IPString(tcpTable\table[cnt]\dwLocalAddr) + ":" + Str(htons_(tcpTable\table[cnt]\dwLocalPort)) + Chr(10)
              str_netstat + IPString(tcpTable\table[cnt]\dwRemoteAddr) + ":" + Str(htons_(tcpTable\table[cnt]\dwRemotePort)) + Chr(10)
              str_netstat + Str(tcpTable\table[cnt]\dwOwningPid) + Chr(10)
              str_netstat + TCPstate(tcpTable\table[cnt]\dwStats) + Chr(10)
              AddGadgetItem(51, -1, str_netstat)
              SendMessage_(GadgetID(51),#EM_SCROLL,#SB_BOTTOM,0)
          Next 
      EndIf 
      EndIf 
      
      dwSize = $0 
      If CallFunction(0,"GetExtendedUdpTable",@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) 
      If CallFunction(0,"GetExtendedUdpTable",@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) = #NO_ERROR 
          For cnt = 0 To udpTable\dwNumEntries - 1 
              str_netstat = "UDP" + Chr(10)
              str_netstat + IPString(udpTable\table[cnt]\dwLocalAddr) + ":" + Str(htons_(udpTable\table[cnt]\dwLocalPort)) + Chr(10)
              str_netstat + "*:*" + Chr(10)
              str_netstat + Str(udpTable\table[cnt]\dwOwningPid) + Chr(10)
              str_netstat + Chr(10)
              AddGadgetItem(51, -1, str_netstat)
              SendMessage_(GadgetID(51),#EM_SCROLL,#SB_BOTTOM,0)
          Next 
      EndIf 
      EndIf 
        
      CloseLibrary(0) 
  EndIf 
  

  

EndProcedure

If OpenWindow(0, 100, 50, 600, 400, "LAN-Lab", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) 
    comname.s = name()
    username.s = user()
    SetTimer_(WindowID(0), 0, 500, 1)
    a.l = 0
    b.l = 0 
    c.l = 0
    PanelGadget(0, 8, 8, 582, 360)
    
      AddGadgetItem (0, -1, "Netzwerk")
      TextGadget  (1, 10, 15, 200, 20, "Hostname: ")
      StringGadget(2,80,15,200,20,comname.s,#PB_String_ReadOnly)
      TextGadget  (3, 10, 40, 200, 20, "Username: ")
      StringGadget(4,80,40,200,20,username.s,#PB_String_ReadOnly)
      ButtonGadget(5, 300, 15, 100, 45, "Refresh Network   (auto 10 sec)", #PB_Button_MultiLine)
      ButtonGadget(7, 420, 15, 100, 45, "c:\     (DOS-Fenster)", #PB_Button_MultiLine)
      EditorGadget(9, 8, 65, 560, 260, #PB_Editor_ReadOnly)
      SetGadgetColor(9, #PB_Gadget_FrontColor, $FFFFFF)
      SetGadgetColor(9, #PB_Gadget_BackColor, $000000)
      SetGadgetText(9, netcheck()) 

    
      AddGadgetItem (0, -1,"Ping")  
      ComboBoxGadget(10, 10, 25, 220, 20, #PB_ComboBox_Editable)
      AddGadgetItem(10, -1,"192.168.1.1")
      AddGadgetItem(10, -1,"10.10.10.1")
      AddGadgetItem(10, -1,"www.google.com")
      ButtonGadget(11, 10, 55, 50, 20, "Ping", #PB_Button_Default)
      AddKeyboardShortcut(0, #PB_Shortcut_Return, 20)
      TextGadget  (12, 300, 12, 50, 20, "Anzahl")
      ComboBoxGadget(13, 300, 25, 60, 21, #PB_ComboBox_Editable)
      AddGadgetItem(13, -1,"1")
      AddGadgetItem(13, -1,"2")
      AddGadgetItem(13, -1,"4")
      AddGadgetItem(13, -1,"10")
      AddGadgetItem(13, -1,"50")
      AddGadgetItem(13, -1,"Dauer")
      SetGadgetState(13, 2)
      EditorGadget(14, 8, 95, 560, 230, #PB_Editor_ReadOnly)
      SetGadgetColor(14, #PB_Gadget_FrontColor, $FFFFFF)
      SetGadgetColor(14, #PB_Gadget_BackColor, $000000)
      StringGadget(15, 240, 25, 50, 20, "32", #PB_String_Numeric)
      TextGadget  (16, 240, 12, 50, 20, "Bytegröße")
      TextGadget  (17, 10, 12, 50, 20, "Adresse")
      ButtonGadget(18, 180, 55, 50, 20, "Clear") 
      clear_screen(14)   
      
      AddGadgetItem (0, -1,"Traceroute")
      ComboBoxGadget(30, 10, 25, 220, 20, #PB_ComboBox_Editable)
      AddGadgetItem(30, -1,"192.168.1.1")
      AddGadgetItem(30, -1,"10.10.10.1")
      AddGadgetItem(30, -1,"www.google.com")
      ButtonGadget(31, 10, 55, 100, 20, "Trace Route")
      ListIconGadget(32, 8, 95, 560, 230, "Nr.", 50)
      AddGadgetColumn(32, 1, "RTT", 80) 
      AddGadgetColumn(32, 2, "IP", 100) 
      AddGadgetColumn(32, 3, "Name", 265) 
      SetGadgetColor(32, #PB_Gadget_FrontColor, $FFFFFF)
      SetGadgetColor(32, #PB_Gadget_BackColor, $000000)
      ButtonGadget(33, 180, 55, 50, 20, "Clear") 
      clear_screen(32)  
      TextGadget  (34, 10, 12, 50, 20, "Adresse")
      CheckBoxGadget(35, 300,  25, 250, 20, "DNS auflösen") 
      StringGadget(36, 240, 25, 50, 20, "32", #PB_String_Numeric) 
      TextGadget  (37, 240, 12, 50, 20, "max. Hops") 
      
      AddGadgetItem (0, -1,"Netstat") 
      ButtonGadget(50, 30, 15, 80, 20, "Netstat", #PB_Button_MultiLine)
      ListIconGadget(51, 8, 45, 560, 280, "Protokoll", 60)
      AddGadgetColumn(51, 1, "local Address:Port", 190) 
      AddGadgetColumn(51, 2, "remote Address:Port", 190) 
      AddGadgetColumn(51, 3, "PID", 40)
      AddGadgetColumn(51, 4, "Status", 100)
      SetGadgetColor(51, #PB_Gadget_FrontColor, $FFFFFF)
      SetGadgetColor(51, #PB_Gadget_BackColor, $000000)                      
      
      AddGadgetItem (0, -1,"Systeminfo")
      TextGadget  (40, 10, 15, 200, 20, "Busbreite: ")
      StringGadget(42,80,15,200,20, bussystem.s, #PB_String_ReadOnly)
      TextGadget  (43, 10, 40, 200, 20, "Auflösung: ")
      StringGadget(44,80,40,200,20, screenresolution.s, #PB_String_ReadOnly)
      
    CloseGadgetList()

  If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
      MenuItem( 1, "")
      MenuBar()
      MenuBar()
      MenuItem( 7, "Beenden")

    MenuTitle("Extras")
      MenuItem( 8, "Ping-Fehlermeldungen")
      
    MenuTitle("?")
      MenuItem(11, "About")

  EndIf



  Repeat
    
    Event = WaitWindowEvent()  
    Select EventWindow()

;#############################################################
    
      Case 0
        Select Event

            Case #PB_Event_Menu
              
              Select EventMenu()  
                
                Case 7 ; Quit
                  Quit = 1
                  
                Case 8 ; Ping Fehler
                  ping_error()
                             
                Case 11 ; About
                  about()
      
              EndSelect
      
            Case #PB_Event_Gadget
              
              Select EventGadget()
                Case 5 
                  SetGadgetText(9, netcheck()) 
                  
                Case 7
                  RunProgram("cmd")
                
                Case 11
                  host.s = GetGadgetText(10)
                  sel_ip = DNS_Lookup(host)
                  AddGadgetItem(14, -1, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                  AddGadgetItem(14, -1, "Zieladresse = " + IPString(sel_ip))
                  my_size.l = Val(GetGadgetText(15))
                 
                     If Not Start 
                        SetGadgetText(11, "Stop")
                        c = 0
                     Else 
                        SetGadgetText(11, "Ping")
                        result(c) 
                     EndIf 
                     Start ! 1                            
                  
                  Select GetGadgetState(13)
                    Case 0: no_loop = 1
                    Case 1: no_loop = 2
                    Case 2: no_loop = 4
                    Case 3: no_loop = 10
                    Case 4: no_loop = 50
                    Case 5: no_loop = 1000000000
                  EndSelect
                            
               Case 18
                 clear_screen(14)
                 
               Case 31
                  clear_screen(32)
                  host.s = GetGadgetText(30)
                  sel_ip = DNS_Lookup(host)
                  TraceRoute(IPString(sel_ip), Val(GetGadgetText(36)), GetGadgetState(35))
                  

               Case 33
                 clear_screen(32)  

               Case 50
                 netstat()                                 
                  
              EndSelect


      Case #PB_Event_CloseWindow
        Quit = 1
        
      
      Case #WM_TIMER
          a = a + 2500

          If Start = #True
            my_byte.s = byte_size(my_size)
            
            durchlauf_eins.s = Right(Str(a), 4)
            If (durchlauf_eins.s = "5000") | (durchlauf_eins.s = "0000")
              c + 1          
              ping(sel_ip, c, my_byte.s)
             
              If Left(output_data_ping.s, 1) = "0"
                SetColor(14, #Green)
              EndIf
              
              If Left(output_data_ping.s, 1) = "1"
                SetColor(14, #Red)
              EndIf   
              output_data_ping.s = Mid(output_data_ping.s, 2, Len(output_data_ping.s) - 1)
              AddGadgetItem(14, -1, output_data_ping.s)
              SendMessage_(GadgetID(14),#EM_SCROLL,#SB_BOTTOM,0)
              If (c = no_loop)
                 result(c)
                 Start = #False
                 c = 0
                 SetGadgetText(11, "Ping")
              EndIf              
                

            EndIf        
           
       EndIf           

        b = b + 500
        durchlauf_zwei.s = Right(Str(b), 4) 
        If (durchlauf_zwei = "0000")
          SetGadgetText(9, netcheck())
        EndIf

      EndSelect

;#############################################################

    Case #Window_Ping_Error 
      Select Event 
        
         
        Case #PB_Event_CloseWindow 
          CloseWindow(#Window_Ping_Error) 
      
      EndSelect 
      
      
      
    Case #Window_Web_About 
      Select Event 
        
         
        Case #PB_Event_CloseWindow 
          CloseWindow(#Window_Web_About) 
      
      EndSelect       

;#############################################################      
      
      
    EndSelect

  Until Quit = 1

EndIf

End   

Verfasst: 19.08.2009 18:28
von netzer
Hmm, keine Kommentrare?
Alle damit zufrieden oder ist es nutzlos :cry: ?

Egal, habe jetzt ein Update gemacht:
- Übersicht aller Netzwerkschnittstellen inkl MAC und IP
- Zielvavoriten in einer ComboBox
- Button für separates DOS-Fenster
- Ping to URL

Freue mich immer noch über Anregungen, Tipps, Verbesserungen

Gruß vom Netzer

Verfasst: 19.08.2009 20:05
von DarkDragon
Hallo,

Ich denke es sind alle damit zufrieden ;-) . Das einzige was etwas nervt ist, dass man nicht mit der Return-Taste "Ping" bestätigen kann im ComboBox. Der "Ping" Button sollte desshalb auch #PB_Button_Default als Flag haben (#PB_Button_MultiLine ist in dem Fall doch eh nicht notwendig?). Ansonsten ist es eigentlich ganz gut von der Funktionalität her ;-) . Vielleicht noch ein paar mehr Sicherheitsabfragen hier und da (In DNS_Lookup die Zeile mit den 2 PeekLs.. was wenn ein Zeiger 0 ist?).

Verfasst: 19.08.2009 20:08
von cxAlex
Mir gefällts auch :allright:

Hey, da taucht ja mein DNS_Lockup() auf...

>In DNS_Lookup die Zeile mit den 2 PeekLs.. was wenn ein Zeiger 0 ist?

Kann nicht sein. Was ich mache hat Hand und Fuß! :mrgreen:

Bild

Gruß, Alex

Verfasst: 19.08.2009 20:14
von ts-soft
Ganz nett :allright:

> Freue mich immer noch über Anregungen, Tipps, Verbesserungen
Variablen sollten immer deklariert sein, damits auch mit EnableExplicit läuft.
Manche Typen sind leider verkehrt, so das es auf X64 ohne Änderungen
nicht läuft.

Gruß

Thomas

Verfasst: 20.08.2009 09:32
von dige
Yo, ist gut gemacht und schreit förmlich nach Erweiterungen ;-)
Könnte man zum Bsp. noch NETSTAT und ARP Infos als weiteren
Register hinzufügen..

Verfasst: 21.08.2009 09:44
von jpd
Hallo netzer,

nettes spielzeug :)

habe mir erlaubt eine Procedure Hinzuzufügen, die es ermöglicht bei den Netzwerkschnittstellen den DNS Server zu ermitteln.

Code: Alles auswählen

; PB 4.30 - nur lauffähig unter Windows (WinAPI) 
; 
; Diverse Codeschnipsel aus den PB-Foren entnommen 
; Danke an alle Autoren! 
; 
; 
; Wichtig! 
; Ein Ping ist nur ein einfacher ICMP-Request, kann aber mit entsprechenden Parametern 
; Netzwerkkomponenten ins Schwitzen bringen. 
; 
; Also, nicht einfach wild drauf los pingen ;-) 


Structure IP_ADDR_STRING 
    pNext.l 
    IpAddress.b[16] 
    IpMask.b[16] 
    Context.l 
  EndStructure 
  
  
  
  #MAX_ADAPTER_NAME_LENGTH=256 
  #MAX_ADAPTER_DESCRIPTION_LENGTH=128 
  #MAX_ADAPTER_ADDRESS_LENGTH=8 
  
  #MIB_IF_TYPE_OTHER     = 0 
  #MIB_IF_TYPE_ETHERNET  = 1 
  #MIB_IF_TYPE_TOKENRING = 2 
  #MIB_IF_TYPE_FDDI      = 3 
  #MIB_IF_TYPE_PPP       = 4 
  #MIB_IF_TYPE_LOOPBACK  = 5 
  #MIB_IF_TYPE_SLIP      = 6 
  
  Structure IP_ADAPTER_INFO 
    pNext.l 
    ComboIndex.l 
    AdapterName.b[#MAX_ADAPTER_NAME_LENGTH+4] 
    Description.b[#MAX_ADAPTER_DESCRIPTION_LENGTH+4] 
    AddressLength.l 
    Address.b[#MAX_ADAPTER_ADDRESS_LENGTH] 
    Index.l 
    Type.l 
    DhcpEnabled.l 
    CurrentIpAddressPTR.l 
    IpAddressList.IP_ADDR_STRING 
    GatewayList.IP_ADDR_STRING 
    DhcpServer.IP_ADDR_STRING 
    HaveWins.l 
    PrimaryWinsServer.IP_ADDR_STRING 
    SecondaryWinsServer.IP_ADDR_STRING 
    LeaseObtained.l 
    LeaseExpires.l 
  EndStructure 
  
  Structure MyIP_ADAPTER_INFO 
    AdapterName.s 
    Description.s 
    MACAddress.s 
    IPAdress.s 
  EndStructure 
  
  Structure IP_PER_ADAPTER_INFO 
   AutoconfigEnabled.i;  UINT 
   AutoconfigActive.i 
   *CurrentDnsServer 
   DnsServerList.IP_ADDR_STRING 
EndStructure 
  


Global output_data.s 


InitNetwork() 

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

Procedure DNS_Lookup(host.s) 
  Protected *host.hostent, ret.l 
  *host = gethostbyname_(host) 
  If *host 
    ret = PeekL(PeekL(*host\h_addr_list)) 
  Else 
    ret = *host 
  EndIf 
  ProcedureReturn ret 
EndProcedure 

Procedure SetColor(Gadget, Color) 
   Protected format.CHARFORMAT2, sel.CHARRANGE, sel_saved.CHARRANGE 

   format\cbSize      = SizeOf(CHARFORMAT2) 
   format\dwMask      = #CFM_COLOR 
   format\crTextColor = Color 
   SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

Procedure.s byte_size(in_size) 

  ; Microsoft default data for 32 Byte packet = abcdefghijklmnopqrstuvwabcdefghi 
  default_byte.s = "thequickbrownfoxjumpsoverthelazydog" 
  
  ;Debug in_size 
  
  If (in_size > 35) 
    Repeat 
      default_byte.s + default_byte.s 
    Until Len(default_byte) > in_size 
  EndIf 
  
  
  my_byte.s = Left(default_byte, in_size) 
  ;Debug "my_byte = " + my_byte 
  ;Debug "Summe = " + Str(Len(my_byte)) 
  
  ProcedureReturn my_byte.s 

EndProcedure 

Procedure.s user() 
  buffer.s = Space(1024) 
  bufsize.l = 1024 
  GetUserName_(@buffer, @bufsize) 
  username.s = buffer 
  ProcedureReturn username 
EndProcedure 

Procedure.s result(c) 

  SetColor(14, #White) 
  AddGadgetItem(14, -1, "Anzahl gesendeter Pings: " + Str(c)) 
  AddGadgetItem(14, -1, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++") 
  SendMessage_(GadgetID(14),#EM_SCROLL,#SB_BOTTOM,0) 

EndProcedure 

Procedure.s name() 
  buffer.s = Space(1024) 
  bufsize.l = 1024 
  GetComputerName_(@buffer, @bufsize) 
  comname.s = buffer 
  ProcedureReturn comname 
EndProcedure 

Procedure.s ping(in_ip, i, EchoMessage.s) 
    
  ResultSize.l = SizeOf(ICMP_ECHO_REPLY) + Len(EchoMessage) 
  *Result = AllocateMemory(ResultSize) 
  *Echo.ICMP_ECHO_REPLY = *Result 
  
        hFile.l = IcmpCreateFile_() 
        
        lngResult.l = IcmpSendEcho_(hFile, in_ip, EchoMessage, Len(EchoMessage), 0, *Result, ResultSize, 20) 
        ping_result.s = "Ping " + Str(i) + " an " + IPString(*Echo\Address) + "   Bytes: " + Str(*Echo\DataSize) + "   Zeit: " + Str(*Echo\RoundTripTime) + " ms    TTL: " + Str(*Echo\Options\Ttl) 
        
        If Str(Len(EchoMessage.s)) = Str(*Echo\DataSize) 
          flag.s = "0" 
          output_data.s = flag.s + ping_result.s 
          
        Else 
          flag.s = "1" 
          output_data.s = flag.s + "Keine Antwort von Zieladresse" + "  Fehlercode: " + StrU(*Echo\Status) 
        
        EndIf 
        
                  
      IcmpCloseHandle_(hFile) 
  
  FreeMemory(*Result) 
  
  ProcedureReturn output_data.s 
EndProcedure 


Procedure.s  GetDNSInfo(Index) 
   Protected Result, Length, *Buffer, *iplist.IP_ADDR_STRING, *ipinfo.IP_PER_ADAPTER_INFO 

   Result = GetPerAdapterInfo_(Index, 0, @Length) ; Get the length for Buffer 
   If Result = #ERROR_BUFFER_OVERFLOW And Length 
      *Buffer = AllocateMemory(Length) 
      If *Buffer 
         If GetPerAdapterInfo_(Index, *Buffer, @Length) = #ERROR_SUCCESS 
            *ipinfo = *Buffer 
            ;Debug *ipinfo\AutoconfigEnabled 
            ;Debug *ipinfo\AutoconfigActive 

            *iplist = *ipinfo\DnsServerList 

            While *iplist 
               ;Debug PeekS(@*iplist\IpAddress, -1, #PB_Ascii) 
               DNSVar.s = DNSVar+Chr(13)+"DNS Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
               *iplist = *iplist\pNext 
            Wend 
         EndIf 
         FreeMemory(*Buffer) 
      EndIf 
   EndIf 
   ProcedureReturn DNSVar
EndProcedure 

Procedure.s netcheck() 

  LanVar.s = "" 
  
  
  
  length.l=0 
  Result=GetAdaptersInfo_(0,@length) ; Get the length for Buffer 
  If Result=#ERROR_BUFFER_OVERFLOW And length 
    *Buffer=AllocateMemory(length) 
    If *Buffer And GetAdaptersInfo_(*Buffer,@length)=#ERROR_SUCCESS 
      *ipinfo.IP_ADAPTER_INFO=*Buffer 
      
      Global NewList MyIPAdapterList.MyIP_ADAPTER_INFO() ; declare list here 
      
      While *ipinfo 
        
        AddElement(MyIPAdapterList()) ; add one element 
        ;Debug "++++++++++++++++++++++++++++" 
        ;Debug "Index : "+Str(*ipinfo\Index) 
  
        ;Debug "Name : "+PeekS(@*ipinfo\AdapterName,-1,#PB_Ascii) 
        MyIPAdapterList()\AdapterName=PeekS(@*ipinfo\AdapterName,-1,#PB_Ascii) 
        MyIPAdapterList()\Description=PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        ;Debug "Desc : "+PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        LanVar = LanVar+Chr(13)+PeekS(@*ipinfo\Description,-1,#PB_Ascii) 
        
        
        
       ;        ;IP-Adress 
        *iplist.IP_ADDR_STRING=*ipinfo\IpAddressList 
        
        
        
        While *iplist 
          ;Debug "IP-Adress : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          LanVar = LanVar+Chr(13)+"IP-Adress : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          MyIPAdapterList()\IPAdress+PeekS(@*iplist\IpAddress,-1,#PB_Ascii)+Chr(13) 
          *iplist.IP_ADDR_STRING=*iplist\pNext 
        Wend 
        ;Gateway 
        *iplist.IP_ADDR_STRING=*ipinfo\GatewayList 
        While *iplist 
          ;Debug "Gateway : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          LanVar = LanVar+Chr(13)+"Gateway : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
          *iplist.IP_ADDR_STRING=*iplist\pNext 
        Wend 
        ;Wins 
        If *ipinfo\HaveWins 
          ;PrimaryWinsServer 
          *iplist.IP_ADDR_STRING=*ipinfo\PrimaryWinsServer 
          While *iplist 
            ;Debug "P-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"P-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
          ;SecondaryWinsServer 
          *iplist.IP_ADDR_STRING=*ipinfo\SecondaryWinsServer 
          While *iplist 
            ;Debug "S-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"S-Wins : "+PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
        EndIf 
        ;DHCP 
        If *ipinfo\DhcpEnabled 
          ;DhcpServer 
          *iplist.IP_ADDR_STRING=*ipinfo\DhcpServer 
          While *iplist 
            ;Debug "DHCP Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            LanVar = LanVar+Chr(13)+"DHCP Server Adress : " +PeekS(@*iplist\IpAddress,-1,#PB_Ascii) 
            *iplist.IP_ADDR_STRING=*iplist\pNext 
          Wend 
  
        Else 
          ;Debug "STATIC IP Configuration" 
          LanVar = LanVar+Chr(13)+"STATIC IP Configuration" 
        EndIf 
        ;DNS Server
        dnssrv.s= GetDNSInfo(*ipinfo\Index) 
        LanVar=LanVar+dnssrv
             
        ;MAC-Adress 
        If *ipinfo\AddressLength 
          mac$="" 
          For i=0 To *ipinfo\AddressLength-1 
            If i 
              mac$+":" 
            EndIf 
            byte.b=PeekB(@*ipinfo\Address+i) 
            If byte>=0 
              mac$+RSet(Hex(byte),2,"0") 
            Else 
              mac$+RSet(Hex(byte+256),2,"0") 
            EndIf 
          Next 
          ;Debug "MAC-Address "+mac$ 
          LanVar = LanVar+Chr(13)+"MAC-Address "+mac$+Chr(13) 
          MyIPAdapterList()\MACAddress=mac$ 
        EndIf 
        
        *ipinfo.IP_ADAPTER_INFO=*ipinfo\pNext 
      Wend 
      
  
      
    Else 
      ;Debug "GetLastError="+Str(GetLastError_()) 
    EndIf 
    
    If *Buffer 
      FreeMemory(*Buffer) 
    EndIf 
    ;Debug LanVar 
  EndIf 
  ;Debug LanVar 
  ProcedureReturn LanVar 
  
EndProcedure 
  
Procedure.s clear_screen() 
  
  ClearGadgetItems(14) 

EndProcedure 

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
  

  
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

If OpenWindow(0, 100, 50, 600, 400, "LAN-Lab", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget) 
    comname.s = name() 
    username.s = user() 
    SetTimer_(WindowID(0), 0, 500, 1) 
    a.l = 0 
    b.l = 0 
    c.l = 0 
    PanelGadget     (0, 8, 8, 582, 360) 
    
      AddGadgetItem (0, -1, "Netzwerk") 
      TextGadget  (1, 10, 15, 200, 20, "Hostname: ") 
      StringGadget(2,80,15,200,20,comname.s,#PB_String_ReadOnly) 
      TextGadget  (3, 10, 40, 200, 20, "Username: ") 
      StringGadget(4,80,40,200,20,username.s,#PB_String_ReadOnly) 
      ButtonGadget(5, 300, 15, 100, 45, "Refresh Network   (auto 10 sec)", #PB_Button_MultiLine) 
      ButtonGadget(7, 420, 15, 100, 45, "c:\     (DOS-Fenster)", #PB_Button_MultiLine) 
      EditorGadget(9, 8, 65, 560, 260) 
      SetGadgetColor(9, #PB_Gadget_FrontColor, $FFFFFF) 
      SetGadgetColor(9, #PB_Gadget_BackColor, $000000) 
      SetGadgetText(9, netcheck()) 

    
      AddGadgetItem (0, -1,"Ping")  
      ComboBoxGadget(10, 10, 25, 220, 20, #PB_ComboBox_Editable) 
      AddGadgetItem(10, -1,"192.168.1.1") 
      AddGadgetItem(10, -1,"10.10.10.1") 
      AddGadgetItem(10, -1,"www.google.com") 
      ButtonGadget(11, 10, 55, 50, 20, "Ping", #PB_Button_MultiLine) 
      TextGadget  (12, 300, 12, 50, 20, "Anzahl") 
      ComboBoxGadget(13, 300, 25, 60, 21, #PB_ComboBox_Editable) 
      AddGadgetItem(13, -1,"1") 
      AddGadgetItem(13, -1,"2") 
      AddGadgetItem(13, -1,"4") 
      AddGadgetItem(13, -1,"10") 
      AddGadgetItem(13, -1,"50") 
      AddGadgetItem(13, -1,"Dauer") 
      SetGadgetState(13, 2) 
      EditorGadget(14, 8, 95, 560, 230, #PB_Editor_ReadOnly) 
      SetGadgetColor(14, #PB_Gadget_FrontColor, $FFFFFF) 
      SetGadgetColor(14, #PB_Gadget_BackColor, $000000) 
      StringGadget(15, 240, 25, 50, 20, "32", #PB_String_Numeric) 
      TextGadget  (16, 240, 12, 50, 20, "Bytegröße") 
      ButtonGadget(18, 180, 55, 50, 20, "Clear", #PB_Button_MultiLine) 
      clear_screen()    
      

      
    CloseGadgetList() 





  Repeat 

    Select WaitWindowEvent() 

      Case #PB_Event_Menu 
        


      Case #PB_Event_Gadget 
        
        Select EventGadget() 
          Case 5 ; Refresh 
            ;netcheck() 
            SetGadgetText(9, netcheck()) 
            
          Case 7 
            RunProgram("cmd") 
          
          Case 11 
            host.s = GetGadgetText(10) 
            sel_ip = DNS_Lookup(host) 
            AddGadgetItem(14, -1, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++") 
            AddGadgetItem(14, -1, "Zieladresse = " + IPString(sel_ip)) 
            my_size.l = Val(GetGadgetText(15)) 
            
               If Not Start 
                  SetGadgetText(11, "Stop") 
                  c = 0 
               Else 
                  SetGadgetText(11, "Ping") 
                  result(c) 
               EndIf 
               Start ! 1                            
            
            Select GetGadgetState(13) 
              Case 0: no_loop = 1 
              Case 1: no_loop = 2 
              Case 2: no_loop = 4 
              Case 3: no_loop = 10 
              Case 4: no_loop = 50 
              Case 5: no_loop = 1000000000 
            EndSelect 
                      
         Case 18 
           clear_screen() 
            
        EndSelect 


      Case #PB_Event_CloseWindow 
        Quit = 1 
        
      Case #WM_TIMER 
          a = a + 2500 

          If Start = #True 
            my_byte.s = byte_size(my_size) 
            
            durchlauf_eins.s = Right(Str(a), 4) 
            If (durchlauf_eins.s = "5000") | (durchlauf_eins.s = "0000") 
              c + 1          
              ping(sel_ip, c, my_byte.s) 
              
              If Left(output_data.s, 1) = "0" 
                SetColor(14, #Green) 
              EndIf 
              
              If Left(output_data.s, 1) = "1" 
                SetColor(14, #Red) 
              EndIf    
              output_data.s = Mid(output_data.s, 2, Len(output_data.s) - 1) 
              AddGadgetItem(14, -1, output_data.s) 
              SendMessage_(GadgetID(14),#EM_SCROLL,#SB_BOTTOM,0) 
              If (c = no_loop) 
                 result(c) 
                 Start = #False 
                 c = 0 
                 SetGadgetText(11, "Ping") 
              EndIf              
                

            EndIf        
            
       EndIf            

        b = b + 500 
        durchlauf_zwei.s = Right(Str(b), 4) 
        If (durchlauf_zwei = "0000") 
          SetGadgetText(9, netcheck()) 
        EndIf 


    EndSelect 

  Until Quit = 1 

EndIf 

End    


Mach weiter so, könnte eine richtig nützliche werkzeug sammlung werden.

Danke
jpd

Verfasst: 21.08.2009 12:39
von netzer
Na super!

Scheinbar bin ich nicht der einzige, der die gute alte ping-Routine des öfteren benötigt. Werde nach und nach einige Verbesserungen vornehmen:

@Dark Dragon:
dass man nicht mit der Return-Taste "Ping" bestätigen kann im ComboBox.
Ist soweit gefixt, allerdings etwas problematisch in Verbindung mit dem PanelGadget. Die PeekLs werde ich mir noch mal anschauen...

@cxAlex
Hey, da taucht ja mein DNS_Lockup() auf...
Hm, als Anfänger kriegt man das ohne Copy&Code 8) nicht hin.

@ts-soft
damits auch mit EnableExplicit läuft
Werd versuchen, das ganze zu bereinigen (habe aber nur eine 32Bitburgermaschine)

@dige
zum Bsp. noch NETSTAT und ARP Infos als weiteren
Register hinzufügen..
Jupp, brauch ich auch. traceroute habe ich außerdem auf dem Plan.

@jpd
habe mir erlaubt eine Procedure Hinzuzufügen, die es ermöglicht bei den Netzwerkschnittstellen den DNS Server zu ermitteln
Habe ich schon assimliert...

@all
Bin das Wochenende erst mal auf Entspannungstrip (ohne Computer).
Nächste Woche geht's dann weiter.

Danke an alle und schönes Wochenende
Netzer

Re: Ping, die X.te

Verfasst: 23.09.2009 06:03
von netzer
So, hat etwas länger gedauert mit der neuen Version.
Jetzt mit trace route und diversen Verschönerungen (@TS-Soft habe EnableExplicit umgesetzt).

Testet es einfach mal...
Werde jetzt ins Bett gehen, hier ist gerade 00:00 Uhr (New York City).
Bin ab Donnerstag wieder daheim, solange leider offline.

Gruß vom Big Apple
Netzer

Re: Ping, die X.te

Verfasst: 27.09.2009 17:45
von dige
:allright: