VB 5/6-Tipp 0491: Alle TCP-Ports und deren Status anzeigen
von Dominik Auras
Beschreibung
Dieser Code zeigt, wie man alle TCP-Ports und deren Status auflisten kann. Somit kann man einige der Daten des Programmes netstat bequemer ermitteln.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- ' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (MsComCtl.ocx)' wird benötigt. '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Listenanzeigesteuerungselement "ListView1" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Beschriftungsfeld "Label1" 'http://www.tipsntricks.de Private Sub Command1_Click() ListConnections End Sub Private Sub Form_Load() With ListView1 .View = lvwReport Set clmX = .ColumnHeaders.Add(, , "Local Address") Set clmX = .ColumnHeaders.Add(, , "Local Port") Set clmX = .ColumnHeaders.Add(, , "Remote Address") Set clmX = .ColumnHeaders.Add(, , "Remote Port") Set clmX = .ColumnHeaders.Add(, , "State") End With End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '--------- Anfang Modul "Module1" alias Module1.bas --------- 'http://www.tipsntricks.de Public Declare Function GetTcpTable Lib "IPHLPAPI.DLL" ( _ ByRef pTcpTable As MIB_TCPTABLE, _ ByRef pdwSize As Long, _ ByVal border As Long) As Long Public Type MIB_TCPROW dwState As tcpStates dwLocalAddr(0 To 3) As Byte dwLocalPort As String * 4 dwRemoteAddr(0 To 3) As Byte dwRemotePort As String * 4 End Type Public Type MIB_TCPTABLE dwNumEntries As Long Table(100) As MIB_TCPROW End Type Public Enum tcpStates TCP_STATE_CLOSED = 1 TCP_STATE_LISTEN = 2 TCP_STATE_SYN_SENT = 3 TCP_STATE_SYN_RCVD = 4 TCP_STATE_ESTAB = 5 TCP_STATE_FIN_WAIT1 = 6 TCP_STATE_FIN_WAIT2 = 7 TCP_STATE_CLOSE_WAIT = 8 TCP_STATE_CLOSING = 9 TCP_STATE_LAST_ACK = 10 TCP_STATE_TIME_WAIT = 11 TCP_STATE_DELETE_TCB = 12 End Enum Public Sub ListConnections() Dim ret As Long, tcpTable As MIB_TCPTABLE, intLoop As Integer Dim strState As String, strLocalAddr As String, strLocalPort As String Dim strRemoteAddr As String, strRemotePort As String Dim itemX As ListItem '### Hier Daten übergeben Form1.ListView1.ListItems.Clear '### ### ret = GetTcpTable(tcpTable, 2004, True) Select Case ret Case 0 'Alles ok For intLoop = 0 To tcpTable.dwNumEntries - 1 With tcpTable.Table(intLoop) strState = StateText(.dwState) strLocalAddr = .dwLocalAddr(0) & "." & _ .dwLocalAddr(1) & "." & _ .dwLocalAddr(2) & "." & _ .dwLocalAddr(3) strLocalPort = CStr(GetPort(.dwLocalPort)) strRemoteAddr = .dwRemoteAddr(0) & "." & _ .dwRemoteAddr(1) & "." & _ .dwRemoteAddr(2) & "." & _ .dwRemoteAddr(3) If .dwState = TCP_STATE_ESTAB Then strRemotePort = CStr(GetPort(.dwRemotePort)) Else strRemotePort = "0" End If End With '### Hier Daten übergeben Set itemX = Form1.ListView1.ListItems.Add(, , strLocalAddr) itemX.SubItems(1) = strLocalPort itemX.SubItems(2) = strRemoteAddr itemX.SubItems(3) = strRemotePort itemX.SubItems(4) = strState '### ### Next intLoop Case 232 'Kein Netzwerk vorhanden Case Else 'Unbekannter Fehler End Select End Sub Public Function StateText(State As Long) As String Select Case State Case TCP_STATE_CLOSED: StateText = "Closed" Case TCP_STATE_LISTEN: StateText = "Listening" Case TCP_STATE_SYN_SENT: StateText = "SYN Sent" Case TCP_STATE_SYN_RCVD: StateText = "SYN Recieved" Case TCP_STATE_ESTAB: StateText = "Established" Case TCP_STATE_FIN_WAIT1: StateText = "FIN Wait 1" Case TCP_STATE_FIN_WAIT2: StateText = "FIN Wait 2" Case TCP_STATE_CLOSE_WAIT: StateText = "Close Wait" Case TCP_STATE_CLOSING: StateText = "Closing" Case TCP_STATE_LAST_ACK: StateText = "Last ACK" Case TCP_STATE_TIME_WAIT: StateText = "Time Wait" Case TCP_STATE_DELETE_TCB: StateText = "PCB Deleted" End Select End Function Private Function GetPort(Port) As Long GetPort = Asc(Mid(Port, 1, 1)) GetPort = GetPort * 256 GetPort = GetPort + Asc(Mid(Port, 2, 1)) End Function '---------- Ende Modul "Module1" alias Module1.bas ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 11 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Marco am 29.09.2005 um 13:32
Die API GetTcpTable hat ein kleines Problem. Wenn man den MS-SQL-Enterprisemanager oder den Query-Analyzer aufmacht und eine Weile wartet, schmiert entweder die komplette VB6-IDE ab, oder die kompillierte Executable. - Wenn jemand Rat weis, so melde er sich doch bitte bei mir (eMail) DANKE!!! :)
mfg Marco
Kommentar von BAD HONK am 08.02.2005 um 20:27
Versuchs mal mit PRIVATE DECLARE statt PUBLIC !!!
Kommentar von ratlos am 02.02.2005 um 18:10
Hallo!
Leider erhalte ich die Fehlermeldung "Fehler beim Kompilieren: Nach End Sub, End Function oder End Property können nur Kommentare stehen".
Markiert ist dann der Abschnitt:
Public Declare Function GetTcpTable Lib "IPHLPAPI.DLL" ( _
ByRef pTcpTable As MIB_TCPTABLE, _
ByRef pdwSize As Long, _
ByVal border As Long) As Long
Hat jemand einen Tip? (WinXP, VB 6)
Danke
Kommentar von cerebrus am 11.06.2004 um 14:22
@apo
mit
erste Spalte:
ListView1.ListItems(i).Text
Reihe i (i = 1 bis x)
ab zweiter Spalte:
ListView1.ListItems(i).ListSubItems(n).Text
Reihe i (i = 1 bis x) und Spalte n (n = 1 bis x)
Kommentar von apo am 30.05.2004 um 03:48
hallo... kann mir jemand sagen wie ich die daten aus dem listview auslesen kann??
hab keine ahnung vom listview und hätte das ganze gerne in einer normalen liste...
zb. in diesem format:
remoteport;state
oder von mir aus auch einfach inne variable ob port 80 oder 3128 established sind
konnte zum listview auch kein tutorial oder ähnliches finden :(
danke
apo
Kommentar von MadInfanterist am 18.05.2004 um 16:30
"Von MKS-VIRUS am 13.08.2002 um 22:50
Ich benuze VB.NET mit WIN2K und es funktioniert leider nicht :( "
das is ja auch kein code für vb.net vb.net is was ganz anderes als VB6/5 etc
Kommentar von am 28.11.2003 um 10:16
This is good.
Kommentar von Dirk Euhus am 19.02.2003 um 12:32
Hallo,
das Prog lief unter VB6 unt Win2K einwandfrei, bis zu der Situation,
daß der ret - Wert nur noch 122 anzeigt.
122: ERROR_INSUFFICIENT_BUFFER
Dim lenProtokoll As Long
lenProtokoll = 2004
1. Aufruf zur Ermittlung lenProtokoll
ret = GetTcpTable(tcpTable, lenProtokoll, True)
2. Aufruf mit korrekter Puffergröße Ermittlung lenProtokoll
ret = GetTcpTable(tcpTable, lenProtokoll, True)
... weiter unten dann:
If UBound(tcpTable.Table) >= intLoop Then
So bekommt man zwar die notwendige
Größe des Puffers, daß Prog läuft wieder, aber ich bin mir nicht sicher,
welcher Teil dort abgeschnitten wird.
Irgendeine Idee zur Lösung ?
Danke im voraus.
mfg Euhus
Kommentar von aTriX am 02.02.2003 um 19:12
hmmmmm kannst du ned lesen ?
alle TCP-Ports !!!
Kommentar von MKS-VIRUS am 13.08.2002 um 22:50
Ich benuze VB.NET mit WIN2K und es funktioniert leider nicht :(
Kommentar von Lutz am 07.07.2002 um 13:49
Alle Ports ist wohl uebertrieben ;)
Wo sind denn da die UDP-Ports ???