elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19]
181  Programación / Programación Visual Basic / Re: ayuda con wininet en: 17 Junio 2009, 08:23 am
buenas de nuevo,
era una tontería pero no acababa de verlo. Tenía que cerrar los handles abiertos a findfirstfile y findnext file antes de vovlver a usarlos.


Código:
Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer

InternetCloseHandle (first_file)
InternetCloseHandle (next_file)


saludos
182  Programación / Programación Visual Basic / ayuda con wininet - solucionado en: 16 Junio 2009, 17:52 pm
Buenas,
trato de hacer un cliente FTP usando el API wininet y me he quedado un poco atascado...
En un form tengo 4 textbox para introducir el server, el puerto, el user y el pass, un botón para conectar al server y un listbox para listar los archivos y carpetas que contiene.
Cuando conecto, me lista correctamente los archivos y carpetas que contiene el server FTP en la carpeta principal, pero cuando intento abrir una de estas carpetas y listar su contenido (haciendo doble click sobre ella) me devuelve 0, como si estuviese vacía, cuando no lo está.
Dejo el código que tengo y si alguno me pudiese orientar le estaría muy agradecido.


Código:

Option Explicit

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long

Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
      lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long

Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
    (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long

Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_FLAG_PASSIVE = &H8000000

Dim hOpen As Long
Dim hConnection As Long
Dim server As String
Dim port As Integer
Dim user As String
Dim pass As String
Dim first_file As Long
Dim next_file As Long
Dim datos As WIN32_FIND_DATA


Private Sub Command1_Click()

hOpen = InternetOpen("MiFTP", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
DoEvents

server = ftp_server.Text
port = CInt(ftp_port.Text)
user = ftp_user.Text
pass = ftp_pass.Text

hConnection = InternetConnect(hOpen, server, port, user, pass, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
DoEvents

first_file = FtpFindFirstFile(hConnection, vbNullString, datos, 0, 0)
If first_file <> 0 Then
    List1.AddItem datos.cFileName
    next_file = InternetFindNextFile(first_file, datos)
    Do While next_file <> 0
        List1.AddItem datos.cFileName
        next_file = InternetFindNextFile(first_file, datos)
        DoEvents
    Loop
End If
End Sub



Private Sub List1_DblClick()

Label6.Caption = Label6.Caption & "/" & List1.List(List1.ListIndex)
List1.Clear
If FtpSetCurrentDirectory(hConnection, Label6.Caption & "/") <> False Then

    first_file = FtpFindFirstFile(hConnection, vbNullString, datos, 0, 0)
    If first_file <> 0 Then
        List1.AddItem datos.cFileName
        next_file = InternetFindNextFile(first_file, datos)
        Do While next_file <> 0
            List1.AddItem datos.cFileName
            next_file = InternetFindNextFile(first_file, datos)
            DoEvents
        Loop
    End If
End If
End Sub

183  Programación / Programación Visual Basic / Re: Duda al cerrar el csocketplus en: 10 Junio 2009, 19:58 pm
hola mariana, y gracias por contestar

ya he intentado eso de intentar controlar el estado con un timer y en caso de que state<>cskconnected que lo quite de la lista de servers conectados,
pero creo que al haberse desconectado el csocket del server, el index del array de csockets del cliente, se descarga, como si hiciese csocket.arrayremove(n) (por lo que me ha parecido entender en las instrucciones del módulo), y me da un error de que
no existe ese index.

de momento con el evento (si es que se dice evento :D) error , cada vez que un server se desconecta me da un error con number=0, pero no sé si ese error se produce solo así, o se puede producir por cualquier otra cosa. He intentado buscar en código del csocket de dónde viene ese error=0, pero me viene demasiado grande  >:(
184  Programación / Programación Visual Basic / Duda al cerrar el csocketplus en: 10 Junio 2009, 00:36 am
hola,
había hecho un troyano multiconexión usando el control winsock y ahora estoy tratando de usar el módulo csocketplus.
La cuestión es que con el winsock, para detectar cuando un server se desconectaba, usaba en el cliente el
Private Sub winsock_Close(Index As Integer) ,
pero con el csocket plus,
el Private Sub csocket_CloseSck(ByVal Index As Variant),
no me da ninguna respuesta.

No sé si funciona de forma distinta que en el winsock ¿?

Por otra parte, haciendo pruebas he visto que cuando un server se cierra, sí que se detecta con
Private Sub csocket_Error(ByVal Index As Variant, ByVal Number As Integer, Description As String, ByVal sCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

dándome un error con nº 0
¿es ésta la forma de detectar que un server ha cerrado la conexión? o se trata de un error genérico?

Muchas gracias de antemano
185  Programación / Programación Visual Basic / Re: como hacer un registro remoto en: 27 Mayo 2009, 17:10 pm
hola otra vez,
se me ocurre que cuando intentas mandar todas las ramas del registro, una tras otra, el winsock puede saturarse.
Yo uso un procedimiento que encontré por algún foro (creo que hacían un explorador de archivos remoto) del que no recuedo el nombre del autor.


Private Sub pausa()        'por un tema de velocidad ya que nuestro micro
                                     'es màs ràpido que nuestra conexiòn crearemos
    Dim comenzar            'un Procedimiento que hara pausas entre envio y envio,
    Dim controlar             'asi no atora a Winsock
    comenzar = Timer
    Do Until controlar >= comenzar + 0.01
        controlar = Timer
        DoEvents
    Loop

End Sub

Llamando a este procedimiento en el server, tras la instrucción winsock.sendddata (call pausa), a mi me envía correctamente todas las ramas.

Espero que te sirva. Un saludo.

P.D. Repito que el código no es mío, lo encontré por ahí y siento no recordar el nombre del autor para ponerlo.
186  Programación / Programación Visual Basic / Re: como hacer un registro remoto en: 27 Mayo 2009, 01:15 am
hola,
precisamente yo estoy tratando de hacer algo similar. Si ya tienes el programa hecho no te será muy difícil (lo digo yo que soy un novato  javascript:void(0);).

lo que yo he hecho ha sido utilizar 3 winsock (para las instrucciones, envio de keys y envío de valores)

primero conecto los 3 winsock y la única pega es que el winsock que va a recibir la petición de conexión tiene que tener el index 0, y cuando recibe el connection_request hay que cargar el winsock(1) que será el que funcione.

cuando el winsock de instrucciones del server recibe una orden, por ejemplo "HKLM"
se ejecuta el api        RegOpenKey(HKEY_LOCAL_MACHINE, "", handle_superior)
y seguido un bucle con el api          RegEnumKeyEx(handle_superior, i, key_name, name_size, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) que mientras sea 0 mandará al cliente,de una en una, los nombres de las keys de HKLM, por el winsock de keys mediante la instrucción     winsock_keys.senddata key_name       y según se reciben se llevan a un listbox

cuando en el server, se reciben datos por el winsock de keys, será la subey que se quiere explorar del handle abierto anterior, se ejecutaría en el server
RegOpenKey(handle_superior, subkey, handle1)    para abrir la nueva subkey
handle_superior = handle1         para la siguiente key que abramos
y de nuevo un bucle con RegEnumKeyEx que se enviaría por winsock_key
y además otro bucle con RegEnumValue que se enviaría por winsock_value y en el cliente se añadiría a otro listbox

para otras instrucciones como borrar claves, crear nuevos valores y demás, habría que o bien meter más winsocks o jugar con las cadenas que se envían, por ejemplo yo envío junto a cada valor su data y su tipo, y después la separo en el cliente.

No sé si te habrá sido de ayuda, leyendo de nuevo el royo que he escrito, la verdad es que ni yo me entero  javascript:void(0);  , pero la idea es enviar desde el cliente una orden al servidor (winsock_cliente.senddata orden), recoger la orden en el servidor (winsock_servidor.getdata orden),analizar la orden en el servidor (if orden=...then), ejecutar la orden, devolver la salida (winsock_servidor.senddata salida) y recogerla en el cliente (winsock_cliente.getdata salida)



Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines