1 votos

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

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 de proceso del servidor TFTP en ejecución?

Lo intenté. ps aux | grep tftp y pgrep tftp ...ni me da nada...

Mi objetivo es usar script para rastrear si el servidor tftp ha sido activado o no...

2voto

Christopher Puntos 131

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

sudo what-listens.sh -p 69

Puede que te sorprendas al ver que muestra launchd en lugar del proceso TFTP real. El servicio tiene que estar funcionando para ver el proceso TFTP real, y launchd es probablemente la gestión de 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 fue modificada con...

Mi objetivo es usar script para rastrear si el servidor tftp ha sido activado o no...

La solución que se muestra a continuación funcionaba hasta Mavericks, 10.9, y probablemente funcione hasta El Capitán, 10.11.6; pero, en realidad no la he probado en un Mac con una versión superior a la 10.9. Para desactivar un servicio:

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

Entonces se puede comprobar:

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á desactivado.

1voto

marc41 Puntos 46

Actualización :

Inspirado por @Christopher, aquí está el simple y sucio script 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()

1voto

yoliho Puntos 340

La respuesta corta es que no hay ningún proceso en marcha

Necesitas mirar el plano con más detalle (y probablemente leer la documentación de Apple sobre Agentes de lanzamiento y demonios .

Lo que hace el plist de tftp es proporcionar una lista de enchufes en los que el agente escucha.

Cuando alguien hable con el socket listado en el plist launchd se dará cuenta de que el programa listado en el plist, /usr/libexec/tftpd, es necesario y lo iniciará.

Así que hasta que algo le hable al enchufe el agente no está corriendo y creo que como el agente tiene intención de ser compatible gritará cuando el enchufe esté cerrado. Cuando el enchufe esté abierto habrá un proceso /usr/libexec/tftpd corriendo

0voto

Rich Puntos 2429

Para comprobar si tftpd está correctamente activado el comando es:

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

y la salida debería ser 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 de $? es suficiente para espabilar que desde el punto de vista del sistema el servicio se activa y se reiniciará según sea necesario en la 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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X