Hola
///IMPORTAR APIs///
Quiero compartir esta código curioso para importar APIs de librerías DLL y de aplicaciones. Es muy útil.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim DialogoAbrir As New System.Windows.Forms.OpenFileDialog
DialogoAbrir.Title = "Abrir..."
DialogoAbrir.FilterIndex = 1
DialogoAbrir.Filter = "*.dll|*.dll|*.exe|*.exe"
DialogoAbrir.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System)
If DialogoAbrir.ShowDialog() = DialogResult.OK Then
ImportAPI(DialogoAbrir.FileName)
End If
End Sub
Sub ImportAPI(ByVal Path_Dll As String)
'//VB6
'Dim Path_Link As String = DirProgramFiles & "\Microsoft Visual Studio\VB98\link.exe"
'****IMPORTANTE****:
'//VB2010
'link.exe se encuentra en:
'C:\Archivos de programa\Microsoft Visual Studio 10.0\VC\bin\
'Tiene dependencia con 'mspdb100.dll' que se encuentra en:
'C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE
'Haz una copia de link.exe en ...\Common7\IDE de lo contrario dará error al no encontrar 'mspdb100.dll'
'//VS2012 64bits
'link.exe se encuentra en:
'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
'mspdb100.dll' se encuentra en:
'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
Dim DirProgramFiles As String
If Environment.Is64BitOperatingSystem Then
DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86))
Else
DirProgramFiles = (Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))
End If
Dim Path_Link As String = (DirProgramFiles & "\Microsoft Visual Studio 10.0\Common7\IDE\link.exe")
Dim FileTemp As String = System.IO.Path.GetTempFileName 'Crea un archivo temporal
Dim C34 As String = Convert.ToChar(34)
'Linea de comandos para link.exe
Dim StartLink As String = String.Format("{0}{1}{2} /dump /exports {3}{4}{5} /out:{6}{7}{8}", _
C34, Path_Link, C34, _
C34, Path_Dll, C34, _
C34, FileTemp, C34)
Try
'Ejecuta link.exe
Dim myProcess As New Process()
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
myProcess.StartInfo.FileName = StartLink
myProcess.StartInfo.CreateNoWindow = True
myProcess.Start()
Catch ex As Exception
MessageBox.Show("No se encuentra link.exe")
End Try
Me.Cursor = Cursors.WaitCursor
System.Threading.Thread.Sleep(2000)
Me.Cursor = Cursors.Default
Dim strBuffer As New System.IO.StreamReader(FileTemp)
TextBox1.Text = strBuffer.ReadToEnd
strBuffer.Close()
FileIO.FileSystem.DeleteFile(FileTemp)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
Sl2
El método también se puede usar para obtener información a través de aplicaciones que usen comandos
Este ejemplo obtiene es el resultado de hacer:
ping www.google.es
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
TextBox1.Text = GetResultCommand(sCommand)
End Sub
#Region "GetResultCommand"
Public Function GetResultCommand(ByVal sCommandLine As String) As String
Dim FileTemp As String = System.IO.Path.GetTempFileName 'Crea un archivo temporal
Dim C34 As String = Convert.ToChar(34)
Dim Result As String = Nothing
sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)
Try
Dim myProcess As New Process()
With myProcess
.StartInfo.UseShellExecute = False
.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
.StartInfo.FileName = sCommandLine
.StartInfo.CreateNoWindow = True
.Start()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Me.Cursor = Cursors.WaitCursor
System.Threading.Thread.Sleep(2000)
Dim FileAccesible As Boolean = False
While FileAccesible = False
Try
Dim strBuffer As New System.IO.StreamReader(FileTemp, System.Text.Encoding.GetEncoding("ibm850"))
Result = strBuffer.ReadToEnd()
FileAccesible = True
strBuffer.Close()
Catch ex As Exception
FileAccesible = False
End Try
My.Application.DoEvents()
End While
Me.Cursor = Cursors.Default
FileIO.FileSystem.DeleteFile(FileTemp)
Return Result
End Function
#End Region
End Class
Mediante este...snippet, supongo. Se obtendría el resultado de una línea de comandos que usáramos en la consola de windows:
GetResultCommand(LÍNA DE COMANDO)
Es importante poner entre comillas la aplicación a la que llamamos:
""cmd.exe"" Dim sCommand As String = String.Format("""cmd.exe"" /r ping {0} ", "www.elhacker.net")
para menos lío también se puede llamar así:
Dim sCommand As String = String.Format("""{0}"" /r ping {1} ", "cmd.exe", "www.elhacker.net")
el caso es que la aplicación quede entre comillas.
[MODIFICACADO]Bueno, he hecho una pequeña modificación porque me he dado cuenta que claro, no todas las aplicaciones con comandos tienen el mismo comando de salida. Por ejemplo
link.exe tiene
/out: y
cmd.exe tiene '
>'. Así que esto es mejor aplicarlo cuando establecemos el comando y no desde el snippet
Con lo cual quedaría así con link.exe:
Dim sCommand As String = String.Format("""{0}"" /dump /exports {1} /out:", _
"C:\Archivos de programa\Microsoft Visual Studio 10.0\Common7\IDE\link.exe", _
"c:\windows\system32\shell32.dll")
TextBox1.Text = GetResultCommand(sCommand)
o así en con cmd.exe:
Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
TextBox1.Text = GetResultCommand(sCommand)
Y he modificado esta línea quitando '>':
sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)
También he añadido:
System.Text.Encoding.GetEncoding("ibm850")
Que no se en otra compu, pero en la mía si no establezco esta codificación para leer el archivo no se ven correctamente las vocales con acento.
-------------------------------------------------------
ALGUNOS COMANDOS INTERESANTES PARA OBTENER INFORMACIÓN Dim sCommand As String = String.Format("""{0}"" /r dir C: >", "cmd.exe")
Dim sCommand As String = String.Format("""{0}"" /r ping {1} >", "cmd.exe", "www.elhacker.net")
Para mostrar todo el contenido de la tabla de rutas IP
Dim sCommand As String = String.Format("""{0}"" /r route print >", "cmd.exe")
Muestra la configuración de TCP/IP completa de todos los adaptadores
Dim sCommand As String = String.Format("""{0}"" /r ipconfig /all >", "cmd.exe")
Muestra una lista de todos los controladores de dispositivo instalados y sus propiedades.
[modo tabla]
Dim sCommand As String = String.Format("""{0}"" /r driverquery >", "cmd.exe")
[modo csv]
Dim sCommand As String = String.Format("""{0}"" /r driverquery /fo csv >", "cmd.exe")
Muestra los archivos en lista donde se ejecuta esta apliación
Dim sCommand As String = String.Format("""{0}"" /r tree /f >", "cmd.exe")
Muestra todos los archivos del directorio C: (puede tardar un poco según el disco)
Dim sCommand As String = String.Format("""{0}"" /r tree c:\ /f >", "cmd.exe")
[Este es muy buen comando] Muestra información de configuración detallada acerca de un equipo y su sistema operativo
(puedes usar 'csv' o 'list' en lugar de 'table'
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /fo table >", "cmd.exe")
Para obtener información de un determinado host (sistema)
comando= 'systeminfo /s HOST /fo table'
Para(obtener) 'HOST' escribe hostname en la consola y luego lo incorporas en el siguente
comando, en este caso es 'mypc'
Dim sCommand As String = String.Format("""{0}"" /r systeminfo /s mypc /fo table >", "cmd.exe")
Muestra una lista de los servicios que se están ejecutando
Dim sCommand As String = String.Format("""{0}"" /r Net start >", "cmd.exe")
Muestra las conexiones activas Dim sCommand As String = String.Format("""{0}"" /r netstat >", "cmd.exe")
Muestra todas las conexiones y puertos de escucha
'
Dim sCommand As String = String.Format("""{0}"" /r netstat -a >", "cmd.exe")
Muestra el ejecutable que crea cada conexión o puerto de(escucha)
Dim sCommand As String = String.Format("""{0}"" /r netstat -b >", "cmd.exe")
Muestra las estadísticas Ethernet. Se puede combinar con la opción()-s
Dim sCommand As String = String.Format("""{0}"" /r netstat -e >", "cmd.exe")
Muestra estadísticas por protocolo. De forma predeterminada,
se muestran para IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP y
UDPv; se puede utilizar la opción -p para especificar un
subconjunto de los valores predeterminados
Dim sCommand As String = String.Format("""{0}"" /r netstat -s >", "cmd.exe")
CONSEJO:
'ALGUNOS COMANDOS PERMITEN USAR TRES TIPOS DE LISTA [LIST|CSV|TABLE]
usando CSV puedes acceder fácilmente a la información usando SPLIT
MODO CSV: "infoA","InfoB","infoC","InfoD"
Ejemplo:
Devuelve la dirección de control de acceso a medios (MAC, media access control) y lista de los protocolos de red asociados con cada la dirección de todas las tarjetas de red de cada equipo
Dim sCommand As String = String.Format("""{0}"" /r getmac /fo csv /nh /v >", "cmd.exe")
Dim sCommand As String = String.Format("""{0}"" /r getmac /s mypc /fo csv >", "cmd.exe")
Espero que os sirva
sl2
[
condejo]
Para un TextBox u otro control de texto usa la fuente
Courier New para que las tablas se muestren de forma ordenada.