Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: TitoPacheco en Agosto 06, 2020, 01:17:30 AM

Título: [SOLUCIONADO] Generar archivo remotamente.
Publicado por: TitoPacheco en Agosto 06, 2020, 01:17:30 AM
Buenas, estoy aprendiendo a programar hace unos meses, y tenia una duda. Hay alguna forma de generar un archivo en otra pc o en un servidor remoto?
Por ejemplo, si yo creo el archivo en la PC "a" y lo ejecuto en la PC "b", que se cree un archivo en la "a". De no ser posible si me pudieran dar alternativas a lo que me refiero se los agradeceria.
Título: Re:Generar archivo remotamente.
Publicado por: ??????? en Agosto 06, 2020, 01:40:57 AM
Buenas!

Algo muy simple que se me ocurre ahora, es que el archivo que se cree en la máquina B, se envíe mediante sockets (el módulo en Python es socket: https://docs.python.org/3/library/socket.html) a la máquina A y que luego el archivo generado en B, se elimine, quedando así el fichero en A. Es algo muy sencillo de hacer.

Saludos!

-Kirari
Título: Re:Generar archivo remotamente.
Publicado por: DtxdF en Agosto 07, 2020, 02:35:37 AM
Como lo explica el compañero, puede usar sockets y un lenguaje de programación. Por ejemplo, podríamos usar Python:

Un ejemplo usando la consola (Servidor):

Código (bash) [Seleccionar]
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> server.bind(('localhost', 4848))
>>> server.listen(1)
>>> obj = server.accept()
>>> obj
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 4848), raddr=('127.0.0.1', 57542)>, ('127.0.0.1', 57542))
>>> (sock, addr) = obj
>>> with open('file.txt', 'wb') as fd:
...     fd.write(sock.recv(5))
...
5
>>> exit()
shell$ cat file.txt
Hola


La contraparte (Cliente):

Código (bash) [Seleccionar]
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> client.connect(('localhost', 4848))
>>> client.send(b'Hola\n')
5
>>>


~ DtxdF
Título: Re:Generar archivo remotamente.
Publicado por: TitoPacheco en Agosto 07, 2020, 07:59:42 PM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Como lo explica el compañero, puede usar sockets y un lenguaje de programación. Por ejemplo, podríamos usar Python:

Un ejemplo usando la consola (Servidor):

Código (bash) [Seleccionar]
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> server.bind(('localhost', 4848))
>>> server.listen(1)
>>> obj = server.accept()
>>> obj
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 4848), raddr=('127.0.0.1', 57542)>, ('127.0.0.1', 57542))
>>> (sock, addr) = obj
>>> with open('file.txt', 'wb') as fd:
...     fd.write(sock.recv(5))
...
5
>>> exit()
shell$ cat file.txt
Hola


La contraparte (Cliente):

Código (bash) [Seleccionar]
Python 3.8.5 (default, Jul 27 2020, 08:42:51)
[GCC 10.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> client.connect(('localhost', 4848))
>>> client.send(b'Hola\n')
5
>>>


~ DtxdF

Muchas gracias, lo explicaste bastante bien, pero aun tengo una duda, si el archivo es ejecutado desde otra red no serviria el "localhost",no? Haria falta establecer una ip fija o algo asi?
Título: Re:Generar archivo remotamente.
Publicado por: DtxdF en Agosto 07, 2020, 11:36:46 PM
@TitoPacheco (https://underc0de.org/foro/index.php?action=profile;u=111060)

Aunque están correlacionados no se le dice ejecutar (en este caso), en cambio lo que hace ese pequeño snippet es leer el archivo 'file.txt' para enviarlo al otro extremo a posteriori.


Sobre tu cuestión sobre la dirección IP, te dejo unos enlaces que te explican un poco más algunos conceptos introductorios y quizá te ayuden en algo:

*- blog.orange.es/innovacion/que-es-direccion-ip-y-que-tienes-que-saber-sobre-la-tuya/
*- www.itba.edu.ar/intranet/como-hago/ch/como-obtener-el-numero-de-ip-de-una-pc/
*- es.godaddy.com/blog/que-es-direccion-ip-estatica-y-dinamica/
*- www.profesionalreview.com/2018/11/22/modelo-osi/
*- es.wikipedia.org/wiki/Modelo_TCP/IP
*- es.wikipedia.org/wiki/Socket_de_Internet


Resumiendo: No es necesario que sea una dirección IP estática, aunque funcionaría perfectamente también con una dirección IP dinámica. Aunque leyendo nuevamente lo que dijo, supongo se refiere a colocar la dirección IP del servidor como argumento en la tupla '.bind('<Dirección IP>', <Puerto>)' y también en '.connect(('<Dirección IP del servidor>', <Puerto a conectar>))'. Básicamente se lo explico así: Supongamos que existe un cartero (la máquina cliente) y éste necesita saber la dirección en donde enviará un paquete, en este caso nosotros (el servidor) le proporcionaremos la dirección donde vivimos (la dirección IP) y ahora los dos podrán enviarse paquetes entre sí; ok, todo bien hasta aquí, nosotros vivimos en una casa hasta que morimos por lo que nunca cambiaríamos de dirección y el cartero sabría en que lugar vivimos siempre, pero supongamos otra situación donde cada 24 horas estamos cambiando de casa, por lo tanto de dirección, lo primero se le conoce como dirección IP estática y lo segundo como dinámica, simple.

¿Quién nos proporciona esa dirección?, supongamos que sea una centro establecido en su urbanización el encargado de eso (el DHCP), el cual usted le pide una dirección, pero en el contrato está claro que tiene que renovarla cada 24 horas (dirección IP dinámica), a cambio si el centro le dice que no le importa qué dirección tenga, entonces usted mismo puede asignarse una (dirección estática) o él le brinda una y solo una.

Así que sí, dependiendo de la situación necesita colocar una dirección IP válida y que le haya proporcionado.

Nota: No soy muy bueno con las analogías y con la abstracción, aun así espero me haya entendido xD

~ DtxdF