0

good day! Tell me how you can quickly ping the entire network? There is the following code that scans the network.

  Public Sub Scan(ByVal subnet As String)
        Dim myPing As Ping
        Dim reply As PingReply
        Dim addr As IPAddress
        Dim host As IPHostEntry
        Dim active_addr As Integer = 0

        ProgressBar1.Maximum = 254
        ProgressBar1.Value = 0
        ListView1.Items.Clear()

        For i As Integer = 1 To 254

            Dim subnetn As String = "." & i.ToString()
            myPing = New Ping()

            reply = myPing.Send(subnet & subnetn, 900)

            Label3.ForeColor = Color.Green
            Label3.Text = "Scan: " & subnet & subnetn

            If reply.Status = IPStatus.Success Then
                Try
                    addr = IPAddress.Parse(subnet & subnetn)
                    host = Dns.GetHostEntry(addr)


                    If My.Computer.Network.Ping(host.HostName, 10) Then
                        ListView1.Items.Add(New ListViewItem(New String() {subnet & subnetn, host.HostName, "True"}))
                    Else
                        ListView1.Items.Add(New ListViewItem(New String() {subnet & subnetn, host.HostName, "False"}))
                    End If
                Catch
                    ListView1.Items.Add(New ListViewItem(New String() {subnet & subnetn, " ", "False"}))
                End Try
                active_addr += 1

            End If
            ProgressBar1.Value += 1
            Label5.Text = Math.Round((ProgressBar1.Value * 100) / 254, 0, MidpointRounding.AwayFromZero) & " %"
            ')

            ListView1.Items((ListView1.Items.Count - 1)).EnsureVisible()
            ListView1.Items((ListView1.Items.Count - 1)).Selected = True

        Next i


        ListView1.Items(0).Focused = True
        ListView1.Items(0).Selected = True
    End Sub

But it takes a very long time to scan the network. Tell me, is it possible to do it faster? And can I add the device's MAC address when scanning the network?

================================================================

Found a solution that quickly scans the network (a given range of ip addresses).

Tell me. how to add to this code to display the hostname and the MAC address? and add a ProgressBar to show the scan percentage.

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Ping("192.168.1.28", "175")
    End Sub
    Private Async Function Ping(startIP As String, endIP As String) As Task
        Dim start As IPAddress = IPAddress.Parse(startIP)
        Dim bytes = start.GetAddressBytes()
        Dim leastSigByte = start.GetAddressBytes().Last
        Dim range = endIP - leastSigByte

        Dim pingReplyTasks = Enumerable.Range(leastSigByte, range).Select(Function(x)
                                                                              Dim p = New Ping()
                                                                              Dim bb = start.GetAddressBytes()
                                                                              bb(3) = CByte(x)
                                                                              Dim destIp = New IPAddress(bb)
                                                                              Dim pingResultTask = p.SendPingAsync(destIp)
                                                                              Return New With {
        Key pingResultTask,
        Key .addr = destIp
    }
                                                                          End Function).ToList()

        Await Task.WhenAll(pingReplyTasks.Select(Function(x) x.pingResultTask))

        For Each pr In pingReplyTasks
            Dim tsk = pr.pingResultTask
            Dim pingResult = tsk.Result
            Dim ip = pr.addr
            '


            DataGridView1.Rows.Add(ip, pingResult.RoundtripTime, pingResult.Status)

        Next pr

    End Function
Lider13
  • 47
  • 7
  • You could run some concurrent Tasks, as shown [here](https://stackoverflow.com/a/66013390/7444103). It uses the async version, `SendPingAsync()`. – Jimi May 11 '21 at 10:51
  • thanks for the hint. did everything as described in this post. but how to add another mac address and hostname there? – Lider13 May 12 '21 at 08:38

0 Answers0