Come trovare il nome del processo del server TFTP in esecuzione?

1

Posso usare il comando sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist per avviare TFTP Server su mac. Ma qual è il nome del processo del server TFTP in esecuzione?

Ho provato ps aux | grep tftp e pgrep tftp , né mi dai nulla ...

Il mio obiettivo è utilizzare lo script per monitorare se il server tftp è stato attivato o no ...

    
posta m1xed0s 25.07.2016 - 19:43
fonte

5 risposte

1

Aggiorna :

Come ispirato da @Christopher, Ecco la sceneggiatura semplice e sporca che ho scritto per soddisfare le mie esigenze:)

#!/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()
    
risposta data 25.07.2016 - 22:13
fonte
2

Ho scritto una sceneggiatura per questo scopo se ti interessa usarla. L'utilizzo per TFTP sarebbe il seguente.

sudo what-listens.sh -p 69

Potresti essere sorpreso di scoprire che mostra launchd invece del vero processo TFTP. Il servizio deve essere in esecuzione per visualizzare il processo TFTP effettivo e launchd probabilmente sta gestendo quel servizio.

#!/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

Vedo che la domanda è stata modificata con ...

My goal is to use script to track if tftp server has been turned on OR not...

Questa soluzione sotto stava funzionando fino a Mavericks, 10.9, e probabilmente funziona fino a El Capitan, 10.11.6; ma, in realtà non l'ho provato su un Mac con una versione superiore a 10.9. Per disabilitare un servizio:

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

Può quindi essere controllato:

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

Se il valore restituito non è "true", il servizio non è disabilitato.

    
risposta data 25.07.2016 - 20:06
fonte
1

La risposta breve è che non esiste un processo in esecuzione

È necessario esaminare più dettagliatamente (e probabilmente leggere la documentazione di Apple su Avvia agenti e demoni .

Il plist di tftp fornisce un elenco di socket su cui l'agente è in ascolto.

Quando qualcuno parla al socket elencato nel plist launchd realizzerà che il programma elencato nel plist, / usr / libexec / tftpd, è necessario e avvialo.

Quindi finché qualcosa non parla al socket l'agente non è in esecuzione e penso che l'agente sia inteso compatibile e urlerà quando il socket sarà chiuso. Quando il socket è aperto ci sarà un processo / usr / libexec / tftpd in esecuzione

    
risposta data 25.07.2016 - 19:58
fonte
0

Per verificare se tftpd è correttamente attivato il comando è:

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

e l'output dovrebbe essere simile a:

{
        "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";
        );
};

Un test su $? è sufficiente per espanderlo dal punto di vista del sistema il servizio è attivato e verrà riavviato come necessario durante la connessione esterna. Ad esempio:

if /usr/bin/sudo launchctl list com.apple.tftpd ; then
    echo "tftpd is on"
else
    echo "tftpd is off"
fi
    
risposta data 25.07.2016 - 22:46
fonte
0

Il TFTPD è un servizio che significa che l'eseguibile viene avviato su richiesta quando viene effettuata una connessione in entrata. Per vedere se il tuo Mac risponderà, ad esempio se il servizio TFTPD è attivo, puoi usare il seguente comando in Terminal o script di shell. Nota che i privilegi di amministratore non sono necessari per questo tipo di query:

launchctl print system/com.apple.tftpd

Questo produrrà un output di configurazione se il servizio è attivo in questo modo:

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

o un errore come questo:

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

Il che significherebbe che il servizio non è stato o non può essere avviato. Se tutto ciò che ti interessa è in esecuzione / non è in esecuzione, allora è più semplice controllare il messaggio di errore o il valore di errore diverso da zero restituito. Errorlevel 0 significa servizio TFTPD attivo, non zero significa non attivo. Ad esempio, se launchd non è stato caricato a tutti i errorlevel, viene restituito il numero 113 che significa: "Impossibile trovare il servizio specificato"

    
risposta data 24.04.2018 - 17:23
fonte

Leggi altre domande sui tag