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.