IP-Bereich (10.13.214.) anpingen

  • VB.NET

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    Ja kann man. Heißt aber noch lange nicht, dass die Vorgänge parallel ablaufen. Meiner Meinung nach geht das nämlich nicht (wie willst du mehrere Signale gleichzeitig über eine Leitung übertragen?). Aber ist ja eigentlich egal, so lange es von der Netzwerkkarte als pseudo-parallel dargestellt wird ^^

    Nimm 100 Threads und fertig. Zu viele Threads würde ich auch nicht benutzen wegen evtlem Overhead. Kenne mich damit aber nicht aus, also probiers einfach.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Hey,

    mach Dir halt die Parallel.For, bzw. Parallel.ForEach Funktionen aus dem System.Threading.Tasks Namespace zu nutze.

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Imports System.Net.NetworkInformation
    3. Imports System.Threading
    4. Public Class Form1
    5. Private _listIPs As New List(Of String)
    6. Private _listReplys As New List(Of PingReply)
    7. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    8. Dim t As New Thread(AddressOf ExecutePings)
    9. t.Start()
    10. End Sub
    11. Private Sub ExecutePings()
    12. Parallel.ForEach(_listIPs, Sub(ip)
    13. Dim pReq As New Ping()
    14. Dim pRes As PingReply = pReq.Send(ip)
    15. _listReplys.Add(pRes)
    16. End Sub)
    17. End Sub
    18. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    19. _listIPs.Add("192.168.2.5")
    20. _listIPs.Add("192.168.2.7")
    21. _listIPs.Add("192.168.2.77")
    22. _listIPs.Add("192.168.2.78")
    23. _listIPs.Add("192.168.2.65")
    24. _listIPs.Add("192.168.2.11")
    25. End Sub
    26. End Class


    Falls Du die Ping-Klasse aus dem System.Net.NetworkInformation Namespace nutzt: Die haben auch Async-Methoden.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Danke für eure Antworten.
    Da ich es nicht so ganz verstehe mit den Threads, poste ich jetzt einfach mal den Code, welchen ich bisher gemacht habe. Die Punkte bedeuten, dass da noch die ganzen pings für die IP´s dazwischen noch rein müssen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System
    3. Imports System.Net
    4. Imports System.Net.NetworkInformation
    5. Public Class Form1
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. Using host As New Net.NetworkInformation.Ping
    8. ' Abfrage Netz A
    9. Dim reply As PingReply = host.Send("10.13.214.1")
    10. If reply.Status = IPStatus.Success Then
    11. Label1.Text = "Netz = A"
    12. End If
    13. reply = host.Send("10.13.214.2")
    14. If reply.Status = IPStatus.Success Then
    15. Label1.Text = "Netz = A"
    16. End If
    17. reply = host.Send("10.13.214.3")
    18. If reply.Status = IPStatus.Success Then
    19. Label1.Text = "Netz = A"
    20. End If
    21. reply = host.Send("10.13.214.4")
    22. If reply.Status = IPStatus.Success Then
    23. Label1.Text = "Netz = A"
    24. End If
    25. reply = host.Send("10.13.214.5")
    26. If reply.Status = IPStatus.Success Then
    27. Label1.Text = "Netz = A"
    28. End If
    29. .
    30. .
    31. .
    32. reply = host.Send("10.13.214.255")
    33. If reply.Status = IPStatus.Success Then
    34. Label1.Text = "Netz = A"
    35. End If
    36. ' Abfrage Netz B
    37. reply = host.Send("10.14.196.1")
    38. If reply.Status = IPStatus.Success Then
    39. Label1.Text = "Netz = B"
    40. End If
    41. reply = host.Send("10.14.196.2")
    42. If reply.Status = IPStatus.Success Then
    43. Label1.Text = "Netz = B"
    44. End If
    45. reply = host.Send("10.14.196.3")
    46. If reply.Status = IPStatus.Success Then
    47. Label1.Text = "Netz = B"
    48. End If
    49. reply = host.Send("10.14.196.4")
    50. If reply.Status = IPStatus.Success Then
    51. Label1.Text = "Netz = B"
    52. End If
    53. reply = host.Send("10.14.196.5")
    54. If reply.Status = IPStatus.Success Then
    55. Label1.Text = "Netz = B"
    56. End If
    57. .
    58. .
    59. .
    60. reply = host.Send("10.14.196.255")
    61. If reply.Status = IPStatus.Success Then
    62. Label1.Text = "Netz = B"
    63. End If
    64. ' Abfrage Netz C
    65. reply = host.Send("10.15.201.1")
    66. If reply.Status = IPStatus.Success Then
    67. Label1.Text = "Netz = C"
    68. End If
    69. .
    70. .
    71. .
    72. End Using
    73. End Sub
    74. End Class
    Hey,

    ich hab Dir doch oben ein Beispiel gegeben. Wenn Du mit den Threads nicht klar kommst, dann lass die halt weg, die Anwendung wird dann eben blockieren. Speicher die IPs, die Du anpingen willst, evtl. in einer Textdatei und lies diese ins Programm ein. Vorteil hier, Du musst, wenn sich etwas ändert, nicht den Programmcode ändern.

    VB.NET-Quellcode

    1. dim ips() as String = File.ReadAllLines("Pfad")


    Pingen kannst Du dann in einer ForEach-Schleife, mit extra oder ohne extra Thread. Somit ist der Nudel-Code Geschichte.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    ok habe jetzt den code von SpaceyX genommen und schon mal mit meinen IP-Beispielen versehen.

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Imports System.Net.NetworkInformation
    3. Imports System.Threading
    4. Public Class Form1
    5. Private _listIPs As New List(Of String)
    6. Private _listReplys As New List(Of PingReply)
    7. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    8. Dim t As New Thread(AddressOf ExecutePings)
    9. t.Start()
    10. End Sub
    11. Private Sub ExecutePings()
    12. Parallel.ForEach(_listIPs, Sub(ip)
    13. Dim pReq As New Ping()
    14. Dim pRes As PingReply = pReq.Send(ip)
    15. _listReplys.Add(pRes)
    16. End Sub)
    17. End Sub
    18. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    19. ' Abfrage Netz A
    20. _listIPs.Add("10.13.214.1")
    21. _listIPs.Add("10.13.214.7")
    22. _listIPs.Add("10.13.214.77")
    23. _listIPs.Add("10.13.214.78")
    24. _listIPs.Add("10.13.214.65")
    25. _listIPs.Add("10.13.214.11")
    26. ' Abfrage Netz B
    27. _listIPs.Add("10.14.196.1")
    28. _listIPs.Add("10.14.196.7")
    29. _listIPs.Add("10.14.196.77")
    30. _listIPs.Add("10.14.196.78")
    31. _listIPs.Add("10.14.196.65")
    32. _listIPs.Add("10.14.196.11")
    33. ' Abfrage Netz C
    34. _listIPs.Add("10.14.196.1")
    35. _listIPs.Add("10.14.196.7")
    36. _listIPs.Add("10.14.196.77")
    37. _listIPs.Add("10.14.196.78")
    38. _listIPs.Add("10.14.196.65")
    39. _listIPs.Add("10.14.196.11")
    40. End Sub
    41. End Class


    Jetzt aber noch eine Frage dazu : sollte eine IP aus dem ersten Abschnitt erreichbar sein, wie bekomme ich das dann mit und kann dann damit weiter verfahren? also in meinem vorhergehenden code hatte ich dies per

    VB.NET-Quellcode

    1. reply = host.Send("10.14.196.5")
    2. If reply.Status = IPStatus.Success Then
    3. Label1.Text = "Netz = B"

    gelöst. wie kann ich es nun auslesen?

    damit das Programm nicht einschläft während der pings, kann ich das ganze ja auch in einen backgroundworker setzen!?