Estoy usando python socket.py para crear una conexión a un servidor ftp. Ahora quiero restablecer la conexión (enviar un Indicador RST) y escuchar la respuesta del servidor ftp. (FYI, utilizando el socket.enviar(«,’R’) no funciona como el sistema operativo envía indicador de fin en lugar de la PRIMERA.)

¿Por qué desea restablecer la conexión?
replicar un malicioso ftpclient
¿Qué quiere decir «restablecer la conexión»? Como en TCP/IP ‘PRIMERA’ de la bandera?
Sí, quiero enviar un TCP/IP PRIMERO de un cliente y, a continuación, escuchar la respuesta del servidor.
Relacionados: restablecer una conexión TCP desde el lado del servidor

OriginalEl autor Anvay | 2011-06-22

3 Comentarios

  1. 32

    Gire el SO_LINGER opción de socket en el perduran el tiempo a 0 segundos. Esto hará que TCP para abortar la conexión cuando está cerrado, vaciar los datos y envía un RST. Vea la sección 7.5 y ejemplo 15.21 en la UNP.

    En python:

    def client(host, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
        s.connect((host, port))
        l_onoff = 1                                                                                                                                                           
        l_linger = 0                                                                                                                                                          
        s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,                                                                                                                     
                     struct.pack('ii', l_onoff, l_linger))
        # send data here
        s.close()
    Será causa de TCP para abortar la conexión cuando se cierra, bote pendientes de los datos, y envía un RST.
    Sólo algo más de información sobre esto para los curiosos: SO_LINGER con un tiempo de 0 segundos, significa que la pila TCP no «persistir en torno a» en el cierre(): se va a descartar cualquier sin enviar datos y enviar un PRIMER lugar de una ALETA. Para más información puedes leer este y este.
    Tenga en cuenta que si usted está utilizando este código en el entorno de Microsoft Windows, entonces usted necesita para reemplazar el ‘ii’ en la llamada a la estructura.pack() con ‘hh’. Windows utiliza cortos en struct tiempo, donde Linux utiliza enteros.

    OriginalEl autor crowbent

  2. 1

    Para enviar un PRIMERO en una conexión TCP, el conjunto de la SO_LINGER opción para true con un tiempo de espera cero, a continuación, cierre el socket. De esta manera se restablece la conexión. No tengo idea de cómo hacerlo en Python, o incluso si usted puede hacerlo también.

    OriginalEl autor user207421

  3. 0

    Si quieres implementar su propio comportamiento a través de conexiones, creo que usted debe tratar de usar Scapy. Es realmente útil biblioteca/herramienta. Permite jugar con IP/TCP/UDP/ICMP paquetes.

    OriginalEl autor Santiago Alessandri

Dejar respuesta

Please enter your comment!
Please enter your name here