Как определить, к какому процессу относится полученный TCP-трафик с помощью DTrace в macOS
Как можно видеть здесь, у нас есть PID, доступный при отправке, но не при получении. Как ограничить зонды соединениями, которые принадлежат / инициируются определенным процессом?
sudo dtrace -n 'tcp:::receive, tcp:::send { printf("PID = %d, arg1 == %x", pid, arg1); }'
dtrace: description 'tcp:::receive, tcp:::send ' matched 2 probes
CPU ID FUNCTION:NAME
6 1571 tcp_output:send PID = 13507, arg1 == ffffff80664413c0
0 1574 tcp_input:receive PID = 0, arg1 == 0
0 1574 tcp_input:receive PID = 0, arg1 == 0
6 1571 tcp_output:send PID = 13507, arg1 == ffffff80664f6fd8
6 1574 tcp_input:receive PID = 0, arg1 == 0
6 1574 tcp_input:receive PID = 0, arg1 == 0
2 1571 tcp_output:send PID = 0, arg1 == ffffff80664f9678
4 1571 tcp_output:send PID = 13511, arg1 == ffffff80664413c0
6 1574 tcp_input:receive PID = 0, arg1 == 0
6 1574 tcp_input:receive PID = 0, arg1 == 0
6 1571 tcp_output:send PID = 13511, arg1 == ffffff8057ee7678
6 1574 tcp_input:receive PID = 0, arg1 == 0
6 1574 tcp_input:receive PID = 0, arg1 == 0
4 1574 tcp_input:receive PID = 0, arg1 == 0
4 1571 tcp_output:send PID = 0, arg1 == ffffff806c2b9d18
4 1574 tcp_input:receive PID = 0, arg1 == 0
4 1571 tcp_output:send PID = 0, arg1 == ffffff806c2b9d18
4 1574 tcp_input:receive PID = 0, arg1 == 0
4 1571 tcp_output:send PID = 0, arg1 == ffffff806c2b9d18
6 1571 tcp_output:send PID = 851, arg1 == ffffff806c2b9d18
6 1571 tcp_output:send PID = 851, arg1 == ffffff806c2b9d18
6 1571 tcp_output:send PID = 851, arg1 == ffffff806c2b9d18
0 1574 tcp_input:receive PID = 0, arg1 == 0
0 1574 tcp_input:receive PID = 0, arg1 == 0
На солярисе второй аргумент args[1]
будет указатель на csinfo_t
содержит всю информацию, которая мне нужна, но в Mac OS она всегда равна нулю. Аргументы Solaris описаны по следующей ссылке https://docs.oracle.com/cd/E36784_01/html/E36846/glhmv.html
Я использую macOS 10.13.6