¿Cómo encontrar el nombre del proceso del servidor TFTP en ejecución?

1

Puedo usar el comando sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist para iniciar el servidor TFTP en mac. Pero, ¿cuál es el nombre del proceso del servidor TFTP en ejecución?

Probé ps aux | grep tftp y pgrep tftp , y tampoco me das nada ...

Mi objetivo es usar el script para rastrear si el servidor tftp se ha activado O no ...

    
pregunta m1xed0s 25.07.2016 - 19:43

5 respuestas

1

Actualizar :

Como inspirado por @Christopher, aquí está el guión simple y sucio que escribí para satisfacer mis necesidades :)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys,os

my_pid = os.system("sudo lsof -n -i4UDP:69 > /dev/null 2>&1")

if len(sys.argv) == 1:
    if my_pid == 0:
        print 'TFTP Server is already turned on.'
    else:
        print "Parameter (start/stop) is required to turn on/off TFTP Server!"
elif len(sys.argv) > 2:
    print "Only One Parameter (start/stop) is acceptable!"
else:
    cmdarg = str(sys.argv[1])

    if cmdarg == 'start':
        if my_pid == 0:
            print 'TFTP Server is already turned on, No Action!'
        else: 
            os.system("sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist")
            os.system("sudo chmod 777 /private/tftpboot")
            print 'TFTP Server been Started.'
    elif cmdarg == 'stop':
        if my_pid == 0:
            os.system("sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist")
            os.system("sudo chmod 755 /private/tftpboot")
            print "TFTP Server has been Stopped."
        else:
            print "TFTP Server was not Turned on! No Action!"
    else:
        print "Correct Parameter (start/stop) is required!"
sys.exit()
    
respondido por el m1xed0s 25.07.2016 - 22:13
2

Escribí un script para ese propósito si te importa usarlo. El uso para TFTP sería el siguiente.

sudo what-listens.sh -p 69

Es posible que se sorprenda al descubrir que muestra launchd en lugar del proceso TFTP real. El servicio debe estar en ejecución para ver el proceso TFTP real, y launchd probablemente esté administrando ese servicio.

#!/bin/bash
if [[ "$EUID" -ne 0 ]]; then
    echo 'This script must be run as root.' 1>&2
    exit 1
fi

CMD_SUDO='/usr/bin/sudo'
CMD_LSOF='/usr/sbin/lsof'
CMD_GREP='/usr/bin/grep'

function port() {
    PORT="$1"
    $CMD_SUDO $CMD_LSOF -n -i4TCP:"$PORT" | $CMD_GREP 'LISTEN'
    if [[ "$?" -eq 1 ]]; then
        echo "There is no program listening on port $PORT."
    fi
}

function usage() {
    echo "Usage: $0 [-p,--port <port> ]"
}

B_NEED_ARG=0
case "$1" in
    -p|--port)
        FUNCTION=port
        B_NEED_ARG=1
        ;;
     *)
        echo "Error: unknown parameter: '$1'."
        FUNCTION=usage
        ;;
esac

if [[ $B_NEED_ARG -eq 1 ]] ; then
    if [[ -z "$2" ]] ; then
        echo "Error: option '$1' requires an argument."
        usage
        exit 1
    else
        if ! [[ "$2" =~ ^[0-9]+$ ]]; then
            echo "Error: argument to '$1' option must be an integer."
            usage
            exit 1
        fi
    fi
fi

${FUNCTION} "$2"

unset CMD_SUDO
unset CMD_LSOF
unset CMD_GREP
unset B_NEED_ARG
unset FUNCTION
unset PORT

Veo que la pregunta se modificó con ...

  

Mi objetivo es usar el script para rastrear si el servidor tftp se ha activado O no ...

Esta solución a continuación estaba trabajando hasta Mavericks, 10.9, y probablemente funciona hasta El Capitán, 10.11.6; pero, en realidad no lo he probado en una Mac con una versión superior a 10.9. Para deshabilitar un servicio:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.tftpd' -dict Disabled -bool true

Luego se puede verificar:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.tftpd:Disabled' /private/var/db/launchd.db/com.apple.launchd/overrides.plist

Si el valor de retorno no es "verdadero", entonces el servicio no está deshabilitado.

    
respondido por el Christopher 25.07.2016 - 20:06
1

La respuesta corta es que no hay un proceso en ejecución

Necesitas ver la lista con más detalle (y probablemente leer la documentación de Apple en Agentes de lanzamiento y daemons .

Lo que hace el plist para tftp es proporcionar una lista de sockets que el agente escucha.

Cuando alguien habla con el zócalo que se encuentra en el plist launchd se dará cuenta de que se necesita el programa listado en el plist, / usr / libexec / tftpd, y lo iniciará.

Entonces, hasta que algo le diga al zócalo, el agente no se está ejecutando y creo que como el agente tiene la intención de ser compatible, gritará cuando se cierre el zócalo. Cuando el socket esté abierto, habrá un proceso / usr / libexec / tftpd en ejecución

    
respondido por el Mark 25.07.2016 - 19:58
0

Para verificar si tftpd está correctamente activado, el comando es:

/usr/bin/sudo launchctl list com.apple.tftpd

y la salida debería verse como:

{
        "Wait" = true;
        "Sockets" = {
                "Listeners" = (
                        file-descriptor-object;
                        file-descriptor-object;
                );
        };
        "LimitLoadToSessionType" = "System";
        "Label" = "com.apple.tftpd";
        "inetdCompatibility" = true;
        "TimeOut" = 30;
        "OnDemand" = true;
        "LastExitStatus" = 0;
        "Program" = "/usr/libexec/tftpd";
        "ProgramArguments" = (
                "/usr/libexec/tftpd";
                "-i";
                "/private/tftpboot";
        );
};

Una prueba en $? es suficiente para visualizarla desde el punto de vista del sistema el servicio está activado y se reiniciará según sea necesario en una conexión externa. Por ejemplo:

if /usr/bin/sudo launchctl list com.apple.tftpd ; then
    echo "tftpd is on"
else
    echo "tftpd is off"
fi
    
respondido por el daniel Azuelos 25.07.2016 - 22:46
0

El TFTPD es un servicio que significa que el ejecutable se inicia a pedido cuando se realiza una conexión entrante. Para ver si su Mac responderá, es decir, si el servicio TFTPD está activo, puede usar el siguiente comando en Terminal o shell script. Tenga en cuenta que los privilegios de administrador no son necesarios para este tipo de consulta:

launchctl print system/com.apple.tftpd

Esto producirá una salida de configuración si el servicio está activo de esta manera:

com.apple.tftpd = {
   active count = 0
   path = /System/Library/LaunchDaemons/tftp.plist
   state = waiting
   [...cut for brevity...]
   system service = 1
   }
}

o un error como este:

"Could not find service "com.apple.tftpd" in domain for system"

Lo que significaría que el servicio no se ha iniciado o no se puede iniciar. Si todo lo que le interesa es el estado de ejecución / no ejecución, es más fácil verificar si hay un mensaje de error o el nivel de error distinto de cero devuelto. Nivel de error 0 significa que el servicio TFTPD está activo, no cero significa que no está activo. Por ejemplo, si el launchd no se carga en todo el error, se devuelve el número 113, lo que significa que "no se pudo encontrar el servicio especificado"

    
respondido por el boris42 24.04.2018 - 17:23

Lea otras preguntas en las etiquetas