Sunteți pe pagina 1din 15

Scanner de Red en Vb.

net
Publicado por ingsistele en marzo 29, 2012 Existen ocasiones en que nos encontramos conectados a una red LAN y por alguna razon nos gustaria conocer detalles de otros equipos que esten conectados a dicha red, para determinarlo se podrian usar varios comandos de DOS, sin embargo se podria automatizar este proceso mediante una aplicacion que scanee toda la red en la que nos encontremos a traves del grupo de direccion ip al que pertenezca y nos permita ver el resultado encontrado de una manera visualmente ordenada. en la siguiente image podemos ver la forma de la aplicacion que pretendemos desarrollar:

Bien, manos a la obra, comencemos entre los controles a utilizar tenemos: * 2 grillas o DatagridView * 5 Textbox * 3 Botones * 1 RadioButton * Varios labels y groupbox (para indicar los nombres de cada campo y ordenar el diseo). al agregar los controles al formulario deberiamos de crear un diseo parecido al que se ve en la siguiente imagen:

cabe aclarar que se esta utilizando una grilla para almacenar la direccion Ip, nombre del equipo y estado, y una segunda grilla para ir almacenando la direccion MAC de cada equipo, los datos se van cargando de forma paralela en cada grilla, es decir que la informacion que aparece en una fila es equivalente a la de la fila en la otra grilla (se realiza este proceso de esta manera usando 2 grillas a conveniencia para facilitar ciertas operaciones que se hacen internamente en el programa). Pasando a la seccion de codigo del formulario, debemos importar las siguientes librerias:
01 Imports System 02 03 Imports System.Net 04 05 Imports System.Net.NetworkInformation 06 07 Imports System.Text 08 09 Imports System.Text.RegularExpressions 10 11 Imports System.Net.Dns

Luego, Declaramos las siguientes variables como globales:


01 Dim cont, aux As Integer 02 Private inicio, fin As Integer 03 04 Public c() As String 05 06 Public d() As String 07

08 Dim direccion_Ip As String 09 10 Dim mimac As String 11 12 Dim encontro As Integer

Bien, ahora pasemos al evento load del formulario, alli lo que haremos sera almacenar en un archivo plano todas las direcciones fisicas o MAC de nuestro computador (Habran tantas direcciones como interfaces de red tengamos), ademas vamos a traer todas las direcciones Ip de las interfaces de red que esten activas y las vamos a cargar en el combobox para luego escoger la ip local de nuestro pc e identificarlo dentro de la red. el codigo de dicho evento load es el siguiente:
01 02 03 Me.Lblmsg.Visible = False 04 05 Me.Button1.Enabled = False 06 07 Try 08 09 Shell("cmd.exe /c getmac >mi_mac.txt", AppWinStyle.Hide) 10 11 Catch ex As Exception 12 13 End Try 14 '++++++++++++++++++++++++++++++++++++++++ 15 16 Dim nombre_Host As String = GetHostName.ToString 17 18 'traigo todas las ip y las coloco en el combo 19 20 Me.TextBox_ipl.Items.Clear() 21 22 23 24 If ip.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then 25 26 'Aadir solo las correspoondientes a IP4 27 28 Me.TextBox_ipl.Items.Add(ip.ToString) 29 For Each ip In System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

30 End If 31 32 Next 33 34 End Sub

Ahora, procedemos a codificar nuestro boton validar, lo que hara es determinar si una direccion ip esta bien escrita y determinar a que grupo pertenece la ip, coloquemos lo siguiente en dicho boton:
01 02 03 Me.DataGridView1.Rows.Clear() 04 05 Me.grilla_mac.Rows.Clear() 06 07 ' Me.TextBox_ipl.Items.Clear() 08 09 Me.TextBox_equipol.Clear() 10 11 Me.TextBox_macl.Clear() 12 13 Me.TextBox_estadol.Clear() 14 15 If TextBox1.Text <> "" Then 16 17 checkRejex(TextBox1.Text) 18 19 Else 20 21 Me.Lblmsg.Visible = True 22 23 Lblmsg.Text = "Por favor Ingrese Una Ip Valida!" 24 25 Lblmsg.ForeColor = Color.Red 26 27 End If 28 29 If TextBox2.Text <> "" Then 30 31 checkRejex(TextBox2.Text) 32 33 Else Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

34 35 Me.Lblmsg.Visible = True 36 37 Lblmsg.Text = "Por favor Ingrese Una Ip Valida!" 38 39 Lblmsg.ForeColor = Color.Red 40 41 End If 42 43 End Sub

La funcion checkRejex es la encargada de verificar cada una de las ip, procedemos a crearla:
01 Private Sub checkRejex(ByVal strFindin As String) 02 03 04 05 If myRegex.IsMatch(strFindin) Then 06 07 Me.Lblmsg.Visible = True 08 09 Lblmsg.Text = "Direccion Ip Valida" 10 11 Lblmsg.ForeColor = Color.Green 12 13 Me.Button1.Enabled = True 14 15 Else 16 17 Me.Lblmsg.Visible = True 18 19 Lblmsg.Text = "Por favor Ingrese Una Direccion Ip Valida!" 20 21 Lblmsg.ForeColor = Color.Red 22 23 End If 24 25 End Sub Dim myRegex As New Regex("^(([01]?\d\d?|2[0-4]\d|25[05])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$")

Bien Amigos, pasemos ahora al boton scanear, aqui es donde se realiza el proceso de busqueda y presentacion de los resultados, para poder comenzar el escaneo es necesario que seleccione la ip local del pc en el combobox de la izquierda y luego se defina el rango de ip a explorar, habiendo cumplido con este requisito, basicamente lo que se hace es determinar cual es la direccion mac

que se esta utilizando, para ello nuevamente se ejecuta la instruccion getmac, luego en el archivo que se crea, lo recorremos hasta encontrar el caracter que indica que esta activo \ y tomamos la primera direccion encontrada (es de resaltar que el caracter \ se encuentra en la posicion 20 de la cadena de caracteras). el codigo del boton escanera es el siguiente:
01 02 03 If (Me.TextBox_ipl.Text = "") Then 04 05 06 07 Else 08 09 direccion_Ip = Me.TextBox_ipl.Text 10 11 'Capturo la direccion mac local 12 13 Dim datos2 As String 14 15 Dim j As Integer 16 17 j = 0 18 19 Shell("cmd.exe /c getmac >mi_mac.txt", AppWinStyle.Hide) 20 21 FileOpen(1, "mi_mac.txt", OpenMode.Input, OpenAccess.Read) 22 23 While Not EOF(1) 24 25 datos2 = LineInput(1) 26 27 ReDim Preserve d(j) 28 29 d(j) = datos2 30 31 j = j + 1 32 33 End While 34 35 FileClose(1) MsgBox("Seleccione su direccion Ip Local por favor!", MsgBoxStyle.Exclamation, "Notificacion") Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

36 37 '---------------------''ya tengo todas las mac de mi computador, ahora busco la que estoy 38 utilizando 39 40 encontro = 0 41 42 For cont2 As Integer = 3 To j - 1 43 ' MsgBox(d(cont2)(20)) 44 45 If (d(cont2)(20) = "\") And (encontro = 0) Then 46 47 'si es igual, esta es la mac que estoy utilizando 48 49 mimac = d(cont2).Substring(0, 18) 50 51 encontro = 1 52 53 ' MsgBox(mimac) 54 55 End If 56 57 Next

Bien hasta aqui solo se ha extraido la direccion mac local del equipo, la imagen siguiente nos pude dar idea del proceso que se ha realizado:

Ahora, continuando con nuestro codigo en el boton scanear, hay que realizar una operacion ciclica de ir haciendo ping a cada direccion ip incluida en el rango y asi determinar si el equipo esta disponible o no en la red.

ademas vamos a utilizar el comando arp -a que lista todas las direcciones mac o fisicas de las direcciones ip que vallamos recorriendo en el ciclo y de esa manera obtenemos la informacion que estamos buscando, luego se agregan los resultados a las grillas y los datos del equipo local en sus respectivos campos de texto, podemos ver la continuacion del codigo del boton scanera a continuacion:
001 Dim ping_usuario As New Ping 002 003 Dim opt = New PingOptions() 004 005 Dim data As String 006 007 Dim xxx As Integer 008 009 opt.DontFragment = True 010 011 Dim xx As String 012 013 Dim reply As PingReply 014 015 Dim cc As Integer = 0 016 017 Dim cco As Integer = 0 018 019 Me.Button2.Enabled = False 020 021 Me.Button1.Enabled = False 022 023 Me.TextBox1.Enabled = False 024 025 Me.TextBox2.Enabled = False 026 027 Try 028 029 '// Create a buffer of 32 bytes of data to be transmitted. 030 031 data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 032 033 Dim buffer() As Byte = Encoding.ASCII.GetBytes(data) 034 035 Dim timeout As Integer = 120 036 037 Dim h As String

038 039 Dim v() As String 040 041 v = Split(TextBox1.Text, ".") 042 043 inicio = v(UBound(v)) 044 045 v = Split(TextBox2.Text, ".") 046 047 fin = v(UBound(v)) 048 049 cont = -1 050 051 '.......... 052 053 If (inicio > fin) Then 054 055 056 057 Me.Button2.Enabled = True 058 059 Me.TextBox1.Enabled = True 060 061 Me.TextBox2.Enabled = True 062 063 Exit Sub 064 065 End If 066 067 xxx = CInt(v(0)) 068 069 If xxx >= 0 And xxx <= 127 Then 070 071 Label9.Text = "La Red es de Clase: A" 072 073 End If 074 075 If xxx >= 128 And xxx <= 191 Then 076 077 Label9.Text = "La Red es de Clase: B" 078 079 End If MsgBox("La Direccion Ip es Invalida, La Direccion de inicio debe ser Menor que la Final!", MsgBoxStyle.Exclamation, "Advertencia")

080 081 If xxx >= 192 And xxx <= 223 Then 082 083 Label9.Text = "La Red es de Clase: C" 084 085 End If 086 087 '.......... 088 089 For index As Integer = inicio To fin 090 091 xx = v(0) & "." & v(1) & "." & v(2) & "." & index 092 093 reply = ping_usuario.Send(xx, timeout, buffer, opt) 094 095 If (reply.Status = IPStatus.Success) Then 096 097 h = Dns.GetHostEntry(xx).HostName 098 099 Shell("cmd.exe /c arp -a >dir_mac.txt") 100 101 If (Trim(direccion_Ip) <> xx) Then 102 103 'esta es mi IP(Ip Local) 104 105 DataGridView1.Rows.Add(xx, h, "Encontrado") 106 107 Else 108 109 Me.TextBox_ipl.Text = xx 110 111 Me.TextBox_equipol.Text = h 112 113 Me.TextBox_macl.Text = mimac 114 115 Me.TextBox_estadol.Text = "Encontrado" 116 117 End If 118 119 cont = cont + 1 120 121 End If

122 123 Next 124 125 'dirm() 126 127 Me.Button2.Enabled = True 128 129 Me.TextBox1.Enabled = True 130 131 Me.TextBox2.Enabled = True 132 133 '-----134 135 Dim datos As String 136 137 Dim i As Integer 138 139 FileOpen(1, "dir_mac.txt", OpenMode.Input, OpenAccess.Read) 140 141 While Not EOF(1) 142 143 datos = LineInput(1) 144 145 ReDim Preserve c(i) 146 147 c(i) = datos 148 149 i += 1 150 151 End While 152 153 FileClose(1) 154 155 If (cont <> 0) Then 156 157 aux = 3 158 159 'si se encontraran equipos en red 160 161 'verifico cuantos equipos hay 162 163 'asigno a la grilla todas las direcciones

164 165 For udg = aux To (cont + aux) - 1 166 167 grilla_mac.Rows.Add(c(udg).Substring(23, 18)) 168 169 Next 170 171 '---------------------172 173 End If 174 175 Catch ex As Exception 176 177 End Try 178 179 End If 180 181 End Sub

Por ultimo solo debemos colocar en nuestro boton cerrar la instruccion


1 Close()

Bien ya hemos terminado la aplicacion ahora tenemos que probarla, para ello hay que establecer direcciones ip a los equipos que tengamos y constatar que pertenezcan al mismo grupo de trabajo, he decidido establecer a mi tarjeta de red la siguiente direccion ip: 192.168.169.1

Dicha Ip corresponde al adaptador anfitrion de mi maquina virtual vmware, ahora voy a configurar la direccion ip del cliente en mi maquina virtual en la cual tengo instalado el windows xp, en la siguiente imagen se ve la ip que le he colocado:

Ahora podemos probar la conexion haciendo ping del equipo host al virtual:

y ahora probemos haciendo ping del equipo virtual al anfitrion:

Bien, ya sabemos que los equipos estan conectados, llego la hora de poner a prueba nuestro programa ejecutandolo:

Como se puede ver en la imagen, ya estan cargadas todas las direcciones ip del equipo (dependiendo de las interfaces que tengamos activas), procedemos a escoger la local con la cual vamos a realizar la busqueda, luego establecemos un rango de ip que pertenezcan a la misma clase y hacemos clic sobre validar, si todo esta bien, se activara el boton scanear y procedemos a presionarlo para comenzar la busqueda:

Como resultado podemos observar que se ha encontrado los equipos que estan conectados a la red y tambien se han mostrado los detalles del equipo local. Eso es todo amigos, espero y les resulte de utilidad la aplicacion, para descargarla has clic sobre el siguiente enlace:

S-ar putea să vă placă și