///IMPORTAR APIs///
Quiero compartir esta código curioso para importar APIs de librerías DLL y de aplicaciones. Es muy útil.
Código
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
Código
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:
Código
GetResultCommand(LÍNA DE COMANDO)
Es importante poner entre comillas la aplicación a la que llamamos:
""cmd.exe""
Código
Dim sCommand As String = String.Format("""cmd.exe"" /r ping {0} ", "www.elhacker.net")
para menos lío también se puede llamar así:
Código
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:
Código
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:
Código
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 '>':
Código
sCommandLine = String.Format(sCommandLine & "{0}{1}{2}", C34, FileTemp, C34)
También he añadido:
Código
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
Código:
Dim sCommand As String = String.Format("""{0}"" /r dir C: >", "cmd.exe")
Código:
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
Código:
Dim sCommand As String = String.Format("""{0}"" /r route print >", "cmd.exe")
Muestra la configuración de TCP/IP completa de todos los adaptadores
Código:
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]
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery >", "cmd.exe")
Código:
Dim sCommand As String = String.Format("""{0}"" /r driverquery /fo csv >", "cmd.exe")
Muestra los archivos en lista donde se ejecuta esta apliación
Código:
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)
Código:
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'
Código:
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'
Código:
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
Código:
Dim sCommand As String = String.Format("""{0}"" /r Net start >", "cmd.exe")
Muestra las conexiones activas
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat >", "cmd.exe")
Muestra todas las conexiones y puertos de escucha
'
Código:
Dim sCommand As String = String.Format("""{0}"" /r netstat -a >", "cmd.exe")
Muestra el ejecutable que crea cada conexión o puerto de(escucha)
Código:
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
Código:
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
Código:
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
Código:
Dim sCommand As String = String.Format("""{0}"" /r getmac /fo csv /nh /v >", "cmd.exe")
Código:
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.