Muy buenas,

Andaba haciendo unas pruebas en .NET y se me estaba pasando por la cabeza obtener las IPs locales de todos los hosts conectados a mi router, entonces para sacar mi propia IP probé con esto:

Código: Seleccionar todo

Dim hostname As String = System.Net.Dns.GetHostName
Dim ip As String = System.Net.Dns.GetHostByName(hostname).AddressList(0).ToString
Pero no se me ocurre cómo hacer lo mismo con los demas hosts..

Alguien podría guiarme un poco sobre la mejor forma de hacerlo?

Gracias y un saludo! :)
Vas muy bien encaminado de hecho solo faltaria algo bastante simple y es listar los host, me explico? hay una manera muy rustica pero funcional jaja que seria recorrer todos las ip 192.168.1.X el unico problema.. es el tiempo que tarda recomiendo que te busques como entretener sobre todo si tu ip termina en 255! (lo probe y funciona)
Dim hostname As String = Dns.GetHostName()
      

        Dim ipHost As IPHostEntry = Dns.GetHostByName(hostname)
        Dim ipOthers As IPAddress() = ipHost.AddressList
        Dim IpRange() As String = Split(ipOthers(0).ToString, ".").ToArray

        For i As Integer = 0 To ipOthers.Length - 1
            If IpRange(0).Contains("192") Then
                For j As Integer = 0 To 255
                    On Error Resume Next
                    MessageBox.Show("Pc: " + Dns.GetHostEntry("192.168.1." + j.ToString).HostName.ToString + "Ip: " + "192.168.1." + j.ToString)
                Next
            End If
            If ipOthers(i).ToString.Contains("10") Then
                For j As Integer = 0 To 255
                    On Error Resume Next
                    MessageBox.Show("Pc: " + Dns.GetHostEntry("10.0.0." + j.ToString).HostName.ToString + "Ip: " + "10.0.0." + j.ToString)
                Next
            End If

        Next
Vas muy bien encaminado de hecho solo faltaria algo bastante simple y es listar los host, me explico? hay una manera muy rustica pero funcional jaja que seria recorrer todos las ip 192.168.1.X el unico problema.. es el tiempo que tarda recomiendo que te busques como entretener sobre todo si tu ip termina en 255! (lo probe a diferencia del anterior este no lo probe deberia funcionar en teoria! pero la parte final no tengo manera de probarla jajja)

Funcional!
Dim hostname As String = Dns.GetHostName()
       
 
        Dim ipHost As IPHostEntry = Dns.GetHostByName(hostname)
        Dim ipOthers As IPAddress() = ipHost.AddressList
        Dim IpRange() As String = Split(ipOthers(0).ToString, ".").ToArray
 
        For i As Integer = 0 To ipOthers.Length - 1
            If IpRange(0).Contains("192") Then
                For j As Integer = 0 To 255
                    On Error Resume Next
                    MessageBox.Show("Pc: " + Dns.GetHostEntry("192.168.1." + j.ToString).HostName.ToString + "Ip: " + "192.168.1." + j.ToString)
                Next
            End If
            If ipOthers(i).ToString.Contains("10") Then
                For j As Integer = 0 To 255
                    On Error Resume Next
                    MessageBox.Show("Pc: " + Dns.GetHostEntry("10.0.0." + j.ToString).HostName.ToString + "Ip: " + "10.0.0." + j.ToString)
                Next
            End If
 
        Next
funcional (teoricamente)
Dim hostname As String = Dns.GetHostName()
      

        Dim ipHost As IPHostEntry = Dns.GetHostByName(hostname) 'obtenemos la ip del nombre de maquina desde donde se ejecuta
        Dim ipOthers As IPAddress() = ipHost.AddressList 'se obtienen todas las ip privadas posibles de distintos programas por ejemplo el vmware
        Dim IpRange() As String = Split(ipOthers(0).ToString, ".").ToArray 'dividimos las ip por sus numeros de sus .

        For i As Integer = 0 To ipOthers.Length - 1 'recorremos todo el array de ips privadas 
            If IpRange(0).Contains("192") And CInt(IpRange(2)).ToString < 3 Then 'evaluamos todas las que empiezan en 192 y tienen en el 3er punto algo menor que 3 el vm ware crea con ip 48! y 71!
                For j As Integer = 0 To 255
                    On Error Resume Next 'toda ip que no exista va a devolver un error asi que bueno lo dejamos que pase!
                    MessageBox.Show("Pc: " + Dns.GetHostEntry("192.168.1." + j.ToString).HostName.ToString + "Ip: " + "192.168.1." + j.ToString)
                Next
            Else

                If IpRange(i).ToString.Contains("10") Then 'evaluamos todas las que empiezan en 10 no se como actua el vmware en estas ip supongo que es similar
                    For j As Integer = 0 To 255
                        On Error Resume Next
                        MessageBox.Show("Pc: " + Dns.GetHostEntry("10.0.0." + j.ToString).HostName.ToString + "Ip: " + "10.0.0." + j.ToString)
                    Next
                Else
                    If IpRange(0) <> "10" Or IpRange(0) <> "192" Then 'este ultimo caso podria ser muuuuuy largo tal vez se deberia poner una comprobacion para seguir! cuando digo largo pensa en horas tal vez!
                        For j As Integer = 0 To 255
                            On Error Resume Next
                            MessageBox.Show("Pc: " + Dns.GetHostEntry(IpRange(0) + "." + IpRange(1) + "." + IpRange(2) + "." + j.ToString).HostName.ToString + "Ip: " + IpRange(0) + "." + IpRange(1) + "." + IpRange(2) + "." + j.ToString)
                        Next
                    End If

                End If

            End If


        Next
Muchas gracias por tu respuesta!

La verdad es que tu primera solución es bastante interesante.. La pena es que tarde tanto en las IPs que no existen hasta que salta el timeout, pero oye, al menos funciona :D

La segunda solución... Prefiero no probarla, porque el último For podría tardar incluso días o meses xD

Supongo que la primera es una buena aproximación. Veré si puedo seguir por ahí.

Gracias de nuevo :)
Responder

Volver a “VB/.NET”