Descargar

Programa calculadora para subnetear en Visual Basic 2005 y 2008 (página 2)

Enviado por jaimemontoya


Partes: 1, 2

End If

Else "Si la tecla presionada es diferente de un dígito o de la tecla Backspace.

e.KeyChar = "" "Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub TextBoxocteto2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxocteto2.TextChanged

End Sub

Private Sub TextBoxocteto3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxocteto3.KeyPress

If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 8 Then "Los únicos caracteres que se permitirá introducir en el TextBoxocteto3 serán los números del 0 al 9 (ASCII del 48 al 57) y el retroceso de espacio o backspace para borrar números introducidos, que es el ASCII 8.

Dim numdigitosocteto3 As Integer = Len(TextBoxocteto3.Text) "Para contar cuántos dígitos hay en el TextBoxocteto3.

If numdigitosocteto3 = 3 And (Asc(e.KeyChar) <> 8) Then "Si ya hay tres dígitos, ya no se podrá escribir otro, pues el máximo que se puede escribir es 255, pero siempre se podrá usar la tecla Backspace.

e.KeyChar = "" "Borra el dígito que se ha digitado.

End If

Else "Si la tecla presionada es diferente de un dígito o de la tecla Backspace.

e.KeyChar = "" "Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub TextBoxocteto3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxocteto3.TextChanged

End Sub

Private Sub TextBoxocteto4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxocteto4.KeyPress

If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 8 Then "Los únicos caracteres que se permitirá introducir en el TextBoxocteto4 serán los números del 0 al 9 (ASCII del 48 al 57) y el retroceso de espacio o backspace para borrar números introducidos, que es el ASCII 8.

Dim numdigitosocteto4 As Integer = Len(TextBoxocteto4.Text) "Para contar cuántos dígitos hay en el TextBoxocteto4.

If numdigitosocteto4 = 3 And (Asc(e.KeyChar) <> 8) Then "Si ya hay tres dígitos, ya no se podrá escribir otro, pues el máximo que se puede escribir es 255, pero siempre se podrá usar la tecla Backspace.

e.KeyChar = "" "Borra el dígito que se ha digitado.

End If

Else "Si la tecla presionada es diferente de un dígito o de la tecla Backspace.

e.KeyChar = "" "Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub TextBoxocteto4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxocteto4.TextChanged

End Sub

Private Sub TextBoxmascara_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxmascara.KeyPress

If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 8 Then "Los únicos caracteres que se permitirá introducir en el TextBoxmascara serán los números del 0 al 9 (ASCII del 48 al 57) y el retroceso de espacio o backspace para borrar números introducidos, que es el ASCII 8.

Dim numdigitosmascara As Integer = Len(TextBoxmascara.Text) "Para contar cuántos dígitos hay en el TextBoxmascara.

If numdigitosmascara = 2 And (Asc(e.KeyChar) <> 8) Then "Si ya hay dos dígitos, ya no se podrá escribir otro, pues el máximo que se puede escribir es 30, pero siempre se podrá usar la tecla Backspace.

e.KeyChar = "" "Borra el dígito que se ha digitado.

End If

Else "Si la tecla presionada es diferente de un dígito o de la tecla Backspace.

e.KeyChar = "" "Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub TextBoxmascara_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxmascara.TextChanged

End Sub

Private Sub TextBoxnumdesubredes_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBoxnumdesubredes.KeyPress

If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 8 Then "Los únicos caracteres que se permitirá introducir en el TextBoxnumsubredes serán los números del 0 al 9 (ASCII del 48 al 57) y el retroceso de espacio o backspace para borrar números introducidos, que es el ASCII 8.

Dim numdigitosredes As Integer = Len(TextBoxnumdesubredes.Text) "Para contar cuántos dígitos hay en el TextBoxnumsubredes.

If numdigitosredes = 3 And (Asc(e.KeyChar) <> 8) Then "Si ya hay tres dígitos, ya no se podrá escribir otro, pues el máximo que se puede escribir es 999, pero siempre se podrá usar la tecla Backspace.

e.KeyChar = "" "Borra el dígito que se ha digitado.

End If

Else "Si la tecla presionada es diferente de un dígito o de la tecla Backspace.

e.KeyChar = "" "Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

End If

End Sub

Private Sub Buttonsubnetear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonsubnetear.Click

Dim tempnumerodehosts As String "Usada para el método de la burbuja simple.

Dim tempnombresubred As String "Usada para el método de la burbuja simple.

"If Ctype(TextBoxocteto1.Text, Integer) = 0 Or Val(TextBoxocteto2.Text) = 0 Or Val(TextBoxmascara.Text) < 8 Or Val(TextBoxmascara.Text) > 30 Or Val(TextBoxnumdesubredes.Text) < 1 Or TextBoxocteto1.Text = "" Or TextBoxocteto2.Text = "" Or TextBoxocteto3.Text = "" Or TextBoxocteto4.Text = "" Or TextBoxmascara.Text = "" Or TextBoxnumdesubredes.Text = "" Then

If Val(TextBoxocteto1.Text) = 0 Or Val(TextBoxocteto2.Text) = 0 Or Val(TextBoxmascara.Text) < 8 Or Val(TextBoxmascara.Text) > 30 Or Val(TextBoxnumdesubredes.Text) < 1 Or TextBoxocteto1.Text = "" Or TextBoxocteto2.Text = "" Or TextBoxocteto3.Text = "" Or TextBoxocteto4.Text = "" Or TextBoxmascara.Text = "" Or TextBoxnumdesubredes.Text = "" Then

MsgBox("Dirección IP, máscara de subred inválida, o cantidad de subredes inválida.")

Else "Si los datos introducidos son válidos.

Dim nombresubred(999) As String

Dim numerodehosts(999) As String

Dim contadortotaldehosts As Integer "Para contar el número total de hosts que se desean (al sumar todos los hosts de cada subred), y luego poder evaluar si el número no es demasiado alto, es decir si hay capacidad de ofrecer esa cantidad de hosts.

Dim maximohostsdisponibles As Integer

"Ciclo para introducir nombres de las subredes y cantidad de hosts para cada subred.

For i As Integer = 1 To Val(TextBoxnumdesubredes.Text)

nombresubred(i) = InputBox("Nombre de la subred" & Str(i))

numerodehosts(i) = InputBox("Número de hosts de la subred" & Str(i))

contadortotaldehosts += Val(numerodehosts(i))

maximohostsdisponibles += 2 ^ (32 – mascara(Val(numerodehosts(i))))

Next

"TextBoxipsrequeridas.Text = contadortotaldehosts

"TextBoxipsdisponibles.Text = maximohostsdisponibles

"TextBoxipsenredoriginal.Text = 2 ^ (32 – Val(TextBoxmascara.Text)) – 2

"TextBoxporcentajetotalreservado.Text = Str(Math.Round(Val(TextBoxipsrequeridas.Text) * 100 / Val(TextBoxipsenredoriginal.Text), 0)) & "%"

"If Val(TextBoxipsrequeridas.Text) > Val(TextBoxipsenredoriginal.Text) Then

If contadortotaldehosts > (2 ^ (32 – Val(TextBoxmascara.Text)) – 2) Then

MsgBox("La cantidad de hosts requeridos es mayor a la cantidad de hosts disponibles.")

"Borra resultados.

With AxMSFlexGrid1

For fila As Integer = 0 To .Rows – 1

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") "Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

Next

End With

TextBoxipsrequeridas.Text = ""

TextBoxipsdisponibles.Text = ""

TextBoxipsenredoriginal.Text = ""

TextBoxporcentajetotalreservado.Text = ""

TextBoxporcentajesubneteadoreservado.Text = ""

Else

TextBoxipsrequeridas.Text = contadortotaldehosts

TextBoxipsdisponibles.Text = maximohostsdisponibles

TextBoxipsenredoriginal.Text = 2 ^ (32 – Val(TextBoxmascara.Text)) – 2

TextBoxporcentajetotalreservado.Text = Str(Math.Round(Val(TextBoxipsrequeridas.Text) * 100 / Val(TextBoxipsenredoriginal.Text), 0)) & "%"

"TextBoxporcentajetotalreservado.Text = Str(Math.Round(Val(TextBoxipsdisponibles.Text) * 100 / Val(TextBoxipsenredoriginal.Text), 0)) & "%"

TextBoxporcentajesubneteadoreservado.Text = Str(Math.Round(Val(TextBoxipsrequeridas.Text) * 100 / Val(TextBoxipsdisponibles.Text), 0)) & "%"

"Método de la burbuja simple para ordenar las subredes de mayor a menor, en base a la cantidad de hosts por subred.

For i As Integer = 1 To (Val(TextBoxnumdesubredes.Text) – 1)

For i2 As Integer = 1 To (Val(TextBoxnumdesubredes.Text) – 1)

If Val(numerodehosts(i2)) < Val(numerodehosts(i2 + 1)) Then

tempnumerodehosts = numerodehosts(i2)

tempnombresubred = nombresubred(i2)

numerodehosts(i2) = numerodehosts(i2 + 1) "Declaración destructiva.

Nombresubred(i2) = nombresubred(i2 + 1) "Declaración destructiva.

Numerodehosts(i2 + 1) = tempnumerodehosts

nombresubred(i2 + 1) = tempnombresubred

End If

Next

Next

"A partir de aquí se da el proceso de subneteo.

"Dim mascarabase As Integer = Val(TextBoxmascara.Text)

"Dim mascaranueva As Integer

"Obteniendo las máscaras de subred de cada una de las subredes introducidas anteriormente, y los respectivos saltos o incrementos, así como también los valores de cada octeto para cada red.

Dim mascarasubred(999) As Integer

Dim ultimobit(999) As Integer

Dim incremento(999) As Integer

Dim octetoincremento(999) As Integer "Para conocer el octeto en el que se aplicará el incremento, que podría ser el octeto 1, 2, 3 o 4.

Dim octeto1red(999) As Integer "Para octener la dirección de red del octeto 1.

Dim octeto2red(999) As Integer "Para obtener la dirección de red del octeto 2.

Dim octeto3red(999) As Integer "Para obtener la dirección de red del octeto 3.

Dim octeto4red(999) As Integer "Para obtener la dirección de red del octeto 4.

Dim octeto1broadcast(999) As Integer "Para octener la dirección de broadcast del octeto 1.

Dim octeto2broadcast(999) As Integer "Para obtener la dirección de broadcast del octeto 2.

Dim octeto3broadcast(999) As Integer "Para obtener la dirección de broadcast del octeto 3.

Dim octeto4broadcast(999) As Integer "Para obtener la dirección de broadcast del octeto 4.

"Dim octeto1redinicial(999) As Integer "Para obtener la dirección del octeto 1 del primer host utilizable de la subred.

"Dim octeto2redinicial(999) As Integer "Para obtener la dirección del octeto 2 del primer host utilizable de la subred.

"Dim octeto3redinicial(999) As Integer "Para obtener la dirección del octeto 3 del primer host utilizable de la subred.

"Dim octeto4redinicial(999) As Integer "Para obtener la dirección del octeto 4 del primer host utilizable de la subred.

"Dim octeto1nextred(999) As Integer "Para obtener la dirección de red siguiente en el el octeto 1.

"Dim octeto2nextred(999) As Integer "Para obtener la dirección de red siguiente en el el octeto 2.

"Dim octeto3nextred(999) As Integer "Para obtener la dirección de red siguiente en el el octeto 3.

"Dim octeto4nextred(999) As Integer "Para obtener la dirección de red siguiente en el el octeto 4.

Octeto1red(1) = Val(TextBoxocteto1.Text)

octeto2red(1) = Val(TextBoxocteto2.Text)

octeto3red(1) = Val(TextBoxocteto3.Text)

octeto4red(1) = Val(TextBoxocteto4.Text)

"octeto1redinicial(1) = Val(TextBoxocteto1.Text) + 1

"octeto2redinicial(1) = Val(TextBoxocteto2.Text) + 1

"octeto3redinicial(1) = Val(TextBoxocteto3.Text) + 1

"octeto4redinicial(1) = Val(TextBoxocteto4.Text) + 1

For i3 As Integer = 1 To (Val(TextBoxnumdesubredes.Text))

mascarasubred(i3) = mascara(Val(numerodehosts(i3)))

"Obteniendo los incrementos o saltos.

If mascarasubred(i3) >= 1 And mascarasubred(i3) <= 8 Then

ultimobit(i3) = 8

incremento(i3) = 2 ^ (ultimobit(i3) – mascarasubred(i3))

octetoincremento(i3) = 1

Else

If mascarasubred(i3) >= 9 And mascarasubred(i3) <= 16 Then

ultimobit(i3) = 16

incremento(i3) = 2 ^ (ultimobit(i3) – mascarasubred(i3))

octetoincremento(i3) = 2

Else

If mascarasubred(i3) >= 17 And mascarasubred(i3) <= 24 Then

ultimobit(i3) = 24

incremento(i3) = 2 ^ (ultimobit(i3) – mascarasubred(i3))

octetoincremento(i3) = 3

Else

ultimobit(i3) = 32 "If mascarasubred(i3) >= 25 And mascarasubred(i3) <= 30

incremento(i3) = 2 ^ (ultimobit(i3) – mascarasubred(i3))

octetoincremento(i3) = 4

End If

End If

End If

"Aplicando los incrementos correspondientes o manteniendo los valores de los octetos según corresponda.

If octetoincremento(i3) = 1 Then

octeto1red(i3 + 1) = octeto1red(i3) + incremento(i3)

octeto1broadcast(i3) = octeto1red(i3 + 1)

Else

octeto1red(i3 + 1) = octeto1red(i3)

octeto1broadcast(i3) = octeto1red(i3 + 1)

End If

If octetoincremento(i3) = 2 Then

octeto2red(i3 + 1) = octeto2red(i3) + incremento(i3)

octeto2broadcast(i3) = octeto2red(i3 + 1)

If octeto2red(i3 + 1) > 255 Then "Debido a que cada octeto soporta un número máximo de 11111111 binario ó 255 decimal, entonces si se pasa, reiniciar en cero y sumarle uno al octeto anterior.

Octeto2red(i3 + 1) = 0

octeto1red(i3 + 1) += 1

octeto2broadcast(i3) = octeto2red(i3 + 1)

octeto1broadcast(i3) = octeto1red(i3 + 1) + 1

End If

Else

octeto2red(i3 + 1) = octeto2red(i3)

octeto2broadcast(i3) = octeto2red(i3 + 1)

End If

If octetoincremento(i3) = 3 Then

octeto3red(i3 + 1) = octeto3red(i3) + incremento(i3)

octeto3broadcast(i3) = octeto3red(i3 + 1)

"If octeto3red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 3, entonces la dirección de broadcast de la subred actual deberá tener "255" en el tercer octeto, y restarle 1 el segundo octeto de la dirección de subred actual.

" octeto3broadcast(i3) = 255

" octeto2broadcast(i3) -= 1

"Else "Si el tercer octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al tercer octeto de la dirección de subred actual.

" octeto3broadcast(i3) = octeto3red(i3 + 1) – 1

"End If

If octeto3red(i3 + 1) > 255 Then "Debido a que cada octeto soporta un número máximo de 11111111 binario ó 255 decimal, entonces si se pasa, reiniciar en cero y sumarle uno al octeto anterior.

Octeto3red(i3 + 1) = 0

octeto2red(i3 + 1) += 1

octeto3broadcast(i3) = octeto3red(i3 + 1)

octeto2broadcast(i3) = octeto2red(i3 + 1) + 1

"If octeto3red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 3, entonces la dirección de broadcast de la subred actual deberá tener "255" en el tercer octeto, y restarle 1 el segundo octeto de la dirección de subred actual.

" octeto3broadcast(i3) = 255

" octeto2broadcast(i3) -= 1

"Else "Si el tercer octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al tercer octeto de la dirección de subred actual.

" octeto3broadcast(i3) = octeto3red(i3 + 1) – 1

"End If

End If

Else

octeto3red(i3 + 1) = octeto3red(i3)

octeto3broadcast(i3) = octeto3red(i3 + 1)

"If octeto3red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 3, entonces la dirección de broadcast de la subred actual deberá tener "255" en el tercer octeto, y restarle 1 el segundo octeto de la dirección de subred actual.

" octeto3broadcast(i3) = 255

" octeto2broadcast(i3) -= 1

"Else "Si el tercer octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al tercer octeto de la dirección de subred actual.

" octeto3broadcast(i3) = octeto3red(i3 + 1) – 1

"End If

End If

If octetoincremento(i3) = 4 Then

octeto4red(i3 + 1) = octeto4red(i3) + incremento(i3)

octeto4broadcast(i3) = octeto4red(i3 + 1)

"Las siguientes condiciones If anidadas son para encontrar las direcciones de broadcast para cada uno de los octetos, que sería la dirección IP inmediata anterior a la siguiente dirección de subred. Por ejemplo si la siguiente dirección de subred fuera 192.168.0.0, la dirección de broadcast actual será la IP inmediata anterior a 192.168.0.0, es decir: 192.167.255.255.

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 And octeto2red(i3 + 1) = 0 Then

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) = 255

octeto1broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 Then

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

octeto4broadcast(i3) = 255

octeto3broadcast(i3) -= 1

Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

End If

End If

End If

"If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

" octeto4broadcast(i3) = 255

" octeto3broadcast(i3) -= 1

"Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

" octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

"End If

If octeto4red(i3 + 1) > 255 Then "Debido a que cada octeto soporta un número máximo de 11111111 binario ó 255 decimal, entonces si se pasa, reiniciar en cero y sumarle uno al octeto anterior.

Octeto4red(i3 + 1) = 0

octeto3red(i3 + 1) += 1

octeto4broadcast(i3) = octeto4red(i3 + 1)

octeto3broadcast(i3) = octeto3red(i3 + 1) "Broadcast actual del octeto 3 es igual al octeto 3 de la red siguiente.

"Las siguientes condiciones If anidadas son para encontrar las direcciones de broadcast para cada uno de los octetos, que sería la dirección IP inmediata anterior a la siguiente dirección de subred. Por ejemplo si la siguiente dirección de subred fuera 192.168.0.0, la dirección de broadcast actual será la IP inmediata anterior a 192.168.0.0, es decir: 192.167.255.255.

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 And octeto2red(i3 + 1) = 0 Then

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) = 255

octeto1broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 Then

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

octeto4broadcast(i3) = 255

octeto3broadcast(i3) -= 1

Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

End If

End If

End If

"If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

" octeto4broadcast(i3) = 255

" octeto3broadcast(i3) -= 1

"Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

" octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

"End If

End If

Else

octeto4red(i3 + 1) = octeto4red(i3)

octeto4broadcast(i3) = octeto4red(i3 + 1)

"Las siguientes condiciones If anidadas son para encontrar las direcciones de broadcast para cada uno de los octetos, que sería la dirección IP inmediata anterior a la siguiente dirección de subred. Por ejemplo si la siguiente dirección de subred fuera 192.168.0.0, la dirección de broadcast actual será la IP inmediata anterior a 192.168.0.0, es decir: 192.167.255.255.

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 And octeto2red(i3 + 1) = 0 Then "200.0.0.0

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) = 255

octeto1broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 And octeto3red(i3 + 1) = 0 Then

octeto4broadcast(i3) = 255

octeto3broadcast(i3) = 255

octeto2broadcast(i3) -= 1

Else

If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

octeto4broadcast(i3) = 255

octeto3broadcast(i3) -= 1

Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

End If

End If

End If

"If octeto4red(i3 + 1) = 0 Then "Si la siguiente dirección de subred tiene un "0" en el octeto 4, entonces la dirección de broadcast de la subred actual deberá tener "255" en el cuarto octeto, y restarle 1 el tercer octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.8.0, la dirección de broadcast de la subred actual será 128.100.7.255.

" octeto4broadcast(i3) = 255

" octeto3broadcast(i3) -= 1

"Else "Si el cuarto octeto de la siguiente dirección de subred no tiene un "0", entonces simplemente restarle 1 al cuarto octeto de la dirección de subred actual. Ejemplo, si la siguiente subred es 128.100.30.128, la dirección de broadcast de la subred actual será 128.100.30.127.

" octeto4broadcast(i3) = octeto4red(i3 + 1) – 1

"End If

End If

"Ya que se han realizado todos los cálculos requeridos en el proceso de subneteo, se tienen todos los valores necesarios almacenados en variables y sólo falta mostrarlos en pantalla, que es lo que se hace de aquí en adelante.

Dim fila, columna As Integer

AxMSFlexGrid1.Rows = (Val(TextBoxnumdesubredes.Text)) + 1 "El número de filas en el FlexGrid será igual al número de redes más 1, pues se necesita una fila de encabezados.

AxMSFlexGrid1.Cols = 8 "Son ocho columnas y cada una con los siguientes encabezados: "Nombre de la red", "Dirección de red", "Máscara de subred", "Host inicial", "Host final", "Dirección de broadcast", "Hosts requeridos", "Hosts utilizables".

AxMSFlexGrid1.ForeColor = Color.DarkRed "Establece el color predeterminado de las letras.

With AxMSFlexGrid1 "Para no estar poniendo por ejemplo AxMSFlexGrid.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1."

For columna2 As Integer = 0 To 7

.Row = 0 "Para que lo que se hace en este ciclo tenga efecto para la fila cero (que es la de encabezados).

.Col = columna2 "Para que se vaya avanzando de acuerdo con las iteraciones del ciclo For, en la columna que corresponda.

".set_ColAlignment(columna2, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter) "Se establece la alineación del contenido de la fila de encabezados.

.CellForeColor = Color.DarkBlue "Se establece el color de letra para la fila de encabezados.

.set_ColWidth(columna2, 1750) "Se establece el ancho de las celdas de la fila de encabezados.

Next

For fila1 As Integer = 1 To .Rows – 1 "Para no involucrar la primera fila, se comienza de 1 y no d 0.

.Row = fila1

For columna1 As Integer = 1 To .Cols – 1 "Para no involucrar la primera columna, se comienza de 1 y no de 0.

.Col = columna1

.CellForeColor = Color.DarkCyan "Por estar dentro del For anidado, cambia el color de letra de todas las celdas a azul oscuro (excepto la primera fila y la primera columna).

.set_ColWidth(columna1, 1750) "Por estar dentro del For anidado, le da un ancho de 1300 a cada columna (excepto a la primera columna).

".set_ColAlignment(columna1, MSFlexGridLib.AlignmentSettings.flexAlignLeftCenter) "Se establece la alineación a la derecha de todas las celdas.

Next

Next

"Se le ponen los respectivos títulos a cada columna.

.set_TextMatrix(0, 0, "Nombre de la red")

.set_TextMatrix(0, 1, "Dirección de red")

.set_TextMatrix(0, 2, "Máscara de subred")

.set_TextMatrix(0, 3, "Host inicial")

.set_TextMatrix(0, 4, "Host final")

.set_TextMatrix(0, 5, "Dirección de broadcast")

.set_TextMatrix(0, 6, "Hosts requeridos")

.set_TextMatrix(0, 7, "Hosts utilizables")

"Desde acá se programan las impresiones de los resultados del subneteo.

For fila2 As Integer = 1 To (Val(TextBoxnumdesubredes.Text))

.set_TextMatrix(fila2, 0, nombresubred(fila2)) "Nombres de las redes.

.set_TextMatrix(fila2, 1, Str(octeto1red(fila2)) & "." & Str(octeto2red(fila2)) & "." & Str(octeto3red(fila2)) & "." & octeto4red(fila2)) "Direcciones de las redes.

.set_TextMatrix(fila2, 2, "/" & mascarasubred(fila2)) "Máscaras de subredes.

.set_TextMatrix(fila2, 3, Str(octeto1red(fila2)) & "." & Str(octeto2red(fila2)) & "." & Str(octeto3red(fila2)) & "." & Str(Val(octeto4red(fila2)) + 1)) "Direcciones de los hosts iniciales utilizables de las subredes.

.set_TextMatrix(fila2, 4, Str(octeto1broadcast(fila2)) & "." & Str(octeto2broadcast(fila2)) & "." & Str(octeto3broadcast(fila2)) & "." & Str(Val(octeto4broadcast(fila2)) – 1)) "Direcciones de los hosts finales utilizables de las subredes.

".set_TextMatrix(fila2, 4, nombresubred(fila2)) "Direcciones de los hosts finales utilizables de las subredes.

.set_TextMatrix(fila2, 5, Str(octeto1broadcast(fila2)) & "." & Str(octeto2broadcast(fila2)) & "." & Str(octeto3broadcast(fila2)) & "." & octeto4broadcast(fila2)) "Direcciones de broadcast de las subredes.

.set_TextMatrix(fila2, 6, numerodehosts(fila2)) "Número de hosts requeridos.

.set_TextMatrix(fila2, 7, Str(Val(2 ^ (32 – Val(mascarasubred(fila2)))) – 2)) "Número de hosts utilizables.

Next

End With

Next

"TextBox1.Text = mascara(Val(numerodehosts(1)))

"TextBox1.Text = mascarasubred(1)

"TextBox2.Text = mascarasubred(2)

"TextBox3.Text = mascarasubred(3)

"TextBox4.Text = mascarasubred(4)

"TextBox5.Text = mascarasubred(5)

"TextBox6.Text = mascarasubred(6)

"TextBox7.Text = mascarasubred(7)

"TextBox8.Text = mascarasubred(8)

"TextBox9.Text = mascarasubred(9)

"TextBox1.Text = Str(octeto1red(1)) & "." & Str(octeto2red(1)) & "." & Str(octeto3red(1)) & "." & octeto4red(1)

"TextBox2.Text = Str(octeto1red(2)) & "." & Str(octeto2red(2)) & "." & Str(octeto3red(2)) & "." & octeto4red(2)

"TextBox3.Text = Str(octeto1red(3)) & "." & Str(octeto2red(3)) & "." & Str(octeto3red(3)) & "." & octeto4red(3)

"TextBox4.Text = Str(octeto1red(4)) & "." & Str(octeto2red(4)) & "." & Str(octeto3red(4)) & "." & octeto4red(4)

"TextBox5.Text = Str(octeto1red(5)) & "." & Str(octeto2red(5)) & "." & Str(octeto3red(5)) & "." & octeto4red(5)

"TextBox6.Text = Str(octeto1red(6)) & "." & Str(octeto2red(6)) & "." & Str(octeto3red(6)) & "." & octeto4red(6)

"TextBox7.Text = Str(octeto1red(7)) & "." & Str(octeto2red(7)) & "." & Str(octeto3red(7)) & "." & octeto4red(7)

"TextBox8.Text = Str(octeto1red(8)) & "." & Str(octeto2red(8)) & "." & Str(octeto3red(8)) & "." & octeto4red(8)

"TextBox9.Text = Str(octeto1red(9)) & "." & Str(octeto2red(9)) & "." & Str(octeto3red(9)) & "." & octeto4red(9)

End If

End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

"TextBoxocteto1.Focus() "Para posicionar el cursor en el TextBoxocteto1 cuando se cargue el formulario.

End Sub

Private Sub Buttonlimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonlimpiar.Click

With AxMSFlexGrid1

For fila As Integer = 0 To .Rows – 1

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") "Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

Next

End With

TextBoxocteto1.Text = ""

TextBoxocteto2.Text = ""

TextBoxocteto3.Text = ""

TextBoxocteto4.Text = ""

TextBoxmascara.Text = ""

TextBoxnumdesubredes.Text = ""

TextBoxipsrequeridas.Text = ""

TextBoxipsdisponibles.Text = ""

TextBoxipsenredoriginal.Text = ""

TextBoxporcentajetotalreservado.Text = ""

TextBoxporcentajesubneteadoreservado.Text = ""

End Sub

End Class

Código en Modulemetodospublicos.vb

Module Modulemetodospublicos

'Teniendo ordenadas las subredes de mayor a menor (en base a la cantidad de hosts de cada subred), se comienza a subnetear.

'Public bandera As Boolean = True

'Public potencia As Integer = 0

'Public subindice As Integer = 1

Public Function mascara(ByVal numerodehost As Integer) As Integer

Dim bandera As Boolean = True

Dim potencia As Integer = 0

While bandera = True

If ((2 ^ potencia) – 2) > (numerodehost) Then

bandera = False

potencia -= 1

End If

potencia += 1

End While

mascara = 32 – potencia 'Los 32 bits que componen los cuatro octetos de IPv4 menos el número de bits que se usarán para hosts (que se almacena en la variable "potencia").

If numerodehost = 2 Then 'Porque con el proceso anterior, si el parámetro "numerodehost" valiera 2, entonces la máscara daría 29 con los cálculos anteriores, lo cual sería incorrecto.

mascara = 30

End If

End Function

End Module

Programa en Ejecución

Si se introducen valores inválidos, aparecerá el siguiente mensaje:

edu.red

Hacer clic en Subnetear luego de introducir la dirección IP y la máscara de subred, así como también el número de subredes. Aparecerá entonces la ventana emergente para introducir los nombres de cada una de las subredes y el número de hosts para cada una de dichas subredes:

edu.red

edu.red

edu.red

edu.red

edu.red

edu.red

edu.red

El programa realiza el subneteo VLSM correspondiente, y los resultados son los siguientes:

edu.red

Igualmente se puede realizar el subneteo para más redes, tantas como se necesite o desee, y si las redes son tantas que no se alcanzan a visualizar todas en la pantalla, la respectiva barra de desplazamiento aparecerá automáticamente para navegar en la tabla de resultados. El programa presenta también resultados del subneteo, incluyendo hosts requeridos, hosts disponibles en espacio subneteado, hosts disponibles en red original, porcentaje de espacio total reservado y porcentaje de espacio subneteado utilizado. Al hacer clic en el botón Limpiar, todos los resultados desaparecen y se pueden introducir nuevos valores para un nuevo subneteo. Los resultados del programa se comparan con los generados mediante el sitio web http://www.vlsm-calc.net/, y se comprueba que los resultados son exactamente los mismos:

edu.red

edu.red

 

 

 

 

 

Autor:

Jaime Montoya

28 de noviembre de 2008

Huntsville, Alabama, USA

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente