Napisałem skrypt w tym celu, jeśli chcesz go użyć. Wykorzystanie TFTP byłoby następujące.
sudo what-listens.sh -p 69
Możesz być zaskoczony, gdy zobaczysz, że pokazuje on launchd
zamiast faktycznego procesu TFTP. Usługa musi być uruchomiona, aby zobaczyć rzeczywisty proces TFTP i launchd
prawdopodobnie zarządza tą usługą.
#!/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
Widzę, że pytanie zostało zmodyfikowane za pomocą ...
Moim celem jest użycie skryptu do śledzenia, czy serwer tftp został włączony LUB nie ...
To rozwiązanie działało do Mavericks, 10.9 i prawdopodobnie działa do El Capitan, 10.11.6; ale tak naprawdę nie próbowałem tego na komputerze Mac z wersją wyższą niż 10.9. Aby wyłączyć usługę:
sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.tftpd' -dict Disabled -bool true
Następnie można to sprawdzić:
sudo /usr/libexec/PlistBuddy -c 'print com.apple.tftpd:Disabled' /private/var/db/launchd.db/com.apple.launchd/overrides.plist
Jeśli zwracana wartość nie jest „prawdziwa”, usługa nie jest wyłączona.