|
| Autor |
Nachricht |
erbse Newbie

Anmeldedatum: 17.09.2010 Beiträge: 3
|
konsolen anwendung in eine forms anwendung bringen
Verfasst am: 28.09.2010, 17:12 |
|
|
hy liebe com ich habe hier einen code für eine consolen anwendung mit dem man das netzwerk scannt
ich möchte dies aber in eine forms anwendung packen und das das ergebniss in einer textbox erscheint aber leider scheitere ich daran
kann mir da jemand helfen hier der code:
| Code: |
Option Strict On
Module SimpleScanner
Dim WithEvents __Scanner As NetworkScanner
Dim __IPs As List(Of NetworkScanner.PingResult)
Sub Main()
Dim abc As String = "192.168.1"
Console.Title = "Erbses Simpler IPScanner"
Console.WriteLine("Erbses Simpler IP-Scanner.")
Console.WriteLine()
Dim args As String() = Environment.GetCommandLineArgs()
If args.Length > 1 Then
Dim abc_ As String = FilterMask(args(1))
If abc_ <> "-1" Then
abc = abc_
Console.WriteLine("Benutze Adressbereich aus Kommandozeile: {0}", abc)
Else
Console.WriteLine("Der Adressbereich der Kommandozeilenargumente konnte nicht validiert werden.")
Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
End If
Else
Console.WriteLine()
Console.WriteLine("Bitte geben Sie die ersten drei Teile der IP-Adresse an. (z.B. 192.168.178)")
Dim input As String = Console.ReadLine().Trim
If input = String.Empty Then
Console.WriteLine("Keine Eingabe entdeckt.")
Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
Else
Dim abc_ As String = FilterMask(input)
If abc_ <> "-1" Then
abc = abc_
Console.WriteLine("Benutze eingegebenen Adressbereich: {0}", abc)
Else
Console.WriteLine("Der Adressbereich konnte nicht validiert werden.")
Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
End If
End If
End If
Console.WriteLine()
Console.WriteLine("Folgende Computer sind im Netzwerk angemeldet:")
Console.WriteLine()
Console.WriteLine("## PC-Name")
__Scanner = New NetworkScanner(abc)
__Scanner.Scan()
While __Scanner.IsScanning : End While
Dim s As String = Console.ReadLine()
s = s.Trim
If IsNumeric(s) Then
Dim nummer As Integer = Integer.Parse(s)
Dim ip_arr As NetworkScanner.PingResult() = __IPs.ToArray
If nummer <= ip_arr.Length - 1 Then
My.Computer.Clipboard.SetText(ip_arr(nummer).IP)
Console.WriteLine("Die IP-Adresse ""{0}"" wurde in Ihre Zwischenablage kopiert.", ip_arr(nummer))
End If
ElseIf s = "a" Then
Dim Result_arr As NetworkScanner.PingResult() = __IPs.ToArray
Dim IP_Only_arr(__IPs.Count - 1) As String
Dim zaehler As Integer = 0
For Each result As NetworkScanner.PingResult In __IPs
IP_Only_arr(zaehler) = result.IP
zaehler += 1
Next
Dim clip As String = Join(IP_Only_arr, Environment.NewLine)
My.Computer.Clipboard.SetText(clip)
Console.WriteLine("Die IP-Adressen wurden in Ihre Zwischenablage kopiert.")
End If
End Sub
Friend Function FilterMask(ByVal input As String) As String
Dim pt As String = "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
Dim m As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(input, pt)
If m.Captures.Count <> 1 Then
Return "-1"
Else
Return m.Value
End If
End Function
Private Sub __Scanner_ScanComplete(ByVal AvailabeIPs As System.Collections.Generic.List(Of NetworkScanner.PingResult)) Handles __Scanner.ScanComplete
__IPs = AvailabeIPs
Dim _Counter As Integer = 0
For Each PingResult As NetworkScanner.PingResult In __IPs
Console.WriteLine("{0,-3} {2,-20}", _Counter, PingResult.IP, PingResult.Hostname, PingResult.ElapsedTime)
_Counter += 1
Next
Console.WriteLine()
Console.WriteLine()
Console.WriteLine("Scannen fertig.")
Console.WriteLine()
If _Counter > 0 Then
Console.WriteLine("'a' zum Kopieren aller IPs.")
Console.WriteLine("Eine Nummer, um eine bestimmte zu kopieren")
Else
Console.WriteLine("Es wurden keine IPs gefunden.") 'Unwahrscheinlich, da normalerweise mindestens der Localhost im Netz ist ^^
'Man kann aber nie wissen.
End If
End Sub
End Module
Friend Class NetworkScanner
Public Property MaxThreads As Integer = 20
Public Property CurrentThreads As Integer = 0
Protected __Subnet As String
Protected __IPList As New List(Of PingResult)
Protected __ResultCounter As Integer
Public ReadOnly Property IPList As List(Of PingResult)
Get
Return __IPList
End Get
End Property
Public ReadOnly Property Subnet As String
Get
Return __Subnet
End Get
End Property
Public ReadOnly Property IsScanning As Boolean
Get
Return __ResultCounter < 255
End Get
End Property
Public Event ScanComplete(ByVal AvailabeIPs As List(Of PingResult))
Public Sub New(ByVal Subnet As String)
__Subnet = Subnet
End Sub
Public Sub Scan()
For d As Integer = 0 To 255 Step 1
Dim ping As New IPPinger(Me, String.Format("{0}.{1}", __Subnet, d))
AddHandler ping.GotPingResult, AddressOf GotPingResult
ping.StartPing()
Next
End Sub
Private Sub GotPingResult(ByVal sender As NetworkScanner, ByVal e As PingResult)
If e.Successful Then
'Man könnte auch die nicht erfolgreichen adden, mache ich hier aber nicht, weil wir nur die erfolgreichen haben wollen ;)
__IPList.Add(e)
End If
__ResultCounter += 1
If __ResultCounter > 255 Then
RaiseEvent ScanComplete(__IPList)
End If
End Sub
Friend Structure PingResult
Dim IP As String
Dim Successful As Boolean
Dim ElapsedTime As Long
Dim Hostname As String
Dim TimeOut As Integer
Friend Sub New(ByVal _IP As String, ByVal _Successful As Boolean, ByVal _ElapsedTime As Long, ByVal _Hostname As String, ByVal _TimeOut As Integer)
IP = _IP
Successful = _Successful
ElapsedTime = _ElapsedTime
Hostname = _Hostname
TimeOut = _TimeOut
End Sub
End Structure
End Class
Friend Class IPPinger
Protected __IP As String
Protected __Scanner As NetworkScanner
Protected __TimeOut As Integer
Public Shared ReadOnly Property StandardTimeOut As Integer
Get
Return 1000
End Get
End Property
Public ReadOnly Property IP As String
Get
Return __IP
End Get
End Property
Public Event GotPingResult(ByVal sender As NetworkScanner, ByVal e As NetworkScanner.PingResult)
Public Sub New(ByVal _Scanner As NetworkScanner, ByVal _IP As String)
__Scanner = _Scanner
__IP = _IP
__TimeOut = 1000
End Sub
Public Sub New(ByVal _Scanner As NetworkScanner, ByVal _IP As String, ByVal _TimeOut As Integer)
__Scanner = _Scanner
__IP = _IP
__TimeOut = _TimeOut
End Sub
Public Sub StartPing()
While __Scanner.CurrentThreads >= __Scanner.MaxThreads : End While
Dim t As New Threading.Thread(AddressOf _ping_ip_thread)
t.Name = __IP & " - Pingthread"
t.Start(__IP)
End Sub
Private Sub _ping_ip_thread(ByVal _IP As Object)
__Scanner.CurrentThreads += 1
Try
Dim Milliseconds As Long = Me.DoPing(_IP.ToString)
Dim result As NetworkScanner.PingResult
If Milliseconds <> -1 Then
Dim HostName As String = Net.Dns.GetHostEntry(_IP.ToString).HostName
result = New NetworkScanner.PingResult(_IP.ToString, True, Milliseconds, HostName, __TimeOut)
Else
result = New NetworkScanner.PingResult(_IP.ToString, False, Milliseconds, String.Empty, __TimeOut)
End If
RaiseEvent GotPingResult(__Scanner, result)
Catch ex As Exception
Throw ex 'Ja, sinnlos, ich weiß. Man könnte auch einen "Nicht-erreichbar"-Pin zurückgeben.
Finally
__Scanner.CurrentThreads -= 1
End Try
End Sub
Private Function DoPing(ByVal _IP As String) As Long
Dim ping As New Net.NetworkInformation.Ping
Dim reply As Net.NetworkInformation.PingReply = ping.Send(_IP, __TimeOut)
If reply.Status = Net.NetworkInformation.IPStatus.Success Then
Return reply.RoundtripTime
Else
Return -1
End If
End Function
End Class
|
lg erbse |
|
| |
|
 |
christopher.g Überflieger

Anmeldedatum: 03.05.2008 Beiträge: 565
|
Verfasst am: 29.09.2010, 12:50 |
|
|
gib den text in einer txt datei aus
und diese öffnest dann mit shell
ist zwar nicht ganz das was du suchst
aber würde acuh gehen
lg |
|
| |
|
 |
erbse Newbie

Anmeldedatum: 17.09.2010 Beiträge: 3
|
Verfasst am: 30.09.2010, 00:08 |
|
|
ja nur möchte ich auch die eingaben über eine textbox machen und es soll keine konsole mehr da sein
lg |
|
| |
|
 |
|
|