Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

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:

Monografias.com

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:

Monografias.com

Monografias.com

Monografias.com

Monografias.com

Monografias.com

Monografias.com

Monografias.com

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

Monografias.com

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:

Monografias.com

Monografias.com

 

 

 

 

 

Autor:

Jaime Montoya

28 de noviembre de 2008

Huntsville, Alabama, USA

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

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter