Я бы использовал lsof -i
для получения номеров портов, связанных с нужным приложением.Код будет выглядеть следующим образом:
process=firefox
for _port in `lsof -i | grep $process | cut -d' ' -f18 | cut -d: -f2 | cut -d'-' -f1`
do
port=$_port
[[ "$_port" == +([a-zA-Z]) ]] && port=`cat /etc/services | grep '^$_port' | cut -d' ' -f12 | cut -d'/' -f1 | uniq | head -n 1`
echo "tcpdump -w ${port}.pcap port $port &"
tcpdump -w ${port}.pcap port $port &
done
Обратите внимание, что вывод команд может отличаться в разных версиях / дистрибутивах.Поэтому перед использованием сценария лучше проверить правильность обрезки файлов.
Кроме того, этот сценарий не отслеживает порты, которые открываются позже.Для этого я бы рассмотрел более сложный сценарий, который регулярно проверяет порты (используя что-то вроде watch
)
И не забудьте впоследствии уничтожить все процессы tcpdump.