장치 내 핑 요청의 소스를 어떻게 찾나요?

장치 내 핑 요청의 소스를 어떻게 찾나요?

저는 4~6주마다 Google IP 주소를 분당 10~12회 핑하기 시작하는 Linux 기반 모바일 기기를 가지고 있습니다. 이렇게 증가된 핑은 무작위로 시작하고 끝나는 것처럼 보이며 며칠 동안 지속된 후 정상(즉, 핑 없음)으로 돌아가고 핑 요청은 예외 없이 성공적인 응답을 받는 것 같습니다. 핑은 항상 Google 주소를 사용하는 것처럼 보이지만 요청에 사용되는 IP 주소는 핑 활동이 새로 증가할 때마다 변경됩니다.

내 장치에서 ping을 시작하는 응용 프로그램/프로그램을 찾을 수 있는 방법이 있습니까? 나는 달렸다

grep -r "Google"

다른 IP 주소의 소스로 사용할 일종의 장치 목록이나 데이터베이스를 찾고 싶지만 운이 없습니다. 어떤 조언/피드백/지도라도 주시면 감사하겠습니다.

답변1

ftrace가 커널에 구성되어 있고 루트 액세스 권한이 있다고 가정하면 커널 추적 기능을 사용할 수 있습니다.

bpftrace와 같은 최신 도구를 사용할 수 있지만 임베디드 장치에는 필요한 종속성을 설치하는 데 필요한 공간이 부족한 경우가 많습니다. 이 솔루션은 수년 동안 사용되어 온 ftrace를 사용합니다. 이는 단지 원시 파일을 사용하는 것이며 이러한 단계 중 일부를 자동화할 수 있는 도구가 있습니다.

debugfs가 아직 설치되지 않은 경우 설치합니다.

[ -e /sys/kernel/debug/tracing/README ] || mount -t debugfs debugfs /sys/kernel/debug

추적 비활성화, 기능 추적을 위한 보고 설정, 모니터링할 기능 설정

 cd /sys/kernel/debug/tracing
 echo 0 > tracing_on
 echo function > current_tracer
 echo ping_init_sock > set_ftrace_filter
 echo sock_sendmsg >> set_ftrace_filter # Optional, omit if ping_init_sock gives results

추적 활성화

 echo 1 > tracing_on

ping이벤트가 발생할 때 까지 기다린 후 trace파일 내용을 확인하세요.

cat trace
# tracer: function
#
# entries-in-buffer/entries-written: 56/56   #P:1
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
            ping-3085  [000] .... 8035797.349326: ping_init_sock <-inet_create
            ping-3085  [000] .... 8035797.349352: ping_init_sock <-inet6_create
            ping-3085  [000] .... 8035797.349739: sock_sendmsg <-___sys_sendmsg
            ping-3085  [000] .... 8035797.349764: sock_sendmsg <-___sys_sendmsg
            ping-3085  [000] .... 8035797.365248: sock_sendmsg <-__sys_sendto
            ping-3085  [000] .... 8035797.365486: sock_sendmsg <-__sys_sendto
            ping-3085  [000] .... 8035797.379917: sock_sendmsg <-__sys_sendto
            ping-3085  [000] .... 8035797.387487: sock_sendmsg <-__sys_sendto

이는 PID 3085가 핑을 보내고 있음을 나타냅니다. 운이 좋다면 ping을 수행하는 프로세스가 계속 실행 중이므로 출력에서 ​​찾을 수 있습니다 ps. 그렇지 않은 경우 인식 가능한 이름을 사용하는 것이 좋습니다.

둘 다 실패하면 아마도https://github.com/brendangregg/perf-tools/blob/master/deprecated/execsnoop-proc도울 수있다.

관련 정보