Ping, die X.te
Verfasst: 19.08.2009 00:11
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)
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