lsof와 ss가 연결에 대한 메타데이터를 제공한다는 것을 알고 있습니다. 어디서 얻었나요?
예를 들어 다음은 연결을 나타냅니다.
ls -al /proc/102922/fd/98
lrwx------ 1 me me 64 dic 21 06:06 /proc/102922/fd/74 -> 'socket:[3803248]'
ss를 통해 더 많은 정보를 볼 수 있습니다.
tcp ESTAB 0 0 192.168.68.108:33966 198.252.206.25:https users:(("chrome",pid=102922,fd=98)) cubic wscale:9,7 rto:296 rtt:92.785/24.455 ato:40 mss:1448 pmtu:1500 rcvmss:536 advmss:1448 cwnd:10 bytes_sent:1463 bytes_acked:1464 bytes_received:336 segs_out:11 segs_in:7 data_segs_out:6 data_segs_in:2 send 1.25Mbps lastsnd:71284 lastrcv:71292 lastack:26068 pacing_rate 2.5Mbps delivery_rate 271kbps delivered:7 app_limited busy:308ms rcv_space:14480 rcv_ssthresh:64088 minrtt:86.996
그러나 내 응용 프로그램이 실행 중인 시스템에 어떤 이유로 ss가 없다고 가정해 보겠습니다. 소켓:[3803248]에서 ss가 제공하는 tcp 통계로 어떻게 이동할 수 있나요? ss를 완전히 다시 작성할 계획은 없습니다 :) 하지만 파일 시스템에 무엇이 존재하는지 궁금합니다.
답변1
팁: 이와 같은 문제는 일반적 strace -o logfile.txt programname
으로 다음을 실행하여 해결할 수 있습니다. 귀하의 경우 소켓을 ss
생성 AF_NETLINK
하고 이를 통해 메시지를 보내고 받는 것을 볼 수 있습니다.
넷링크네트워크 스택의 내부에 대한 액세스를 제공하도록 설계된 커널에 대한 논리적 인터페이스입니다.
당신은 그것을 사용하여 ldd $(which ss)
찾을 수 있습니다ss
금니라이브러리 - 이러한 메시지를 생성, 전송, 수신 및 구문 분석할 수 있게 해줍니다. 이론적으로는 물론 이러한 메시지를 직접 작성할 수 있지만 libmnl을 부분적으로만 다시 구현하므로(아마도 더 나쁠 수도 있음) 이를 사용하고 싶을 것입니다. 커널 부분을 발명한 동일한 사람들이 수행했기 때문에 다음을 사용합니다. 그것은 당연한 의미입니다.