scanner de red en
Post on 11-Aug-2015
62 Views
Preview:
TRANSCRIPT
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 diseño).
al agregar los controles al formulario deberiamos de crear un diseño 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:
01Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
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 For Each ip In System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList
23
24 If ip.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
25
26 'Añadir solo las correspoondientes a IP4
27
28 Me.TextBox_ipl.Items.Add(ip.ToString)
29
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:
01Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
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
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 Dim myRegex As New Regex("^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$")
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
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:
01Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
02
03 If (Me.TextBox_ipl.Text = "") Then
04
05 MsgBox("Seleccione su direccion Ip Local por favor!", MsgBoxStyle.Exclamation, "Notificacion")
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)
36
37 '----------------------
38 ''ya tengo todas las mac de mi computador, ahora busco la que estoy utilizando
39
40 encontro = 0
41
42 For cont2 As Integer = 3 To j - 143 ' 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 MsgBox("La Direccion Ip es Invalida, La Direccion de inicio debe ser Menor que la Final!", MsgBoxStyle.Exclamation, "Advertencia")
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
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:
top related