HOLA!!!
Hoy veremos como crear un PortScanner asincrono con VB.NET!
1)Primero crearemos el proyecto
(https://i.imgur.com/cwZMc53.png)
2)Entramos en la seccion de Codigo Fuente de nuestra aplicacion y pegamos lo siguiente:
'By 79137913 for http://underc0de.org
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Module PortScanner
Sub Main()
'Creamos el banner
Console.WriteLine(" _ _ _ ___ _ ")
Console.WriteLine(" | | | | | | / _ \ | | ")
Console.WriteLine(" | | | |_ __ __| | ___ _ __ ___| | | | __| | ___ ")
Console.WriteLine(" | | | | '_ \ / _` |/ _ \ '__/ __| |/| |/ _` |/ _ \")
Console.WriteLine(" | |__| | | | | (_| | __/ | | (__| |_| | (_| | __/")
Console.WriteLine(" \____/|_| |_|\__,_|\___|_| \___|\___/ \__,_|\___|")
Console.WriteLine(" Port Scanner By 79137913")
Console.WriteLine("")
Console.WriteLine("Inserte el Puerto de inicio: ")
Dim PortIni As Integer = Console.ReadLine 'Solicitamos el Puerto de inicio
Console.WriteLine("Inserte el Puerto de finalizacion: ")
Dim PortFin As Integer = Console.ReadLine 'Solicitamos el Puerto de Finalizacion
Console.WriteLine("Inserte IP a escanear: ")
Dim IP As String = Console.ReadLine
If IPAddress.TryParse(IP, Nothing) = False Then 'Si el ip esta mal escrito
Console.WriteLine("El IP Ingresado es erroneo.")
Exit Sub
End If
If PortIni <= 0 Then PortIni = 1 'Verificamos que ninguno de los dos puertos sea 0 o menor
If PortFin <= 0 Then PortFin = 1 'Verificamos que ninguno de los dos puertos sea 0 o menor
If PortFin < PortIni Then 'Si el puerto de incio es mayor que el puerto final los intercambiamos
Dim Aux As Integer
Aux = PortIni
PortIni = PortFin
PortFin = Aux
End If
If PortFin > 65535 Then PortFin = 65535 'Verificamos que el puerto final no sea mayor que 65535
For port = PortIni To PortFin
Dim auxPort As Long = port 'Creamos una variable auxiliar para manejar la funcion lambda de una manera segura.
Task.Run(Sub() CheckPort(auxPort, IP))
Next
Console.WriteLine("Espere los resultados o presione ENTER para salir.")
Console.ReadLine() ' Esperamos los resultados
End Sub
Private Sub CheckPort(ByVal port As Long, ByVal IP As String)
Dim myTcpClient As New TcpClient() ' Creamos un cliente TCP
Try
myTcpClient.Connect(IP, port) 'Creamos una conexion con el ip y puerto
Console.WriteLine("Puerto " + port.ToString() + " Abierto ")
myTcpClient.Close() 'Cerramos la conexion
Catch ex As SocketException
Console.WriteLine("Puerto " + port.ToString() + " Cerrado " + ex.Message) 'Si hay un error lo ponemos como cerrado e indicamos cual es la causa.
End Try
End Sub
End Module
3)Cuando ya colocamos el codigo solo queda iniciar (apretar F5) e ir respondiendo lo que nos pide el programa:
(https://i.imgur.com/3n5u2zB.png)
Descargar Source: http://www.mediafire.com/file/6dup4er1u4otdec/PortScanner.rar
Hecho y redactado por 79137913
Agradecimientos @Antrax
Para los curiosos:
Veran que mediante el metodo Task.Run Pude ejecutar funciones de forma asincrona, esto nos sirve para que el codigo no se quede esperando a que cada puerto sea escaneado y a su vez escanee todos a la vez.
Si quieres ver el codigo en C# te invito a usar el conversor de codigo de http://converter.telerik.com/ es muy facil y practico.
GRACIAS POR LEER!!!
Me gustó y me pareció interesante el aporte.
Soy partidario de que te pases a C#.
También use el vb 6.0, con el antiguo ADO y DAO.
Bueno, Saludos.