Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Buscar un archivo de Windows mediante un script

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar Oct 28, 2008 10:37 am
piero66
Perlero Nuevo
Perlero Nuevo
Registrado: 22 May 2008
Mensajes: 34
Buscar un archivo de Windows mediante un script Responder citando

Hola, espero que me puedan ayudar... necesito por medio de un script buscar un archivo... pero este archivo se encuentra en una carpeta de Windows, y mi script lo quiero correr en Linux, porque ahí esta mi sistema... ¿cómo ven que se podrá hacer?

¡¡ Espero que alguien me pueda ayudar !!

¡¡ Gracias !!
Mensaje Mar Oct 28, 2008 12:04 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Pues eso depende de dónde está conectado el disco duro con el fichero que quieres buscar.

Si está en el mismo ordenador, y solo está funcionando el Linux, entonces tienes que montar la partición Windows para que el sistema la reconozca. Una vez que el sistema de ficheros de Windows sea visible, podrás buscarlo como cualquier otro fichero.

Si el disco está en otro ordenador o está en el mismo pero en una máquina virtual, entonces una posibilidad es usar una conexión por la red de Windows, usando samba en Linux. En Perl puedes usar alguno de los módulos para el protocolo smb o que usen la librería libsamba.

Y si no es posible compartir los directorios, habrá que pensar en poner un servicio en la máquina Windows para que el Linux pueda entrar a buscar. Por ejemplo, un servidor de FTP.
Mensaje Mar Oct 28, 2008 1:08 pm
piero66
Perlero Nuevo
Perlero Nuevo
Registrado: 22 May 2008
Mensajes: 34
Responder citando

¿Tendrás un ejemplo de esa librería libsamba que me pudieras facilitar?, porque en CPAN no encontré nada acerca de esa librería.
¡¡Gracias !!
Mensaje Mar Oct 28, 2008 3:24 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Este programa lo hice hace unos años. El módulo que usé era el Filesys::SmbClientParser.
Perl:

#!/usr/bin/perl
#
# baja_fichero_smb.pl
#
# Joaquín Ferrero. LATUV
#
# Descripción:
#       Baja un fichero por smb y lo deja en directorio destino.
#       No se comprueba que el destino exista.
#
# Entradas:
#       Origen : smb://usuario:contraseña@host/directorios/fichero
#       Destino: directorio y fichero
#
# Parámetros:
#
#
# Salidas:
#
#
# Ejemplo:
#       baja_fichero_smb.pl smb://joaquin:ponzo@xpstore/almacen1/img/2005/0601/img.png imagen_actual.png
#
# Historial:
#       31-may-2005 : Versión inicial
#

use Filesys::SmbClientParser;

## Esperamos dos argumentos, o morimos en el intento
scalar @ARGV == 2
        or die "Uso: $0 <smb://user:pass\@host/dir/file> <dir destino/fichero>";

## Los leemos
my ($smb_url, $dir_destino) = @ARGV;

## Del primer argumento, extraemos todos sus componentes
my ($smb_user, $smb_pass, $smb_host, $smb_dirs, $smb_file)
    = $smb_url =~ m{^smb://(.+):(.+)@([^/]+)(/.+)/([^/]+)$};

## El recurso compartido en Windows está en la primera parte del path
my  $smb_share = (split '/',$smb_dirs)[1];

## Extraemos el resto del path, quitando el nombre del recurso compartido
($smb_dirs) = $smb_dirs =~ m{^/[^/]+(.+)?$};

## Nos conectamos
my $smb = new Filesys::SmbClientParser (
    undef,
    (
        user     => $smb_user ,
        password => $smb_pass ,
        host     => $smb_host ,
        share    => $smb_share,
    )
);

## No nos interesan los mensajes de depurado
$smb->Debug(0);

## Nos metemos dentro del path indicado
$smb->cd($smb_dirs);

## Copiamos el fichero remoto a nuestro sitio
$smb->get($smb_file, $dir_destino);


Para hacer funcionar este módulo, necesitas tener instalado el programa smbclient, del paquete samba.

Otro módulo puede ser Filesys::SmbClient (que es más moderno y recomendado. Mira su sección de ejemplos. Este módulo usa la librería libsmbclient.so), y App::Smbxfer (este no ha pasado de la primera versión).
Mensaje Mie Oct 29, 2008 11:20 am
piero66
Perlero Nuevo
Perlero Nuevo
Registrado: 22 May 2008
Mensajes: 34
Responder citando

Mira, ya instalé desde el CPAN y al correr un ejemplo me marcó este error:

Código:
fd is not of type SMBCFILEPtr at /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Filesys/SmbClient.pm line 356.


El archivo que ejecuté es este:
Perl:
#!/usr/bin/perl -l
use POSIX;
use Filesys::SmbClient;

my $smb = new Filesys::SmbClient(
    username  => "ingresos",
    password  => "ingresos",
#   workgroup => "alian",
    debug     => 10);

# Read a file
my $fd = $smb->open("smb://192.1.47.105/logos/ajax/Libreria-ajax.js", '0666');
while (defined(my $l= $smb->read($fd,50))) {print $l; }
$smb->close(fd);


¿Qué podría ser?
Mensaje Mie Oct 29, 2008 12:22 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Debes comprobar el valor de $fd para saber si has conseguido conectar. Si hay algún error, consulta el valor de la variable $!:
Perl:
my $fd = $smb->open("smb://192.1.47.105/logos/ajax/Libreria-ajax.js")
    or die "No puedo leer el fichero: $!\n";
Mensaje Mie Oct 29, 2008 2:57 pm
piero66
Perlero Nuevo
Perlero Nuevo
Registrado: 22 May 2008
Mensajes: 34
Responder citando

Ya, gracias, ya salió... solo tengo una duda más, el archivo lo ejecuto en el shell y antes de darme el mensaje que yo envío... de si encontró o no el archivo en el sistema me aparecen estos datos:

Código:
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  426 (0x1AA)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=  243 (0xF3)
smb_bcc=383
[000] A1 81 F0 30 81 ED A0 03  0A 01 01 A1 0C 06 0A 2B  ...0.... .......+
[010] 06 01 04 01 82 37 02 02  0A A2 81 D7 04 81 D4 4E  .....7.. .......N
[020] 54 4C 4D 53 53 50 00 02  00 00 00 0C 00 0C 00 38  TLMSSP.. .......8
[030] 00 00 00 15 82 89 62 07  4E 02 3D FB 1D C2 D2 00  ......b. N.=.....
[040] 00 00 00 00 00 00 00 90  00 90 00 44 00 00 00 05  ........ ...D....
[050] 02 CE 0E 00 00 00 0F 4C  00 45 00 4F 00 4E 00 41  .......L .E.O.N.A
[060] 00 44 00 02 00 0C 00 4C  00 45 00 4F 00 4E 00 41  .D.....L .E.O.N.A
[070] 00 44 00 01 00 0E 00 53  00 44 00 53 00 2D 00 53  .D.....S .D.S.-.S
[080] 00 52 00 56 00 04 00 1A  00 6C 00 65 00 6F 00 6E  .R.V.... .l.e.o.n
[090] 00 61 00 64 00 2E 00 67  00 6F 00 62 00 2E 00 6D  .a.d...g .o.b...m
[0A0] 00 78 00 03 00 2A 00 73  00 64 00 73 00 2D 00 73  .x...*.s .d.s.-.s
[0B0] 00 72 00 76 00 2E 00 6C  00 65 00 6F 00 6E 00 61  .r.v...l .e.o.n.a
[0C0] 00 64 00 2E 00 67 00 6F  00 62 00 2E 00 6D 00 78  .d...g.o .b...m.x
[0D0] 00 05 00 1A 00 6C 00 65  00 6F 00 6E 00 61 00 64  .....l.e .o.n.a.d
[0E0] 00 2E 00 67 00 6F 00 62  00 2E 00 6D 00 78 00 00  ...g.o.b ...m.x..
[0F0] 00 00 00 57 00 69 00 6E  00 64 00 6F 00 77 00 73  ...W.i.n .d.o.w.s
[100] 00 20 00 53 00 65 00 72  00 76 00 65 00 72 00 20  . .S.e.r .v.e.r.
[110] 00 32 00 30 00 30 00 33  00 20 00 52 00 32 00 20  .2.0.0.3 . .R.2.
[120] 00 33 00 37 00 39 00 30  00 20 00 53 00 65 00 72  .3.7.9.0 . .S.e.r
[130] 00 76 00 69 00 63 00 65  00 20 00 50 00 61 00 63  .v.i.c.e . .P.a.c
[140] 00 6B 00 20 00 32 00 00  00 57 00 69 00 6E 00 64  .k. .2.. .W.i.n.d
[150] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[160] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[170] 00 52 00 32 00 20 00 35  00 2E 00 32 00 00 00     .R.2. .5 ...2...
Got challenge flags:
Got NTLMSSP neg_flags=0x62898215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_CHAL_TARGET_INFO
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP: Set final flags:
Got NTLMSSP neg_flags=0x60088215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP challenge set by NTLM2
challenge is:
[000] 30 27 71 88 B5 A0 56 6C                           0'q...Vl
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x60088215
  NTLMSSP_NEGOTIATE_UNICODE
  NTLMSSP_REQUEST_TARGET
  NTLMSSP_NEGOTIATE_SIGN
  NTLMSSP_NEGOTIATE_NTLM
  NTLMSSP_NEGOTIATE_ALWAYS_SIGN
  NTLMSSP_NEGOTIATE_NTLM2
  NTLMSSP_NEGOTIATE_128
  NTLMSSP_NEGOTIATE_KEY_EXCH
write_socket(4,278)
write_socket(4,278) wrote 278
got smb length of 192
size=192
smb_com=0x73
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=0
smb_pid=9453
smb_uid=6146
smb_mid=3
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  192 (0xC0)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=    9 (0x9)
smb_bcc=149
[000] A1 07 30 05 A0 03 0A 01  00 57 00 69 00 6E 00 64  ..0..... .W.i.n.d
[010] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[020] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[030] 00 52 00 32 00 20 00 33  00 37 00 39 00 30 00 20  .R.2. .3 .7.9.0.
[040] 00 53 00 65 00 72 00 76  00 69 00 63 00 65 00 20  .S.e.r.v .i.c.e.
[050] 00 50 00 61 00 63 00 6B  00 20 00 32 00 00 00 57  .P.a.c.k . .2...W
[060] 00 69 00 6E 00 64 00 6F  00 77 00 73 00 20 00 53  .i.n.d.o .w.s. .S
[070] 00 65 00 72 00 76 00 65  00 72 00 20 00 32 00 30  .e.r.v.e .r. .2.0
[080] 00 30 00 33 00 20 00 52  00 32 00 20 00 35 00 2E  .0.3. .R .2. .5..
[090] 00 32 00 00 00                                    .2...
size=192
smb_com=0x73
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=0
smb_pid=9453
smb_uid=6146
smb_mid=3
smt_wct=4
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=  192 (0xC0)
smb_vwv[ 2]=    0 (0x0)
smb_vwv[ 3]=    9 (0x9)
smb_bcc=149
[000] A1 07 30 05 A0 03 0A 01  00 57 00 69 00 6E 00 64  ..0..... .W.i.n.d
[010] 00 6F 00 77 00 73 00 20  00 53 00 65 00 72 00 76  .o.w.s.  .S.e.r.v
[020] 00 65 00 72 00 20 00 32  00 30 00 30 00 33 00 20  .e.r. .2 .0.0.3.
[030] 00 52 00 32 00 20 00 33  00 37 00 39 00 30 00 20  .R.2. .3 .7.9.0.
[040] 00 53 00 65 00 72 00 76  00 69 00 63 00 65 00 20  .S.e.r.v .i.c.e.
[050] 00 50 00 61 00 63 00 6B  00 20 00 32 00 00 00 57  .P.a.c.k . .2...W
[060] 00 69 00 6E 00 64 00 6F  00 77 00 73 00 20 00 53  .i.n.d.o .w.s. .S
[070] 00 65 00 72 00 76 00 65  00 72 00 20 00 32 00 30  .e.r.v.e .r. .2.0
[080] 00 30 00 33 00 20 00 52  00 32 00 20 00 35 00 2E  .0.3. .R .2. .5..
[090] 00 32 00 00 00                                    .2...
Mandatory SMB signing enabled!
SMB signing enabled!
cli_simple_set_signing: user_session_key
[000] 5D 00 BE 44 59 E7 DF AE  92 28 9D 43 D5 4C F2 1B  ]..DY... .(.C.L..
cli_simple_set_signing: NULL response_data
simple_packet_signature: sequence number 0
client_sign_outgoing_message: sent SMB signature of
[000] CF E8 15 23 9B 16 1D 87                           ...#....
store_sequence_for_reply: stored seq = 1 mid = 3
get_sequence_for_reply: found seq = 1 mid = 3
simple_packet_signature: sequence number 1
client_check_incoming_message: seq 1: got good SMB signature of
[000] 0A 43 BA 4C C3 1F 38 6A                           .C.L..8j
 session setup ok
simple_packet_signature: sequence number 2
client_sign_outgoing_message: sent SMB signature of
[000] 1F 3C 9D 79 F8 CF 25 10                           .<.y..%.
store_sequence_for_reply: stored seq = 3 mid = 4
write_socket(4,106)
write_socket(4,106) wrote 106
got smb length of 62
size=62
smb_com=0x75
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=4
smt_wct=7
smb_vwv[ 0]=  255 (0xFF)
smb_vwv[ 1]=   62 (0x3E)
smb_vwv[ 2]=    1 (0x1)
smb_vwv[ 3]=  511 (0x1FF)
smb_vwv[ 4]=   31 (0x1F)
smb_vwv[ 5]=    0 (0x0)
smb_vwv[ 6]=    0 (0x0)
smb_bcc=13
[000] 41 3A 00 4E 00 54 00 46  00 53 00 00 00           A:.N.T.F .S...
get_sequence_for_reply: found seq = 3 mid = 4
simple_packet_signature: sequence number 3
client_check_incoming_message: seq 3: got good SMB signature of
[000] 64 3C 92 BD FE EC 9F 3D                           d<.....=
 tconx ok
Server connect ok: //192.1.47.104/Transferir: 0x190b7f00
smbc_getatr: sending qpathinfo
size=110
smb_com=0x32
smb_rcls=0
smb_reh=0
smb_err=0
smb_flg=8
smb_flg2=51201
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=15
smb_vwv[ 0]=   42 (0x2A)
smb_vwv[ 1]=    0 (0x0)
smb_vwv[ 2]=   10 (0xA)
smb_vwv[ 3]=16644 (0x4104)
smb_vwv[ 4]=    0 (0x0)
smb_vwv[ 5]=    0 (0x0)
smb_vwv[ 6]=    0 (0x0)
smb_vwv[ 7]=    0 (0x0)
smb_vwv[ 8]=    0 (0x0)
smb_vwv[ 9]=   42 (0x2A)
smb_vwv[10]=   68 (0x44)
smb_vwv[11]=    0 (0x0)
smb_vwv[12]=  110 (0x6E)
smb_vwv[13]=    1 (0x1)
smb_vwv[14]=    5 (0x5)
smb_bcc=45
[000] 00 44 20 07 01 00 00 00  00 5C 00 43 00 4F 00 43  .D ..... .\.C.O.C
[010] 00 4F 00 5C 00 70 00 72  00 75 00 65 00 62 00 61  .O.\.p.r .u.e.b.a
[020] 00 31 00 2E 00 74 00 69  00 66 00 00 00           .1...t.i .f...
simple_packet_signature: sequence number 4
client_sign_outgoing_message: sent SMB signature of
[000] CE 72 E7 BF A9 A4 8F 30                           .r.....0
store_sequence_for_reply: stored seq = 5 mid = 5
write_socket(4,114)
write_socket(4,114) wrote 114
got smb length of 35
size=35
smb_com=0x32
smb_rcls=52
smb_reh=0
smb_err=49152
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=0
smb_bcc=0
get_sequence_for_reply: found seq = 5 mid = 5
simple_packet_signature: sequence number 5
client_check_incoming_message: seq 5: got good SMB signature of
[000] 98 D2 47 62 BD CC 4D 63                           ..Gb..Mc
size=35
smb_com=0x32
smb_rcls=52
smb_reh=0
smb_err=49152
smb_flg=136
smb_flg2=51205
smb_tid=12288
smb_pid=9453
smb_uid=6146
smb_mid=5
smt_wct=0
smb_bcc=0
get_sequence_for_reply: found seq = 5 mid = 5
cli_errno_from_nt: 32 bit codes: code=c0000034
smbc errno NT_STATUS_OBJECT_NAME_NOT_FOUND -> 2

Error in stat:No existe el fichero o el directorio


Al final aperece el mensaje del script...

Espero me contestes esta última... ¡¡ Gracias !!
Mensaje Mie Oct 29, 2008 4:49 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Todo eso que sale es debido al nivel de debug que pusiste en el new(). Lo principal es el mensaje de error: no encuentra el fichero que le has indicado: no encuentra \COCO\prueba1.tif.

Prueba a cambiar los '\' por '/'.

El esquema es: smb://servidor/recurso compartido/directorio/fichero.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group