Bueno en este artículo voy a explicar o comentar como hacer un escáner de puertos en VB.NET, para ello y como ejemplo utilizaremos el que hice hace algún tiempo. El resultado final será:
No puedes ver links
Registrate o LoginAntes de comenzar debemos de comprender que hace un escaneador de puertos, es algo fácil de comprender y muy racional, lo que hace es intentar conectarse a un equipo a través de un puerto, si este puerto está cerrado no podrá conectarse.
No puedes ver links
Registrate o LoginLe haremos dos funciones
- Escanear un solo puerto
- Empezar desde el 1 hasta que se paré
Vamos a necesitar dos textbox, uno para el puerto y otro para la ip, un checkbox para seleccionar si un puerto o todos, dos botones uno para comenzar y otro para parar el escaneo y dos listbox uno para los todos los puertos y otro para los abiertos.
Necesitaremos un timer, para que repita la acción de escanear cada X tiempo, pero este no es del todo necesario ya que la función de todos los puerto se puede hacer con un for o con do…loop, haciendo un if para que nunca caiga en el bucle infinito. En este caso lo haremos con un timer, pero insisto no es necesario.
Definimos tres variables, la del puerto, la del host, y un contador para que el puerto vaya aumentando.
Dim host As String
Dim port As Integer
Dim counter As Integer = 0Pasamos al código del timer. Primero de todo debemos de comprobar cual de las dos funciones quiere el usuario, comprobando en el checkbox.
Si está activado le sumamos uno al contador para ir sumándole uno a uno, el número que se va creando lo igualamos a la variable “port” que será el puerto al que se intente conectar, y la variable host se iguala al textbox del host.
If tick_all.Checked = True Then
counter = counter + 1
port = counter
tx_port.Text = counter
Else
port = tx_port.Text
End If
host = tx_host.TextAhora que ya esta definido el host y el puerto vamos a configurar la conexión
Dim hostadd As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)
Dim EPhost As New System.Net.IPEndPoint(hostadd, port)
Dim s As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)Definimos la variable hostadd que será a donde nos conectaremos, del tipo ip como se muestra en la definición. EPhost el puerto y el equipo, se utiliza el tipo System.Net.IPEndPoint es decir un host y un puerto.
La variable s, será el socket final, tipo de socket y tipo de conexión, es decir TCP.
Una vez definido y creado el socket para conectarnos, nos conectamos. Lo haremos así
Try
s.Connect(EPhost)
Catch
Msgbox(“Se ha producido un error”)
End TrySe usa el try por si al conectarse ocurre cualquier error no interrumpa nuestra aplicación. Se conecta al SPhost, que antes definimos (Host y puerto).
If Not s.Connected Then
ListBox1.Items.Add("Puerto " + port.ToString + " cerrado")
Else
ListBox1.Items.Add("Puerto " + port.ToString + " abierto")
ListBox2.Items.Add("Puerto " + port.ToString + " abierto")
End IfComprueba si se pudo conectar, si no se pudo se añade al listbox1, donde estará todos los puertos abiertos y cerrados, y en el listbox2 solo estarán los abiertos.
Le añadiremos un label que nos dirá todos los puertos que hay abiertos, pero el número. En mí caso será label3.
Label3.Text = "Open Ports: " + ListBox2.Items.Count.ToStringCon esta línea cuenta los items del listbox, es decir por cada puerto abierto que antes añadimos al listbox
El código final del timer, para ver si se tiene que parar o no, es decir si el checkbox que indicaba la función de un puerto o todos.
If tick_all.Checked = False Then
Timer1.Stop() ‘Para el timer
Button1.Enabled = True ‘Boton de aceptar activado
Button2.Enabled = False ‘boton de parar desactivado
End If
El código del botón de aceptar el que activaría todo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
ListBox2.Items.Clear()
ListBox1.Items.Add("Scanning: " + tx_host.Text)
ListBox1.Items.Add("-------------------")
Button2.Enabled = True
Button1.Enabled = False
Timer1.Start()
End Sub
Este código lo que hace es limpiar los listbox por si se había ejecutado antes. Se añade la ip al listbox, esto no es necesario pero siempre se queda mejor. Se activa el botón de parar, el de stop, y se desactiva el botón de escanear. Y se inicia el timer que fue al que antes le añadimos el código.
Los botones, el botón de parar (stop), le daremos enabled=false, ya que no se puede parar antes de comenzar, y su código seria
Timer1.Stop()
Button1.Enabled = True
Button2.Enabled = FalseComo dije al principio del mini-articulo, es algo bastante fácil de hacer y simple. Si he cometido algún error o cualquier problema avisen.
SAludos
Fuente: geekhispano.com